5.11 Validating Against a Schema

 <  Day Day Up  >  

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 .

Table 5-4. DOM schema 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.

 <  Day Day Up  >  


Upgrading to PHP 5
Upgrading to PHP 5
ISBN: 0596006365
EAN: 2147483647
Year: 2004
Pages: 144

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net