Validation Module

From BaseX Documentation

Revision as of 04:52, 29 November 2019 by CG (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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.

Contents

[edit] Conventions

All functions and errors in this module are assigned to the http://basex.org/modules/validate namespace, which is statically bound to the validate prefix.

[edit] DTD Validation

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

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

[edit] validate:dtd

Signatures validate:dtd($input as item()) as empty-sequence()
validate:dtd($input as item(), $schema as xs:string?) as empty-sequence()
Summary Validates the XML $input document against a $schema and returns an empty sequence or an error.
Errors error: the validation fails.
init: the validation process cannot be started.
not-found: no DTD validator is available.
Examples
  • validate:dtd('doc.xml', 'doc.dtd') validates the document doc.xml against the specified DTD file doc.dtd.
  • The following example validates an invalid document against a DTD, which is specified as string:
try {
  let $doc := <invalid/>
  let $schema := '<!ELEMENT root (#PCDATA)>'
  return validate:dtd($doc, $schema)
} catch validate:error {
  'DTD Validation failed.'
}

[edit] validate:dtd-info

Signatures validate:dtd-info($input as item()) as xs:string*
validate:dtd-info($input as item(), $schema as xs:string?) as xs:string*
Summary Validates the XML $input document against a $schema and returns warnings, errors and fatal errors in a string sequence.
Errors init: the validation process cannot be started.
not-found: no DTD validator is available.
Examples
  • validate:dtd-info(<invalid/>, '<!ELEMENT root (#PCDATA)>') returns:
    2:11: Element type "invalid" must be declared..

[edit] validate:dtd-report

width='100%'
Signatures validate:dtd-report($input as item()) as element(report)
validate:dtd-report($input as item(), $schema as xs:string?) as element(report)
Summary Validates the XML $input document against a $schema and returns warnings, errors and fatal errors as XML.
Errors init: the validation process cannot be started.
not-found: no DTD validator is available.
Examples
  • validate:dtd-report(<invalid/>, '<!ELEMENT root (#PCDATA)>') returns:
<report>
  <status>invalid</status>
  <message level="Error" line="2" column="11">Element type "invalid" must be declared.</message>
</report>

[edit] XML Schema Validation

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

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:

[edit] validate:xsd

Signatures validate:xsd($input as item()) as empty-sequence()
validate:xsd($input as item(), $schema as item()?) as empty-sequence()
validate:xsd($input as item(), $schema as item()?, $features as map(*)) as empty-sequence()
Summary Validates the XML $input document against a $schema, using the processor-specific $features.
Errors error: the validation fails.
init: the validation process cannot be started.
not-found: no XML Schema validator is available.
Examples
  • Pass on document and schema as nodes:
let $doc := <simple:root xmlns:simple='http://basex.org/simple'/>
let $schema :=
  <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' targetNamespace='http://basex.org/simple'>
    <xs:element name='root'/>
  </xs:schema>
return validate:xsd($doc, $schema)
  • Validate all documents of a database against the specified schema, using the supplied feature:
for $city in db:open('cities')
return validate:xsd($city, 'city.xsd',
  map { 'http://javax.xml.XMLConstants/feature/secure-processing': true() }
)

[edit] validate:xsd-info

Signatures validate:xsd-info($input as item()) as xs:string*
validate:xsd-info($input as item(), $schema as item()?) as xs:string*
validate:xsd-info($input as item(), $schema as item()?, $features as map(*)) as xs:string*
Summary Validates the XML $input document against a $schema, using the processor-specific $features, and returns warnings, errors and fatal errors in a string sequence.
Errors init: the validation process cannot be started.
not-found: no XML Schema validator is available.

[edit] validate:xsd-report

Signatures validate:xsd-report($input as item()) as element(report)
validate:xsd-report($input as item(), $schema as xs:string?) as element(report)
validate:xsd-report($input as item(), $schema as xs:string?, $features as map(*)) as element(report)
Summary Validates the XML $input document against a $schema, using the processor-specific $features, and returns warnings, errors and fatal errors as XML.
Errors init: the validation process cannot be started.
not-found: no XML Schema validator is available.

[edit] validate:xsd-processor

Signatures validate:xsd-processor() as xs:string
Summary Returns the name of the applied XSD processor.

[edit] validate:xsd-version

Signatures validate:xsd-version() as xs:string
Summary Returns the supported version of XSD Schema.

[edit] RelaxNG Validation

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

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.

[edit] validate:rng

Signatures validate:rng($input as item(), $schema as item()) as empty-sequence()
validate:rng($input as item(), $schema as item(), $compact as xs:boolean) as empty-sequence()
Summary Validates the XML $input document against a $schema, using the XML or $compact notation.
Errors error: the validation fails.
init: the validation process cannot be started.
not-found: the RelaxNG validator is not available.
Examples
  • validate:rng('doc.xml', 'doc.rng') validates the document doc.xml against the specified schema doc.rng.

[edit] validate:rng-info

Signatures validate:rng-info($input as item(), $schema as item()) as xs:string*
validate:rng-info($input as item(), $schema as item(), $compact as xs:boolean) as xs:string*
Summary Validates the XML $input document against a $schema, using the XML or $compact notation, and returns warnings, errors and fatal errors in a string sequence.
Errors init: the validation process cannot be started.
not-found: the RelaxNG validator is not available.

[edit] validate:rng-report

Signatures validate:rng-report($input as item(), $schema as xs:string) as element(report)
validate:rng-report($input as item(), $schema as xs:string, $compact as xs:boolean) as element(report)
Summary Validates the XML $input document against a $schema, using the XML or $compact notation, and returns warnings, errors and fatal errors as XML.
Errors init: the validation process cannot be started.
not-found: The RelaxNG validator is not available.

[edit] 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))
)

[edit] Errors

Code Description
error The document cannot be validated against the specified schema.
init The validation cannot be started.
not-found No validator is available.

[edit] Changelog

Version 9.2
Version 9.0
Version 8.5
Version 8.3
Version 7.6

The module was introduced with Version 7.3.

Personal tools
Namespaces
Variants
Actions
Navigation
Print/export