Schemas are a way to define a specification for your XML documents. In PHP 4, there is no built-in way to validate an XML document against any type of schema. The PEAR XML_DTD package (available at http://pear.php.net/package/XML_DTD) provides a way to validate XML files against a Document Type Definition (DTD). However, because it uses SAX, it is not easy to combine DTD validation with DOM.
PHP 5 allows you to validate files against DTDs, XML Schema, and RelaxNG schema. The DOM extension supports all three types, while SimpleXML provides only an XML Schema validator.
Validating any file using DOM is a similar process, regardless of the underlying schema format. To validate, call a validation method on a DOM object. It returns true if the file passes. If there's an error, it returns false and prints a message to the error log. There is no method for "capturing" the error message.
$file = 'address-book.xml'; $schema = 'address-book.xsd'; $ab = new DOMDocument $ab->load($file); if ($ab->schemaValidate($schema)) { print "$file is valid.\n"; } else { print "$file is invalid.\n"; }
If the schema is stored in a string, use DOMDocument::schemaValidateSource( ) instead of schemaValidate( ).
Table 5-4 lists all the validation methods.
Method name |
Schema type |
Data location |
---|---|---|
schemaValidate |
XML Schema |
File |
schemaValidateSource |
XML Schema |
String |
relaxNGValidate |
RelaxNG |
File |
relaxNGValidateSource |
RelaxNG |
String |
validate |
DTD |
N/A |
All of the validation methods behave in a similar manner, so you only need to switch the method name in the previous example to switch to a different validation scheme.
Both XML Schema and RelaxNG support validation against files and strings. You can validate a DOM object only against the DTD defined at the top of the XML document.