XML::Schematron::XPath - Perl extension for validating XML with XPath expressions.


NAME

XML::Schematron::XPath - Perl extension for validating XML with XPath expressions.


SYNOPSIS

  use XML::Schematron::XPath;
  my $pseudotron = XML::Schematron::XPath->new(schema => 'my_schema.xml');
  my $messages = $pseudotron->verify('my_file.xml');
  if ($messages) {
      # we got warnings or errors during validation...
      ...
  }

  OR, in an array context
  my @messages = $pseudotron->verify('my_file.xml');


DESCRIPTION

XML::Schematron::XPath serves as a simple validator for XML based on Rick JELLIFFE's Schematron XSLT script. A Schematron schema defines a set of rules in the XPath language that are used to examine the contents of an XML document tree.

A simplified example:

 <schema>
  <pattern>
   <rule context="page">
    <assert test="count(*)=count(title|body)">The page element may only contain title or body elements.</assert> 
    <assert test="@name">A page element must contain a name attribute.</assert> 
    <report test="string-length(@name) &lt; 5">A page element name attribute must be at least 5 characters long.</report> 
   </rule>
  </pattern>
 </schema>

Note that an 'assert' rule will return if the result of the test expression is not true, while a 'report' rule will return only if the test expression evalutes to true.


METHODS

new()
The 'new' constructor accepts the following ``named'' arguments:
schema()
When called with a single scalar as its argument, this method sets/updates the schema file to be used for generatng tests. Otherwise, it simply returns the name of the schema file (if any).

tests()
When called with a reference to a list of lists as its argument (see the format in the description of the 'tests' argument to the new() method for details), this method sets the current test stack. Otherwise, it returns an arrayref to the current test stack (if any).

add_test(%args);
The add_test() method allows you push additional tests on to the stack before validation using the typical ``hash of named parameters'' style.

Arguments for this method:

verify('my_xml_file.xml' or $some_xml_string)
The verify() method takes the path to the XML document that you wish to validate, or a scalar containing the entire document as a string, as its sole argument. It returns the messages that are returned during validation. When called in an array context, this method returns an array of the messages generated during validation. When called in a scalar context, this method returns a concatenated string of all output.


CONFORMANCE

XML::Schematron::XPath does not conform to the current Schematron specification since more modern versions allow XSLT-specific expressions to be used as tests. Please note, however, that robust validation is still quite possible using just the XPath language.


AUTHOR

Kip Hampton, khampton@totalcinema.com


COPYRIGHT

Copyright (c) 2000 Kip Hampton. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


SEE ALSO

For information about Schematron, sample schemas, and tutorials to help you write your own schmemas, please visit the Schematron homepage at: http://www.ascc.net/xml/resource/schematron/

For detailed information about the XPath syntax, please see the W3C XPath Specification at: http://www.w3.org/TR/xpath.html

 XML::Schematron::XPath - Perl extension for validating XML with XPath expressions.