Changes

Jump to navigation Jump to search
4,425 bytes added ,  15:31, 14 February 2019
no edit summary
This [[Module Library|XQuery Module]] contains functions to perform validations against [http://en.wikipedia.org/wiki/Document_Type_Declaration DTDs], [http://www.w3.org/XML/Schema XML Schema] and (since {{Version|8RelaxNG.3}}) [http://relaxngThe documentation further describes how to use Schematron validation with BaseX.org/ RelaxNG]:
* For DTDs =Conventions= All functions and XML Schema, Java’s standard validators is used.* For XML Schema, errors in this module are assigned to the [<code><nowiki>http://www.saxonica.com/ Saxon XSLT Processor] – {{Code|SaxonHE.jar}}, {{Code|SaxonPE.jar}}, or {{Code|SaxonEEbasex.jar}} – is used if it is added to the classpath.* For RelaxNG, [http:org/modules/www.thaiopensource.comvalidate</relaxngnowiki></jing.html Jing] must be added code> namespace, which is statically bound to the classpath. The latest version, {{Code|jing-20091111.jarvalidate}}, is included in the full distributions of BaseXprefix.<br/> =DTD Validation=
=Conventions=Checks whether an XML document validates against a DTD. The input document can be specified as:
All functions in this module are assigned to the <code><nowiki>http* {{Code|xs://basex.org/modules/validate</nowiki></code> namespacestring}}, which is statically bound to representing a URI (relative URIs will always be resolved against the static base URI of the query),* {{Code|validatexs:string}} prefix.<br/>All errors are assigned to , representing the <code><nowiki>http://basex.org/errors</nowiki></code> namespaceresource in its string representation, which is statically bound to the or* {{Code|bxerrnode()}} prefix, representing the resource itself.
=Functions=If no DTD is supplied in a function, the XML document is expected to contain an embedded DTD doctype declaration.
==validate:dtd==
 
{| width='100%'
|-
| width='120' | '''Signatures'''
|{{Func|validate:dtd|$input as item()|empty-sequence()}}<br />{{Func|validate:dtd|$input as item(), $dtd schema as xs:string?|empty-sequence()}}
|-
| '''Summary'''
|Validates the document specified by XML {{Code|$input}}. document against a {{Code|$inputschema}} can be specified as:* and returns an {{Code|xs:string}}, containing the path to the resource,* empty sequence or an {{Code|xs:string}}, containing the resource in its string representation, or* a {{Code|node()}}, containing the resource itself.{{Code|$schema}} can be used to specify the DTD for validation. If no DTD is given, {{Code|$input}} is required to contain a DTD doctype declarationerror.<br />
|-
| '''Errors'''
|{{Error|BXVA0001error|#Errors}} the validation fails.<br/>{{Error|BXVA0002init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no DTD validator is available.
|-
| '''Examples'''
try {
let $doc := <invalid/>
let $dtd schema := '<!ELEMENT root (#PCDATA)>' return validate:dtd($doc, $dtdschema)} catch bxerrvalidate:BXVA0001 error {
'DTD Validation failed.'
}
</pre>
|-
|}
|-
| width='120' | '''Signatures'''
|{{Func|validate:dtd-info|$input as item()|xs:string*}}<br />{{Func|validate:dtd-info|$input as item(), $dtd schema as xs:string?|xs:string*}}
|-
| '''Summary'''
|Validates the XML {{Code|$input}} document specified by against a {{Code|$inputschema}} and returns warningwarnings, errors and fatal errors in a string sequence. {{Code|$input}} can be specified as:* {{Code|xs:string}}, containing the path to the resource,* {{Code|xs:string}}, containing the resource in its string representation, or* {{Code|node()}}, containing the resource itself.{{Code|$schema}} can be used to specify the DTD for validation. If no DTD is given, {{Code|$input}} is required to contain a DTD doctype declaration.<br />
|-
| '''Errors'''
|{{Error|BXVA0002init|#Errors}} the validation process cannot be started.<br/>{{Error|not-found|#Errors}} no DTD validator is available.|-| '''Examples'''|* <code>validate:dtd-info(<invalid/>, '<!ELEMENT root (#PCDATA)>')</code> returns:<br/><code>2:11: Element type "invalid" must be declared.</code>.
|}
==validate:xsddtd-report==
{| width='100%'
| width='100%'
|-
| width='120' | '''Signatures'''
|{{Func|validate:xsddtd-report|$input as item()|empty-sequenceelement(report)}}<br />{{Func|validate:xsddtd-report|$input as item(), $schema as item()xs:string?|empty-sequenceelement(report)}}
|-
| '''Summary'''
|Validates the document specified by XML {{Code|$input}}. Both document against a {{Code|$inputschema}} 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 DTD validator is available.|-| '''Examples'''|* <code>validate:dtd-report(<invalid/>, '<!ELEMENT root (#PCDATA)>')</code> returns:<pre class="brush:xml"><report> <status>invalid</status> <message level="Error" line="2" column="11">Element type "invalid" must be declared.</message></report></pre>|} =XML Schema Validation= {{CodeMark|$schemaUpdated with Version 9.2:}} 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: 
* {{Code|xs:string}}, containing the path to the resource,
* {{Code|xs:string}}, containing the resource in its string representation, or
* {{Code|node()}}, containing the resource itself.
{{Code|$schema}} can be used to specify the schema for validation. If no schema is given, {{Code|$the input}} is required 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 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 [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|org.eclipse.wst.xml.xpath2.processor_1.2.0.jar}}** {{Code|cupv10k-runtime.jar}}** {{Code|xercesImpl.jar}}** {{Code|xml-apis.jar}}* '''Saxon Enterprise Edition''' will be applied if you download the [https://www.saxonica.com/download/java.xml ZIP release] and if you copy {{Code|saxon9ee.jar}} and a valid license key to the classpath. ==validate:xsd== {| width='100%'|-| 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()}}|-| '''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|not-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 specified by against a {{Code|$schema}}, using the processor-specific {{Code|$inputfeatures}} , and returns warningwarnings, errors and fatal errors in a string sequence. |-| '''Errors'''|{{CodeError|init|$input#Errors}} and the validation process cannot be started.<br/>{{CodeError|not-found|$schema#Errors}} can be specified asno XML Schema validator is available.|} ==validate:xsd-report==* {| width='100%'|-| width='120' | '''Signatures'''|{{CodeFunc|xsvalidate:stringxsd-report|$input as item()|element(report)}}, containing the path to the resource,* <br />{{CodeFunc|validate:xsd-report|$input as item(), $schema as xs:string?|element(report)}}<br />{{Func|validate:xsd-report|$input as item(), containing the resource in its $schema as xs:string representation?, or$features as map(* {{Code)|nodeelement(report)}}, containing |-| '''Summary'''|Validates the resource itself.XML {{Code|$schemainput}} can be used to specify the schema for validation. If no schema is given, document against a {{Code|$inputschema}} is required to contain an , using the processor-specific {{Code|xsi:(noNamespace)schemaLocation$features}} attribute , and returns warnings, errors and fatal errors as defined in [http://www.w3.org/TR/xmlschema-1/#xsi_schemaLocation W3C XML Schema].<br />
|-
| '''Errors'''
|{{Error|BXVA0002init|#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 9.2:}} {| width='100%'|-| width='120' | '''Signatures'''|{{Func|validate:xsd-processor||xs:string}}|-| '''Summary'''|Returns the name of the applied XSD processor.
|}
==validate:rngxsd-version==
{{Mark|Introduced with Version 89.32:}}:
{| width='100%'
|-
| width='120' | '''Signatures'''
|{{Func|validate:rng|$input as item(), $schema as item()|emptyxsd-sequence()}}<br/>{{Funcversion|validate:rng|$input as item(), $schema as item(), $compact as xs:boolean|empty-sequence()string}}
|-
| '''Summary'''
|Validates Returns the document specified by {{Code|$input}}supported version of XSD Schema. The validation schema is specified by {{Code|$schema}}, and {{Code|$compact}} indicates if the  =RelaxNG Validation= Checks whether an XML document validates against a RelaxNG schema uses the compact RelaxNG notation. Both {{Code|$The input}} document and {{Code|$the schema}} can be specified as: 
* {{Code|xs:string}}, containing the path to the resource,
* {{Code|xs:string}}, containing the resource in its string representation, or
* {{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==
 
{| width='100%'
|-
| 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()}}
|-
| '''Summary'''
|Validates the XML {{Code|$input}} document against a {{Code|$schema}}, using the XML or {{Code|$compact}} notation.
|-
| '''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.
|-
| '''Examples'''
==validate:rng-info==
{| width='100%'|-| width='120' | '''Signatures'''|{{MarkFunc|validate:rng-info|Introduced with Version 8$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*}}|-| '''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.|-| '''Errors'''|{{Error|init|#Errors}} the validation process cannot be started.3<br/>{{Error|not-found|#Errors}}the RelaxNG validator is not available.|} ==validate:rng-report==
{| width='100%'
|-
| width='120' | '''Signatures'''
|{{Func|validate:rng-inforeport|$input as item(), $schema as item()|xs:string*|element(report)}}<br/>{{Func|validate:rng-inforeport|$input as item(), $schema as item()xs:string, $compact as xs:boolean|xs:string*element(report)}}
|-
| '''Summary'''
|Validates the document specified by XML {{Code|$input}} and returns warnings, errors and fatal errors in document against a string sequence. The validation schema is specified by {{Code|$schema}}, and using the XML or {{Code|$compact}} indicates if the schema uses the compact RelaxNG notation. {{Code|$input}} , and returns warnings, errors and {{Code|$schema}} can be specified fatal errors as:* {{Code|xs:string}}, containing the path to the resource,* {{Code|xs:string}}, containing the resource in its string representation, or* {{Code|node()}}, containing the resource itselfXML.
|-
| '''Errors'''
|{{Error|BXVA0002init|#Errors}} the validation process cannot be started.<br/>{{Error|BXVA0003not-found|#Errors}} the The RelaxNG validator is not available.
|}
 
=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 RelaxNG validator is available.
|}
=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