<?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet href="../make-menu.xsl" type="text/xsl"?><html> <head> <this-is section="schema-processing" page="saqueryapi" subpage=""/> <!-- Generated at 2011-12-09T20:47:22.916Z--><title>Saxonica: XSLT and XQuery Processing: Schema-Aware XQuery from Java</title> <meta name="coverage" content="Worldwide"/> <meta name="copyright" content="Copyright Saxonica Ltd"/> <meta name="title" content="Saxonica: XSLT and XQuery Processing: Schema-Aware XQuery from Java"/> <meta name="robots" content="noindex,nofollow"/> <link rel="stylesheet" href="../saxondocs.css" type="text/css"/> </head> <body class="main"> <h1>Schema-Aware XQuery from Java</h1> <p>When queries are controlled using the Java API, the equivalent to the <code>-val</code> option is to create a <a class="bodylink" href="../javadoc/com/saxonica/config/EnterpriseConfiguration.html"><code>EnterpriseConfiguration</code></a> instead of a <code>Configuration</code> object, and then to call <code>setSchemaValidationMode(net.sf.saxon.lib.Validation.STRICT)</code> on this object. The value <a class="bodylink" href="../javadoc/net/sf/saxon/lib/Validation.html#LAX"><code>Validation.LAX</code></a> can also be used.</p> <p>This option switches validation on for all source documents used by any transformation under the control of this <code>EnterpriseConfiguration</code>. If you want finer control, so that some documents are validated and others are not, you can achieve this by using the <a class="bodylink" href="../javadoc/net/sf/saxon/lib/AugmentedSource.html"><code>AugmentedSource</code></a> object. An <code>AugmentedSource</code> is a wrapper around a normal JAXP <code>Source</code> object, in which additional properties can be set: for example, a property to request validation of the document. The <code>AugmentedSource</code> itself implements the JAXP <code>Source</code> interface, so it can be used anywhere that an ordinary <code>Source</code> object can be used, for example as the first argument to the <code>buildDocument()</code> method of the <code>QueryProcessor</code>, and as the return value from a user-written <code>URIResolver</code>.</p> <p>If the <a class="bodylink" href="../javadoc/com/saxonica/ptree/PTreeURIResolver.html"><code>PTreeURIResolver</code></a> is used, it is also possible to control validation for each source document by means of query parameters in the document URI. For example, <code>doc('source.xml?val=strict')</code> requests the loading of the file <code>source.xml</code> with strict validation.</p> <p>The <a class="bodylink" href="../javadoc/net/sf/saxon/Configuration.html"><code>Configuration</code></a> method <code>setValidationWarnings()</code> has the same effect as the <code>-vw</code> option on the command line: validation errors encountered when processing the final result tree are reported to the <code>ErrorListener</code> as warnings, not as fatal errors. They are also reported as XML comments in the result tree.</p> <p>Schemas can be loaded using either of the techniques used with the command-line interface: that is, by specifying them in the <code>import schema</code> directive in the query prolog, or by including them in an <code>xsi:schemaLocation</code> attribute in a source document. In addition, they can be loaded using the <code>addSchemaSource()</code> method on the <code>EnterpriseConfiguration</code> class.</p> <p>All schemas that are loaded are cached as part of the <a class="bodylink" href="../javadoc/com/saxonica/config/EnterpriseConfiguration.html"><code>EnterpriseConfiguration</code></a>. This is true whether the schema is loaded explicitly using the Java API, whether it is loaded as a result of <code>import schema</code> in a query, or whether it is referenced in an <code>xsi:schemaLocation</code> attribute in a source document. There can only be one schema document loaded for each namespace: any further attempts to load a schema for a given target namespace will return the existing loaded schema, rather than loading a new one. Note in particular that this means there can only be one loaded no-namespace schema document. If you want to force loading of a different schema document for an existing namespace, the only way to do it is to create a new <code>EnterpriseConfiguration</code>.</p> <table width="100%"> <tr> <td> <p align="right"><a class="nav" href="schema11.xml">Next</a></p> </td> </tr> </table> </body> </html>