You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							247 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							247 lines
						
					
					
						
							11 KiB
						
					
					
				
								<?xml version="1.0" standalone="no"?>
							 | 
						|
								<!--
							 | 
						|
								 * Licensed to the Apache Software Foundation (ASF) under one or more
							 | 
						|
								 * contributor license agreements.  See the NOTICE file distributed with
							 | 
						|
								 * this work for additional information regarding copyright ownership.
							 | 
						|
								 * The ASF licenses this file to You under the Apache License, Version 2.0
							 | 
						|
								 * (the "License"); you may not use this file except in compliance with
							 | 
						|
								 * the License.  You may obtain a copy of the License at
							 | 
						|
								 *
							 | 
						|
								 *     http://www.apache.org/licenses/LICENSE-2.0
							 | 
						|
								 *
							 | 
						|
								 * Unless required by applicable law or agreed to in writing, software
							 | 
						|
								 * distributed under the License is distributed on an "AS IS" BASIS,
							 | 
						|
								 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
							 | 
						|
								 * See the License for the specific language governing permissions and
							 | 
						|
								 * limitations under the License.
							 | 
						|
								-->
							 | 
						|
								
							 | 
						|
								<!DOCTYPE s1 SYSTEM "sbk:/style/dtd/document.dtd">
							 | 
						|
								<s1 title="XML Schema Support">
							 | 
						|
								       <s2 title="Introduction">
							 | 
						|
								         <p>&XercesCName; includes an implementation of the W3C XML Schema
							 | 
						|
								            specification, a recommendation of the Worldwide Web Consortium
							 | 
						|
								            available in three parts:
							 | 
						|
								            <jump href="http://www.w3.org/TR/xmlschema-0/">XML Schema: Primer</jump>,
							 | 
						|
								            <jump href="http://www.w3.org/TR/xmlschema-1/">XML Schema: Structures</jump> and
							 | 
						|
								            <jump href="http://www.w3.org/TR/xmlschema-2/">XML Schema: Datatypes</jump>.
							 | 
						|
								            We consider this implementation complete except for the limitations outlined below.
							 | 
						|
								         </p>
							 | 
						|
								
							 | 
						|
								       </s2>
							 | 
						|
								       <anchor name="limitation"/>
							 | 
						|
								       <s2 title="Limitations">
							 | 
						|
								         <ul>
							 | 
						|
								            <li>In certain complex content models specifying large
							 | 
						|
								            values for the <code>minOccurs</code> or <code>maxOccurs</code>
							 | 
						|
								            attributes may result in poor performance and/or large amount
							 | 
						|
								            of memory being allocated by the parser. In such situations large values for
							 | 
						|
								            <code>minOccurs</code> should be avoided, and <code>unbounded</code>
							 | 
						|
								            should be used instead.</li>
							 | 
						|
								
							 | 
						|
								            <li>The parser treats local elements in the same scope with the
							 | 
						|
								            same name and namespace as one element declaration and does not
							 | 
						|
								            differentiate between them.</li>
							 | 
						|
								         </ul>
							 | 
						|
								       </s2>
							 | 
						|
								
							 | 
						|
								       <anchor name="interpretation"/>
							 | 
						|
								       <s2 title="Interpretation of Areas that are Unclear or Implementation-Dependent">
							 | 
						|
								         <s3 title="keyref">
							 | 
						|
								         <p>
							 | 
						|
								            We have interpreted the specs as requiring <keyref> Identity Constraints to refer to
							 | 
						|
								                <key> or <unique> identity constraints within the scope of the elements to which
							 | 
						|
								                the <keyref> is attached. This interpretation is at variance with the Schema Primer, which
							 | 
						|
								                contains an example with a <keyref> declared on an element used inside the element of its
							 | 
						|
								                corresponding <key>.
							 | 
						|
								         </p>
							 | 
						|
								         </s3>
							 | 
						|
								
							 | 
						|
								         <s3 title="out-of-bound float values">
							 | 
						|
								         <p>
							 | 
						|
								                For float data, the specification does not explicitly prescribe how to deal with
							 | 
						|
								                out-of-bound data. &XercesCName; converts these values as shown below:
							 | 
						|
								         </p>
							 | 
						|
								               <table>
							 | 
						|
								                   <tr>
							 | 
						|
								                       <td>Values in range</td>
							 | 
						|
								                       <td>Values converted</td>
							 | 
						|
								                   </tr>
							 | 
						|
								                   <tr>
							 | 
						|
								                       <td>less than -2<sup>24</sup> * 2<sup>104</sup> (approx -3.402823669e+38) </td>
							 | 
						|
								                       <td>-INF</td>
							 | 
						|
								                   </tr>
							 | 
						|
								                   <tr>
							 | 
						|
								                       <td>greater than -1 * 2<sup>-149</sup> (approx -1.401298464e-45) and less than -0 </td>
							 | 
						|
								                       <td>-0</td>
							 | 
						|
								                   </tr>
							 | 
						|
								                   <tr>
							 | 
						|
								                       <td>greater than +0 and less than +1 * 2<sup>-149</sup> (approx +1.401298464e-45) </td>
							 | 
						|
								                       <td>+0</td>
							 | 
						|
								                   </tr>
							 | 
						|
								                   <tr>
							 | 
						|
								                       <td>greater than +2<sup>24</sup> * 2<sup>104</sup> (approx 3.402823669e+38) </td>
							 | 
						|
								                       <td>+INF</td>
							 | 
						|
								                   </tr>
							 | 
						|
								                </table>
							 | 
						|
								            <p>
							 | 
						|
								                The effect of this conversion would invalidate an instance data, for example,
							 | 
						|
								                "1.1e-46", of a data type derived from float, with minExclusive value '+0',
							 | 
						|
								                since "1.1e-46" is converted to "+0", which is the same as the minExclusive.
							 | 
						|
								            </p>
							 | 
						|
								
							 | 
						|
								         </s3>
							 | 
						|
								
							 | 
						|
								         <s3 title="out-of-bound double values">
							 | 
						|
								         <p>
							 | 
						|
								                Similarly, &XercesCName; converts double values as shown below (the values
							 | 
						|
								                depend on the system specific values of DBL_MAX and DBL_MIN):
							 | 
						|
								         </p>
							 | 
						|
								               <table>
							 | 
						|
								                   <tr>
							 | 
						|
								                       <td>Values in range</td>
							 | 
						|
								                       <td>Values converted</td>
							 | 
						|
								                   </tr>
							 | 
						|
								                   <tr>
							 | 
						|
								                       <td>less than -DBL_MAX (approx -1.7976931348623158e+308) </td>
							 | 
						|
								                       <td>-INF</td>
							 | 
						|
								                   </tr>
							 | 
						|
								                   <tr>
							 | 
						|
								                       <td>greater than -DBL_MIN (approx -2.2250738585072014e-308) and less than -0 </td>
							 | 
						|
								                       <td>-0</td>
							 | 
						|
								                   </tr>
							 | 
						|
								                   <tr>
							 | 
						|
								                       <td>greater than +0 and less than +DBL_MIN (approx +2.2250738585072014e-308) </td>
							 | 
						|
								                       <td>+0</td>
							 | 
						|
								                   </tr>
							 | 
						|
								                   <tr>
							 | 
						|
								                       <td>greater than +DBL_MAX (approx +1.7976931348623158e+308) </td>
							 | 
						|
								                       <td>+INF</td>
							 | 
						|
								                   </tr>
							 | 
						|
								                </table>
							 | 
						|
								          </s3>
							 | 
						|
								       </s2>
							 | 
						|
								
							 | 
						|
								       <anchor name="usage"/>
							 | 
						|
								       <s2 title="Usage">
							 | 
						|
								
							 | 
						|
								               <p>Below is an example that shows how to turn on schema processing in DOMParser
							 | 
						|
								               (default is off).  Note that you must also turn on namespace support
							 | 
						|
								               (default is off) for schema processing.
							 | 
						|
								               </p>
							 | 
						|
								<source>// Instantiate the DOM parser.
							 | 
						|
								XercesDOMParser parser;
							 | 
						|
								parser.setDoNamespaces(true);
							 | 
						|
								parser.setDoSchema(true);
							 | 
						|
								parser.parse(xmlFile);
							 | 
						|
								</source>
							 | 
						|
								               <p>Usage in SAXParser is similar, please refer to the SAXCount
							 | 
						|
								               sample program for further reference.
							 | 
						|
								               </p>
							 | 
						|
								               <p>Below is an example that shows how to turn on schema processing in SAX2XMLReader
							 | 
						|
								               (default is on).  Note that namespace must be on (default is on) as well.
							 | 
						|
								               </p>
							 | 
						|
								<source>SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();
							 | 
						|
								parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true);
							 | 
						|
								parser->setFeature(XMLUni::fgXercesSchema, true);
							 | 
						|
								parser->parse(xmlFile);
							 | 
						|
								</source>
							 | 
						|
								       </s2>
							 | 
						|
								
							 | 
						|
								       <anchor name="associate"/>
							 | 
						|
								       <s2 title="Associating Schema Grammar with instance document">
							 | 
						|
								               <p>Schema grammars can be associated with instance documents in three ways.
							 | 
						|
								               </p>
							 | 
						|
								
							 | 
						|
								               <s3 title="Specifying Schema Grammar through attributes in the instance document">
							 | 
						|
								               <p>If schema grammar was not specified externally through methods,
							 | 
						|
								                then each instance document that uses XML Schema grammars must specify the location of
							 | 
						|
								                the grammars it uses by using an xsi:schemaLocation attribute if they use
							 | 
						|
								                namespaces, and xsi:noNamespaceSchemaLocation attribute otherwise.
							 | 
						|
								               </p>
							 | 
						|
								               <p>Here is an example with no target namespace:
							 | 
						|
								               </p>
							 | 
						|
								<source><?xml version="1.0" encoding="UTF-8"?>
							 | 
						|
								<personnel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
							 | 
						|
									   xsi:noNamespaceSchemaLocation='personal.xsd'>
							 | 
						|
								...
							 | 
						|
								</personnel>
							 | 
						|
								</source>
							 | 
						|
								               <p>Here is an example with a target namespace. Note that it is an error to specify a
							 | 
						|
								                different namespace in xsi:schemaLocation attribute than the target namespace
							 | 
						|
								                defined in the Schema.
							 | 
						|
								               </p>
							 | 
						|
								<source><?xml version="1.0" encoding="UTF-8"?>
							 | 
						|
								<personnel xmlns="http://my.com"
							 | 
						|
								          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
							 | 
						|
									   xsi:schemaLocation="http://my.com personal.xsd http://my2.com test2.xsd">
							 | 
						|
								...
							 | 
						|
								</personnel>
							 | 
						|
								</source>
							 | 
						|
								               </s3>
							 | 
						|
								
							 | 
						|
								               <s3 title="Specifying Schema Grammar through method calls">
							 | 
						|
								               <p>An application developer may associate schemas with instance documents through
							 | 
						|
								                  methods <code>setExternalSchemaLocation</code> if they use namespaces, and
							 | 
						|
								                  <code>setExternalNoNamespaceSchemaLocation</code> otherwise.
							 | 
						|
								                (For SAX2XMLReader, use the properties:
							 | 
						|
								                "http://apache.org/xml/properties/schema/external-schemaLocation" and
							 | 
						|
								                "http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation")
							 | 
						|
								               </p>
							 | 
						|
								               <p>Here is an example with no target namespace:
							 | 
						|
								               </p>
							 | 
						|
								<source>
							 | 
						|
								// Instantiate the DOM parser.
							 | 
						|
								XercesDOMParser parser;
							 | 
						|
								parser.setDoNamespaces(true);
							 | 
						|
								parser.setDoSchema(true);
							 | 
						|
								parser.setExternalNoNamespaceSchemaLocation("personal.xsd");
							 | 
						|
								parser.parse("test.xml");
							 | 
						|
								
							 | 
						|
								// Instantiate the SAX2 XMLReader.
							 | 
						|
								SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();
							 | 
						|
								XMLCh* propertyValue = XMLString::transcode("personal.xsd");
							 | 
						|
								ArrayJanitor<XMLCh> janValue(propertyValue);
							 | 
						|
								
							 | 
						|
								parser->setProperty(
							 | 
						|
								       XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation,
							 | 
						|
								       propertyValue);
							 | 
						|
								parser.parse("test.xml");
							 | 
						|
								</source>
							 | 
						|
								
							 | 
						|
								               <p>Here is an example with a target namespace. Note that it is an error to specify a
							 | 
						|
								                different namespace in <code>setExternalSchemaLocation</code> than the target
							 | 
						|
								                namespace defined in the Schema.
							 | 
						|
								               </p>
							 | 
						|
								<source>
							 | 
						|
								// Instantiate the DOM parser.
							 | 
						|
								XercesDOMParser parser;
							 | 
						|
								parser.setDoNamespaces(true);
							 | 
						|
								parser.setDoSchema(true);
							 | 
						|
								parser.setExternalSchemaLocation(
							 | 
						|
								  "http://my.com personal.xsd http://my2.com test2.xsd");
							 | 
						|
								parser.parse("test.xml");
							 | 
						|
								
							 | 
						|
								// Instantiate the SAX2 XMLReader.
							 | 
						|
								SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();
							 | 
						|
								XMLCh* propertyValue = XMLString::transcode(
							 | 
						|
								  "http://my.com personal.xsd http://my2.com test2.xsd");
							 | 
						|
								ArrayJanitor<XMLCh> janValue(propertyValue);
							 | 
						|
								
							 | 
						|
								parser->setProperty(
							 | 
						|
								       XMLUni::fgXercesSchemaExternalSchemaLocation,
							 | 
						|
								       propertyValue);
							 | 
						|
								parser.parse("test.xml");
							 | 
						|
								</source>
							 | 
						|
								               </s3>
							 | 
						|
								
							 | 
						|
								               <s3 title="Pre-parsing and Caching Schema Grammar">
							 | 
						|
								               <p>An application developer may also pre-parse and
							 | 
						|
								                  cache the grammar corresponding to the XML document
							 | 
						|
								                  namespace as described in the
							 | 
						|
								                  <jump href="program-others-&XercesC3Series;.html#GrammarCache">Pre-parsing
							 | 
						|
								                  Grammar and Grammar Caching</jump> section of the
							 | 
						|
								                  &XercesCName; Programming Guide.</p>
							 | 
						|
								               </s3>
							 | 
						|
								       </s2>
							 | 
						|
								</s1>
							 |