Difference between revisions of "Validation Module"
m (Text replacement - "db:pre(" to "db:get(") |
|||
Line 18: | Line 18: | ||
{| width='100%' | {| width='100%' | ||
− | |- | + | |- valign="top" |
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
|{{Func|validate:dtd|$input as item()|empty-sequence()}}<br />{{Func|validate:dtd|$input as item(), $schema as xs:string?|empty-sequence()}} | |{{Func|validate:dtd|$input as item()|empty-sequence()}}<br />{{Func|validate:dtd|$input as item(), $schema as xs:string?|empty-sequence()}} | ||
− | |- | + | |- valign="top" |
| '''Summary''' | | '''Summary''' | ||
|Validates the XML {{Code|$input}} document against a {{Code|$schema}} and returns an empty sequence or an error. | |Validates the XML {{Code|$input}} document against a {{Code|$schema}} and returns an empty sequence or an error. | ||
− | |- | + | |- valign="top" |
| '''Errors''' | | '''Errors''' | ||
|{{Error|error|#Errors}} the validation fails.<br/>{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no DTD validator is available. | |{{Error|error|#Errors}} the validation fails.<br/>{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no DTD validator is available. | ||
− | |- | + | |- valign="top" |
| '''Examples''' | | '''Examples''' | ||
| | | | ||
Line 46: | Line 46: | ||
{| width='100%' | {| width='100%' | ||
− | |- | + | |- valign="top" |
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
|{{Func|validate:dtd-info|$input as item()|xs:string*}}<br />{{Func|validate:dtd-info|$input as item(), $schema as xs:string?|xs:string*}} | |{{Func|validate:dtd-info|$input as item()|xs:string*}}<br />{{Func|validate:dtd-info|$input as item(), $schema as xs:string?|xs:string*}} | ||
− | |- | + | |- valign="top" |
| '''Summary''' | | '''Summary''' | ||
|Validates the XML {{Code|$input}} document against a {{Code|$schema}} and returns warnings, errors and fatal errors in a string sequence. | |Validates the XML {{Code|$input}} document against a {{Code|$schema}} and returns warnings, errors and fatal errors in a string sequence. | ||
− | |- | + | |- valign="top" |
| '''Errors''' | | '''Errors''' | ||
|{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no DTD validator is available. | |{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no DTD validator is available. | ||
− | |- | + | |- valign="top" |
| '''Examples''' | | '''Examples''' | ||
| | | | ||
Line 64: | Line 64: | ||
{| width='100%' | {| width='100%' | ||
− | |- | + | |- valign="top" |
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
|{{Func|validate:dtd-report|$input as item()|element(report)}}<br />{{Func|validate:dtd-report|$input as item(), $schema as xs:string?|element(report)}} | |{{Func|validate:dtd-report|$input as item()|element(report)}}<br />{{Func|validate:dtd-report|$input as item(), $schema as xs:string?|element(report)}} | ||
− | |- | + | |- valign="top" |
| '''Summary''' | | '''Summary''' | ||
|Validates the XML {{Code|$input}} document against a {{Code|$schema}} and returns warnings, errors and fatal errors as XML. | |Validates the XML {{Code|$input}} document against a {{Code|$schema}} and returns warnings, errors and fatal errors as XML. | ||
− | |- | + | |- valign="top" |
| '''Errors''' | | '''Errors''' | ||
|{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no DTD validator is available. | |{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no DTD validator is available. | ||
− | |- | + | |- valign="top" |
| '''Examples''' | | '''Examples''' | ||
| | | | ||
Line 108: | Line 108: | ||
{| width='100%' | {| width='100%' | ||
− | |- | + | |- valign="top" |
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
|{{Func|validate:xsd|$input as item()|empty-sequence()}}<br />{{Func|validate:xsd|$input as item(), $schema as item()?|empty-sequence()}}<br />{{Func|validate:xsd|$input as item(), $schema as item()?, $features as map(*)|empty-sequence()}} | |{{Func|validate:xsd|$input as item()|empty-sequence()}}<br />{{Func|validate:xsd|$input as item(), $schema as item()?|empty-sequence()}}<br />{{Func|validate:xsd|$input as item(), $schema as item()?, $features as map(*)|empty-sequence()}} | ||
− | |- | + | |- valign="top" |
| '''Summary''' | | '''Summary''' | ||
|Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the processor-specific {{Code|$features}}. | |Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the processor-specific {{Code|$features}}. | ||
− | |- | + | |- valign="top" |
| '''Errors''' | | '''Errors''' | ||
|{{Error|error|#Errors}} the validation fails.<br/>{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no XML Schema validator is available. | |{{Error|error|#Errors}} the validation fails.<br/>{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no XML Schema validator is available. | ||
− | |- | + | |- valign="top" |
| '''Examples''' | | '''Examples''' | ||
| | | | ||
Line 141: | Line 141: | ||
{| width='100%' | {| width='100%' | ||
− | |- | + | |- valign="top" |
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
|{{Func|validate:xsd-info|$input as item()|xs:string*}}<br />{{Func|validate:xsd-info|$input as item(), $schema as item()?|xs:string*}}<br />{{Func|validate:xsd-info|$input as item(), $schema as item()?, $features as map(*)|xs:string*}} | |{{Func|validate:xsd-info|$input as item()|xs:string*}}<br />{{Func|validate:xsd-info|$input as item(), $schema as item()?|xs:string*}}<br />{{Func|validate:xsd-info|$input as item(), $schema as item()?, $features as map(*)|xs:string*}} | ||
− | |- | + | |- valign="top" |
| '''Summary''' | | '''Summary''' | ||
|Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the processor-specific {{Code|$features}}, and returns warnings, errors and fatal errors in a string sequence. | |Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the processor-specific {{Code|$features}}, and returns warnings, errors and fatal errors in a string sequence. | ||
− | |- | + | |- valign="top" |
| '''Errors''' | | '''Errors''' | ||
|{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no XML Schema validator is available. | |{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no XML Schema validator is available. | ||
Line 155: | Line 155: | ||
{| width='100%' | {| width='100%' | ||
− | |- | + | |- valign="top" |
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
|{{Func|validate:xsd-report|$input as item()|element(report)}}<br />{{Func|validate:xsd-report|$input as item(), $schema as xs:string?|element(report)}}<br />{{Func|validate:xsd-report|$input as item(), $schema as xs:string?, $features as map(*)|element(report)}} | |{{Func|validate:xsd-report|$input as item()|element(report)}}<br />{{Func|validate:xsd-report|$input as item(), $schema as xs:string?|element(report)}}<br />{{Func|validate:xsd-report|$input as item(), $schema as xs:string?, $features as map(*)|element(report)}} | ||
− | |- | + | |- valign="top" |
| '''Summary''' | | '''Summary''' | ||
|Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the processor-specific {{Code|$features}}, and returns warnings, errors and fatal errors as XML. | |Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the processor-specific {{Code|$features}}, and returns warnings, errors and fatal errors as XML. | ||
− | |- | + | |- valign="top" |
| '''Errors''' | | '''Errors''' | ||
|{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no XML Schema validator is available. | |{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no XML Schema validator is available. | ||
Line 169: | Line 169: | ||
{| width='100%' | {| width='100%' | ||
− | |- | + | |- valign="top" |
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
|{{Func|validate:xsd-processor||xs:string}} | |{{Func|validate:xsd-processor||xs:string}} | ||
− | |- | + | |- valign="top" |
| '''Summary''' | | '''Summary''' | ||
|Returns the name of the applied XSD processor. | |Returns the name of the applied XSD processor. | ||
Line 180: | Line 180: | ||
{| width='100%' | {| width='100%' | ||
− | |- | + | |- valign="top" |
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
|{{Func|validate:xsd-version||xs:string}} | |{{Func|validate:xsd-version||xs:string}} | ||
− | |- | + | |- valign="top" |
| '''Summary''' | | '''Summary''' | ||
|Returns the supported version of XSD Schema. | |Returns the supported version of XSD Schema. | ||
Line 201: | Line 201: | ||
{| width='100%' | {| width='100%' | ||
− | |- | + | |- valign="top" |
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
|{{Func|validate:rng|$input as item(), $schema as item()|empty-sequence()}}<br/>{{Func|validate:rng|$input as item(), $schema as item(), $compact as xs:boolean|empty-sequence()}} | |{{Func|validate:rng|$input as item(), $schema as item()|empty-sequence()}}<br/>{{Func|validate:rng|$input as item(), $schema as item(), $compact as xs:boolean|empty-sequence()}} | ||
− | |- | + | |- valign="top" |
| '''Summary''' | | '''Summary''' | ||
|Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the XML or {{Code|$compact}} notation. | |Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the XML or {{Code|$compact}} notation. | ||
− | |- | + | |- valign="top" |
| '''Errors''' | | '''Errors''' | ||
|{{Error|error|#Errors}} the validation fails.<br/>{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} the RelaxNG validator is not available. | |{{Error|error|#Errors}} the validation fails.<br/>{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} the RelaxNG validator is not available. | ||
− | |- | + | |- valign="top" |
| '''Examples''' | | '''Examples''' | ||
| | | | ||
Line 219: | Line 219: | ||
{| width='100%' | {| width='100%' | ||
− | |- | + | |- valign="top" |
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
|{{Func|validate:rng-info|$input as item(), $schema as item()|xs:string*}}<br/>{{Func|validate:rng-info|$input as item(), $schema as item(), $compact as xs:boolean|xs:string*}} | |{{Func|validate:rng-info|$input as item(), $schema as item()|xs:string*}}<br/>{{Func|validate:rng-info|$input as item(), $schema as item(), $compact as xs:boolean|xs:string*}} | ||
− | |- | + | |- valign="top" |
| '''Summary''' | | '''Summary''' | ||
|Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the XML or {{Code|$compact}} notation, and returns warnings, errors and fatal errors in a string sequence. | |Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the XML or {{Code|$compact}} notation, and returns warnings, errors and fatal errors in a string sequence. | ||
− | |- | + | |- valign="top" |
| '''Errors''' | | '''Errors''' | ||
|{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} the RelaxNG validator is not available. | |{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} the RelaxNG validator is not available. | ||
Line 233: | Line 233: | ||
{| width='100%' | {| width='100%' | ||
− | |- | + | |- valign="top" |
| width='120' | '''Signatures''' | | width='120' | '''Signatures''' | ||
|{{Func|validate:rng-report|$input as item(), $schema as xs:string|element(report)}}<br />{{Func|validate:rng-report|$input as item(), $schema as xs:string, $compact as xs:boolean|element(report)}} | |{{Func|validate:rng-report|$input as item(), $schema as xs:string|element(report)}}<br />{{Func|validate:rng-report|$input as item(), $schema as xs:string, $compact as xs:boolean|element(report)}} | ||
− | |- | + | |- valign="top" |
| '''Summary''' | | '''Summary''' | ||
|Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the XML or {{Code|$compact}} notation, and returns warnings, errors and fatal errors as XML. | |Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the XML or {{Code|$compact}} notation, and returns warnings, errors and fatal errors as XML. | ||
− | |- | + | |- valign="top" |
| '''Errors''' | | '''Errors''' | ||
|{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} The RelaxNG validator is not available. | |{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} The RelaxNG validator is not available. | ||
Line 271: | Line 271: | ||
! width="110"|Code | ! width="110"|Code | ||
|Description | |Description | ||
− | |- | + | |- valign="top" |
|{{Code|error}} | |{{Code|error}} | ||
|The document cannot be validated against the specified schema. | |The document cannot be validated against the specified schema. | ||
− | |- | + | |- valign="top" |
|{{Code|init}} | |{{Code|init}} | ||
|The validation cannot be started. | |The validation cannot be started. | ||
− | |- | + | |- valign="top" |
|{{Code|not-found}} | |{{Code|not-found}} | ||
|No validator is available. | |No validator is available. |
Revision as of 14:20, 20 July 2022
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
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.
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, ornode()
, 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
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 |
<syntaxhighlight lang="xquery"> try { let $doc := <invalid/> let $schema := '<!ELEMENT root (#PCDATA)>' return validate:dtd($doc, $schema) } catch validate:error { 'DTD Validation failed.' } </syntaxhighlight> |
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-report
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 |
<syntaxhighlight lang="xml"> <report> <status>invalid</status> <message level="Error" line="2" column="11">Element type "invalid" must be declared.</message> </report> </syntaxhighlight> |
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, ornode()
, 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 used if you download the ZIP release and if you copy
saxon9ee.jar
and a valid license key to the classpath.
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 |
<syntaxhighlight lang="xquery"> 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) </syntaxhighlight>
<syntaxhighlight lang="xquery"> for $city in db:get('cities') return validate:xsd($city, 'city.xsd', map { 'http://javax.xml.XMLConstants/feature/secure-processing': true() } ) </syntaxhighlight> |
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.
|
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.
|
validate:xsd-processor
Signatures | validate:xsd-processor() as xs:string
|
Summary | Returns the name of the applied XSD processor. |
validate:xsd-version
Signatures | validate:xsd-version() as xs:string
|
Summary | Returns the supported version of XSD Schema. |
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, ornode()
, 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
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-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.
|
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.
|
Schematron Validation
If you want to use Schematron for validating documents, install Vincent Lizzi’s excellent Schematron XQuery Module for BaseX:
<syntaxhighlight lang="xquery"> repo:install('https://github.com/Schematron/schematron-basex/raw/master/dist/schematron-basex-1.2.xar') </syntaxhighlight>
The following query illustrates how documents are validated. It is directly taken from the GitHub project:
<syntaxhighlight lang="xquery"> 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))
) </syntaxhighlight>
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. |
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:
validate:dtd-report
,validate:xsd-report
,validate:rng-report
- Version 7.6
- Added:
validate:xsd-info
,validate:dtd-info
The module was introduced with Version 7.3.