Chapter: 5.11 Validating Against a Schema

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.
5.11.1 PHP 5 and DOM
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.
![]() | Upgrading to php 5 |






