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.
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.
Table 5-4. DOM schema validation methods
|
Method name |
Schema type |
Data location |
|---|---|---|
|
|
XML Schema |
File |
|
|
XML Schema |
String |
|
|
RelaxNG |
File |
|
|