Re: Bug in DOMDocument schemaValidate() function?
| From: | Matijn Woudt | Date: | Mon, 14 May 2012 14:43:31 +0000 |
| Subject: | Re: Bug in DOMDocument schemaValidate() function? | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-317876@lists.php.net to get a copy of this message | ||
On Mon, May 14, 2012 at 1:39 PM, Voß, Marko <Marko.Voss@fiz-karlsruhe.de> wrote:
> Hello,
>
> I am validating user DOM against schema files using the following piece of code:
>
> $valid = @$doc->schemaValidate($xsdFile);
>
> where $doc is of type DOMDocument and $xsdFile is the file location of the XSD file.
>
> Everything worked fine until the following validation occured:
>
> A validation of a XML against the SRW/U schema
> (http://www.loc.gov/standards/sru/sru1-1archive/xml-files/srw-types.xsd)
> failed.
>
> Here is the XML:
>
> -----------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <srw:explainResponse
> xmlns:srw="http://www.loc.gov/zing/srw/"
> xmlns:zr="http://explain.z3950.org/dtd/2.0/">
> <srw:version>1.1</srw:version>
> <srw:record>
>
> <srw:recordSchema>http://explain.z3950.org/dtd/2.0/</srw:recordSchema>
> <srw:recordPacking>XML</srw:recordPacking>
> <srw:recordData>
> <zr:explain>
> <zr:serverInfo
> wsdl="http://myserver.com/db" protocol="SRU"
> version="1.1">
> <host>myserver.com</host>
> <port>80</port>
> <database>sru</database>
> </zr:serverInfo>
> <zr:databaseInfo>
> <title lang="en" primary="true">SRU Test
> Database</title>
> <description lang="en" primary="true"> My server SRU
> Test Database</description>
> </zr:databaseInfo>
> <zr:metaInfo>
> <dateModified>27-11-2003</dateModified>
> </zr:metaInfo>
> </zr:explain>
> </srw:recordData>
> </srw:record>
> </srw:explainResponse>
> -----------------------------------------------------
>
> This XML is valid. However, I keep getting the following libxml error:
>
> object(LibXMLError)#192 (6) {
> ["level"]=>
> int(2)
> ["code"]=>
> int(1871)
> ["column"]=>
> int(0)
> ["message"]=>
> string(133) "Element
> '{http://www.loc.gov/zing/srw/}record': This element is
> not expected. Expected is (
> {http://www.loc.gov/zing/srw/}version ).
> "
> ["file"]=>
> string(0) ""
> ["line"]=>
> int(0)
> }
>
> I think, the validator is unable to handle the xsd:extension part of the schema:
>
> <xsd:complexType name="explainResponseType">
> <xsd:complexContent>
> <xsd:extension base="responseType">
> <xsd:sequence><xsd:element ref="record"/>
> <xsd:element ref="echoedExplainRequest" minOccurs="0"/>
> <xsd:element ref="diagnostics" minOccurs="0"/>
> <xsd:element ref="extraResponseData" minOccurs="0"/>
> </xsd:sequence>
> </xsd:extension>
> </xsd:complexContent>
> </xsd:complexType>
>
> The version-element exists and is at the right place. If I add another version-element after
> the first one, it complains
> about expecting a record-element instead, which is correct. But it is not correct to expect
> another version-element
> after the already existing one.
>
> Is this a bug? Or did I made a mistake somewhere and I am not able to see it right now?
>
>
> Thank you for any help!
>
> Best regards,
> Marko
>
If you're 100% sure this XML is valid, then this is a bug. You should
report it at bugs.php.net, but it is most likely this bug is in
libXML, and needs to be fixed there.
- Matijn