$dom->relaxNGValidate('quotes.rng')
For the latter two, the following four methods of the DOM object exist:
-
schemaValidate('file.xsd')
Validates against a Schema file -
schemaValidateSource('...')
Validates against a Schema string -
relaxNGValidate('file.rng')
Validates against a relaxNG file -
relaxNGValidateSource('...')
Validates against a relaxNG string
The preceding code uses relaxNGValidate()
to validate a (well-formed) XML file against a nonmatching relaxNG file. If you change <element name="person">
to <element name="author">
in the file quotes.rng
, the validation succeeds.
Validating XML Against relaxNG
<?php $dom = new DOMDocument; $dom->load('quotes.xml'); echo 'Validation ' . (($dom->relaxNGValidate('quotes.rng')) ? 'succeeded.' : 'failed.'); ?>
Creating a relaxNG file can be quite difficult; the Java tool Trang, available at http://thaiopensource.com/relaxng/trang.html
, can read in an XML file and create a relaxNG, Schema, or DTD file out of it.
Validating a Schema is similar and shown in the file validate-xsd.php
in the download repository. When it comes to validating DTDs, you have to patch the XML a bit. The DTD file must be included in the file or referenced like this:
<!DOCTYPE note SYSTEM "quotes.dtd">
Then, just load the XML document into a DOM object and call validate()
. The following contains the appropriate code; the file referenced in the code repository contains an intentional error in the DTD (month
instead of year
).
Validating XML Against a DTD
<?php $dom = new DOMDocument(); $dom->load('quotes-dtd.xml'); echo 'Validation ' . (($dom->validate()) ? 'succeeded.' : 'failed.'); ?>
What Does PEAR Offer?
As of this writing, the XML section of PEAR contains 28 packages, too many to mention. Here are some of them:
-
XML_Beautifier
formats XML documents so that they are prettier -
XML_DTD
allows parsing of DTDs, even with PHP 4 -
XML_Serializer
converts XML files into data structures and vice versa -
XML_Util
contains a wealth of helper functions for working with XML