Changes

Jump to navigation Jump to search
1,512 bytes added ,  15:31, 14 February 2019
no edit summary
This [[Module Library|XQuery Module]] contains functions to perform validations against DTDs, XML Schema and (since {{Version|8.3}}) RelaxNG. For The documentation further describes how to use Schematron validation, check out Vincent Lizzi’s [https://github.com/vincentml/schematron-basex Schematron XQuery Module]with BaseX.
=Conventions=
All functions and errors in this module are assigned to the <code><nowiki>http://basex.org/modules/validate</nowiki></code> namespace, which is statically bound to the {{Code|validate}} prefix.<br/>All errors are assigned to the <code><nowiki>http://basex.org/errors</nowiki></code> namespace, which is statically bound to the {{Code|bxerr}} prefix.
=DTD Validation=
Checks whether an XML document validates against a DTD. The input document can be specified as:
* an {{Code|xs:string}}, containing representing a URI (relative URIs will always be resolved against the path to static base URI of the resourcequery),* an {{Code|xs:string}}, containing representing the resource in its string representation, or* a {{Code|node()}}, containing representing the resource itself.
If no DTD is supplied in a function, the XML document is expected to contain an embedded DTD doctype declaration.
|-
| '''Errors'''
|{{Error|BXVA0001error|#Errors}} the validation fails.<br/>{{Error|BXVA0002init|#Errors}} the validation process cannot be started.<br/>{{Error|BXVA0003not-found|#Errors}} no DTD validator is available.
|-
| '''Examples'''
let $schema := '<!ELEMENT root (#PCDATA)>'
return validate:dtd($doc, $schema)
} catch bxerrvalidate:BXVA0001 error {
'DTD Validation failed.'
}
|-
| 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*}}
|-
| '''Summary'''
|-
| '''Errors'''
|{{Error|BXVA0002init|#Errors}} the validation process cannot be started.<br/>{{Error|BXVA0003not-found|#Errors}} no DTD validator is available.
|-
| '''Examples'''
==validate:dtd-report==
 
{{Mark|Introduced with Version 8.3}}:
{| width='100%'
| width='100%'
|-
| 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)}}
|-
| '''Summary'''
|-
| '''Errors'''
|{{Error|BXVA0002init|#Errors}} the validation process cannot be started.<br/>{{Error|BXVA0003not-found|#Errors}} no DTD validator is available.
|-
| '''Examples'''
=XML Schema Validation=
{{Mark|Updated with Version 89.32:}}:Version argument was dropped (the latest version will always be used).
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 {{Code|xsi:(noNamespace)schemaLocation}} attribute, as defined in [http://www.w3.org/TR/xmlschema-1/#xsi_schemaLocation W3C XML Schema].
Different XML Schema implementations can be applied for validation: * Java includes a default implementation of XML Schema (which is an older version of Apache Xerces)* If [https://xerces.apache.org/xerces2-j Xerces2] exists in the classpath, it will be used instead. If you want to manually add Xerces2, you should download the [http://xerces.apache.org/mirrors.cgi#binary Xerces2 Java ..... (XML Schema 1.1) (Beta)] archive and copy at least four libraries ({{Code|cupv10k-runtime.jar}}, {{Code|org.eclipse.wst.xml.xpath2.processor_1.1.0.jar}}, {{Code|xercesImpl.jar}}, {{Code|xml-apis.jar}}) to the {{Code|lib}} directory of the full distribution of BaseX.* The [http://www.saxonica.com/ Saxon] Enterprise Edition (saxon9ee.jar) is detected as well. With {{Version|8.3}}, the XML Schema version can be specified as wellprocessors 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 must of '''Xerces2''' provides implementations of XML Schema 1.0 and 1.1. The processor will be applied if you download one of the [http://xerces.apache.org/mirrors.cgi#binary binary distributions] and copy the following libraries to the {{Code|lib/custom}} directory of the full distribution of BaseX:** {{Code|1org.eclipse.wst.xml.xpath2.processor_1.2.0.jar}} or ** {{Code|1cupv10k-runtime.1jar}}** {{Code|xercesImpl.jar}}* Version 1* {{Code|xml-apis.1 is only available jar}}* '''Saxon Enterprise Edition''' will be applied if Saxon EE or Xerces2 (beta version with XML Schema 1you download the [https://www.saxonica.com/download/java.1 support) is availablexml ZIP release] and if you copy {{Code|saxon9ee.* If Xerces2 is manually added jar}} and a valid license key to the classpath, .
==validate:xsd==
|-
| 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()?, $version features as xs:stringmap(*)|empty-sequence()}}
|-
| '''Summary'''
|Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the processor-specific {{Code|$features}}.
|-
| '''Errors'''
|{{Error|BXVA0001error|#Errors}} the validation fails.<br/>{{Error|BXVA0002init|#Errors}} the validation process cannot be started.<br/>{{Error|BXVA0003not-found|#Errors}} no XML Schema validator is available.
|-
| '''Examples'''
|
* {{Code|validate:xsd('doc.xml', 'doc.xsd')}} validates the Pass on document {{Code|doc.xml}} against the specified and schema {{Code|doc.xsd}}.* The following example demonstrates how a document can be validated against a schema without resorting to local or remote URIsas nodes:
<pre class="brush:xquery">
let $doc := <simple:root xmlns:simple='http://basex.org/simple'/>
</xs:schema>
return validate:xsd($doc, $schema)
</pre>
* Validate all documents of a database against the specified schema, using the supplied feature:
<pre class="brush:xquery">
for $city in db:open('cities')
return validate:xsd($city, 'city.xsd',
map { 'http://javax.xml.XMLConstants/feature/secure-processing': true() }
)
</pre>
|}
|-
| 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*}}
|-
| '''Summary'''
|Validates the XML {{Code|$input}} document against a document {{Code|$schema}}, using the processor-specific {{Code|$features}}, and returns warnings, errors and fatal errors in a string sequence. See [[#validate:xsd|validate:xsd]] for more details on the function arguments.
|-
| '''Errors'''
|{{Error|BXVA0002init|#Errors}} the validation process cannot be started.<br/>{{Error|BXVA0003not-found|#Errors}} no XML Schema validator is available.
|}
==validate:xsd-report==
{| width='100%'|-| 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)}}|-| '''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.|-| '''Errors'''|{{Error|init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no XML Schema validator is available.|} ==validate:xsd-processor== {{Mark|Introduced with Version 89.32:}}:
{| width='100%'
|-
| width='120' | '''Signatures'''
|{{Func|validate:xsd-reportprocessor|$input as item()|element(report)}}<br />{{Func|validate:xsd-report|$input as item(), $schema as xs:string|element(report)}}
|-
| '''Summary'''
|Validates a document and returns warnings, errors and fatal errors as XMLReturns the name of the applied XSD processor. See [[#|} ==validate:xsd-version== {{Mark|Introduced with Version 9.2:}} {| width='100%'|-| width='120' | '''Signatures'''|{{Func|validate:xsd]] for more details on the function arguments.-version||xs:string}}
|-
| '''ErrorsSummary'''|{{Error|BXVA0002|#Errors}} Returns the validation process cannot be started.<br/>{{Error|BXVA0003|#Errors}} no XML supported version of XSD Schema validator is available.
|}
=RelaxNGValidation=
Checks whether an XML document validates against a RelaxNG schema. The input document and the schema an can be specified as:
* {{Code|xs:string}}, containing the path to the resource,
* {{Code|node()}}, containing the resource itself.
RelaxNG validation will be available if [http://www.thaiopensource.com/relaxng/jing.html Jing] exists in the classpath. The latest version, {{Code|jing-20091111.jar}}, is included in the full distributions of BaseX. As Jing additionally supports [http://www.nvdl.org/ NVDL] validation, you can also use the functions to validate the input against NVDL schemas.
==validate:rng==
 
{{Mark|Introduced with Version 8.3}}:
{| width='100%'
|-
| '''Errors'''
|{{Error|BXVA0001error|#Errors}} the validation fails.<br/>{{Error|BXVA0002init|#Errors}} the validation process cannot be started.<br/>{{Error|BXVA0003not-found|#Errors}} the RelaxNG validator is not available.<br/>{{Error|BXVA0004|#Errors}} no validator is found for the specified version.
|-
| '''Examples'''
==validate:rng-info==
 
{{Mark|Introduced with Version 8.3}}:
{| width='100%'
|-
| '''Errors'''
|{{Error|BXVA0002init|#Errors}} the validation process cannot be started.<br/>{{Error|BXVA0003not-found|#Errors}} the RelaxNG validator is not available.<br/>{{Error|BXVA0004|#Errors}} no validator is found for the specified version.
|}
==validate:rng-report==
 
{{Mark|Introduced with Version 8.3}}:
{| width='100%'
|-
| '''Errors'''
|{{Error|BXVA0002init|#Errors}} the validation process cannot be started.<br/>{{Error|BXVA0003not-found|#Errors}} The RelaxNG validator is not available.<br/>{{Error|BXVA0004|#Errors}} no validator is found for the specified version.
|}
 
=Schematron Validation=
 
If you want to use Schematron for validating documents, simply install Vincent Lizzi’s excellent [https://github.com/Schematron/schematron-basex Schematron XQuery Module for BaseX]:
 
<pre class="brush:xquery">
repo:install('https://github.com/Schematron/schematron-basex/raw/master/dist/schematron-basex-1.2.xar')
</pre>
 
The following query illustrates how documents are validated. It is directly taken from the GitHub project:
 
<pre class="brush: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))
)
</pre>
=Errors=
|Description
|-
|{{Code|BXVA0001error}}|The document cannot be validated against the specified DTD or XML Schemaschema.
|-
|{{Code|BXVA0002init}}
|The validation cannot be started.
|-
|{{Code|BXVA0003not-found}}
|No validator is available.
|-
|{{Code|BXVA0004}}
|No validator is found for the specified version.
|}
=Changelog=
 
;Version 9.2
 
* Added: [[#validate:xsd-processor|validate:xsd-processor]], [[#validate:xsd-version|validate:xsd-version]]
* Updated: [[#validate:xsd|validate:xsd]], [[#validate:xsd-info|validate:xsd-info]], [[#validate:xsd-report|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]], [[#validate:rng-info|validate:rng-info]]
* Added: [[#validate:dtd-report|dtd-report]], [[#validate:xsd-report|xsd-report]], [[#validate:rng-report|validate:rng-report]]
;Version 7.6
 
* Added: [[#validate:xsd-info|validate:xsd-info]], [[#validate:dtd-info|validate:dtd-info]]
The module was introduced with Version 7.3.
 
[[Category:XQuery]]
Bureaucrats, editor, reviewer, Administrators
13,550

edits

Navigation menu