Validation Module

This XQuery Module contains functions to perform validations against DTDs, XML Schema and RelaxNG. The documentation further describes how to use Schematron validation with BaseX.

=Conventions=

All functions and errors in this module are assigned to the  namespace, which is statically bound to the validate prefix.

=DTD Validation=

Checks whether an XML document validates against a DTD. The input document can be specified as:


 * xs:string, representing a URI (relative URIs will always be resolved against the static base URI of the query),
 * xs:string, representing the resource in its string representation, or
 * node, representing the resource itself.

If no DTD is supplied in a function, the XML document is expected to contain an embedded DTD doctype declaration.

validate:dtd-report
=XML Schema Validation=

Checks whether an XML document validates against an XML Schema. The input document and the schema can be specified as:


 * xs:string, containing the path to the resource,
 * xs:string, containing the resource in its string representation, or
 * node, containing the resource itself.

If no schema is given, the input is expected to contain an xsi:(noNamespace)schemaLocation attribute, as defined in W3C XML Schema.

Different XML Schema processors are supported:


 * By default, the Java implementation of XML Schema 1.0 is used (it is based on an old version of Apache Xerces).
 * The latest version of Xerces2 provides implementations of XML Schema 1.0 and 1.1. The processor will be applied if you download one of the binary distributions and copy the following libraries to the lib/custom directory of the full distribution of BaseX:
 * org.eclipse.wst.xml.xpath2.processor_1.2.0.jar
 * cupv10k-runtime.jar
 * xercesImpl.jar
 * xml-apis.jar
 * Saxon Enterprise Edition will be applied if you download the ZIP release and if you copy saxon9ee.jar and a valid license key to the classpath.

validate:xsd-version
=RelaxNG Validation=

Checks whether an XML document validates against a RelaxNG schema. The input document and the schema can be specified as:


 * xs:string, containing the path to the resource,
 * xs:string, containing the resource in its string representation, or
 * node, containing the resource itself.

RelaxNG validation will be available if Jing exists in the classpath. The latest version, jing-20091111.jar, is included in the full distributions of BaseX. As Jing additionally supports NVDL validation, you can also use the functions to validate the input against NVDL schemas.

validate:rng-report
=Schematron Validation=

If you want to use Schematron for validating documents, simply install Vincent Lizzi’s excellent Schematron XQuery Module for BaseX:

 repo:install('https://github.com/Schematron/schematron-basex/raw/master/dist/schematron-basex-1.2.xar')

The following query illustrates how documents are validated. It is directly taken from the GitHub project:

 import module namespace schematron = "http://github.com/Schematron/schematron-basex";

let $sch := schematron:compile(doc('rules.sch')) let $svrl := schematron:validate(doc('document.xml'), $sch) return ( schematron:is-valid($svrl),  for $message in schematron:messages($svrl)  return concat(schematron:message-level($message), ': ', schematron:message-description($message)) )

=Errors=

=Changelog=


 * Version 9.2


 * Added: validate:xsd-processor, validate:xsd-version
 * Updated: validate:xsd, validate:xsd-info, validate:xsd-report: version argument was dropped (the latest version will always be used)


 * Version 9.0


 * Updated: error codes updated; errors now use the module namespace


 * Version 8.5


 * Updated: Relative URIs will always be resolved against the static base URI of the query


 * Version 8.3


 * Added: validate:rng, validate:rng-info
 * Added: dtd-report, xsd-report, validate:rng-report


 * Version 7.6


 * Added: validate:xsd-info, validate:dtd-info

The module was introduced with Version 7.3.