ID: 46978 Updated by: rricha...@php.net Reported By: remy dot damour at laposte dot net -Status: Assigned +Status: Bogus Bug Type: XML Reader Operating System: ubuntu intrepid PHP Version: 5.2.8 Assigned To: rrichards New Comment:
This is expected behavior - document needs to be set prior to setting the schema. I will however add a more descriptive error for this case. Previous Comments: ------------------------------------------------------------------------ [2008-12-31 00:30:18] remy dot damour at laposte dot net Rob, Thanks for your help you're 100% right, loading data prior to setting relax-ng schema removes the error message. Problem now is that relax-ng validation seems to fail: <?php $rng_schema = <<<RNG <?xml version="1.0"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <start> <element name="node1"><text/></element> </start> </grammar> RNG; $xml_data = <<<XML <?xml version="1.0"?> <node2/> XML; $xml_reader = new XMLReader(); $xml_reader->xml($xml_data); $xml_reader->setRelaxNGSchemaSource($rng_schema); $xml_reader->setParserProperty(XMLReader::VALIDATE, true); var_dump($xml_reader->isValid()); #expected output: bool(false) #php output: bool(true) ?> Output when calling xmllint: node1.xml:2: element node2: Relax-NG validity error : Expecting element node1, got node2. node1.xml fails to validate I've commented it here too: http://www.qc4blog.com/?p=363 Regards, Remy ------------------------------------------------------------------------ [2008-12-30 22:19:34] remy dot damour at laposte dot net I've described my problem here too with additional details and a quick workaround using xmllint tool: http://www.qc4blog.com/?p=363 Regards, Remy ------------------------------------------------------------------------ [2008-12-30 21:04:30] remy dot damour at laposte dot net Description: ------------ Each time I call XMLReader::setRelaxNGSchema() or XMLReader::setRelaxNGSchemaSource() it ends up with an error message. My relax-ng content looks valid, it's succefully loaded and used for parsing xml with both xmllint (from package libxml2-utils) and sun-microsystem "msv" (https://msv.dev.java.net/) validator. Reproduce code: --------------- <?php $rng_schema = <<<RNG <?xml version="1.0"?> <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <start> <element name="node1"><text/></element> </start> </grammar> RNG; $xml_reader = new XMLReader(); $xml_reader->setRelaxNGSchemaSource($rng_schema); Expected result: ---------------- no error message Actual result: -------------- Warning: XMLReader::setRelaxNGSchemaSource() [xmlreader.setrelaxngschemasource]: Unable to set schema. This must be set prior to reading or schema contains errors. in /var/www/test.php on line 12 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=46978&edit=1