diff --git a/doc/schema.xml b/doc/schema.xml index e4ae65056b565a37ac1df3571e31e5361c823ecc..6f5de5a2512371ae1784f07ac5dc94ef87cf1583 100644 --- a/doc/schema.xml +++ b/doc/schema.xml @@ -1,70 +1,25 @@ <?xml version="1.0" standalone="no"?> <!DOCTYPE s1 SYSTEM "./dtd/document.dtd"> <s1 title="Schema"> - <s2 title="Disclaimer"> - <p>Schema is not fully supported in &XercesCName; yet. But an - experimental implementation of a subset of the W3C XML - Schema language is now available for review in &XercesCName; &XercesCVersion;. - You should not consider this implementation complete or - correct. The limitations of this implementation are - detailed below. Please read this document before using - &XercesCName; &XercesCVersion;. - </p> - </s2> <s2 title="Introduction"> - <p>The &XercesCName; &XercesCVersion; contains an implementation - of a subset of the W3C XML Schema Language as specified - in the 2 May 2001 Recommendation for <jump - href="http://www.w3.org/TR/xmlschema-1/">Structures</jump> - and <jump href="http://www.w3.org/TR/xmlschema-2/"> - Datatypes</jump>. The parsers contained in this package are - able to read and validate XML documents with the grammar specified - in either DTD or XML Schema format. + <p>This package contains an implementation of the W3C XML Schema + Language, a recommendation of the Worldwide Web Consortium + available in three parts: + <jump href="http://www.w3.org/TR/xmlschema-0/">XML Schema: Primer</jump> and + <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 cited below. </p> - <p>We intend to update this package until it implements all - the functionality of the current XML Schema Recommendation. - If you are interested in a particular unimplemented feature, or - if you have any feedback on the implementation design, - we welcome your input to the <jump href="mailto:&XercesCEmailAddress;"> - Xerces-C mailing list &XercesCEmailAddress; </jump> . + + <p>We would very much appreciate feedback on the package via the Xerces-C mailing list + <jump href="mailto:&XercesCEmailAddress;">&XercesCEmailAddress; </jump>, and we + encourage the submission of bugs as described in + <jump href="http://xml.apache.org/xerces-c/bug-report.html">Bug-Reporting</jump> page. + Please read this document before using this package. </p> </s2> <anchor name="limitation"/> <s2 title="Limitations"> - <p>The XML Schema implementation in the &XercesCName; &XercesCVersion; is a - subset of the features defined in the 2 May 2001 XML Schema Recommendation. - </p> - </s2> - - <s2 title='Features/Datatypes Not Supported'> - <ul> - <li>Identity Constraints</li> - <li>Particle Derivation Constraint Checking </li> - <li>Built-in Datatypes Not Supported</li> - <ul> - <li>Primitive Datatypes</li> - <ul> - <li>duration</li> - <li>dateTime</li> - <li>time</li> - <li>date</li> - <li>gYearMonth</li> - <li>gYear</li> - <li>gMonthDay</li> - <li>gDay</li> - <li>gMonth</li> - </ul> - </ul> - </ul> - - - <p>Development is ongoing and we target to implement all the features of the - current XML Schema Recommendation before end of this year. Please note that - the date is tentative and subject to change. - </p> - </s2> - - <s2 title="Other Limitations"> <ul> <li>No interface is provided for exposing the post-schema validation infoset , beyond @@ -85,34 +40,12 @@ in the parser. Large values for <code>minOccurs</code> should be avoided, and <code>unbounded</code> should be used instead of a large value for <code>maxOccurs</code>.</li> - <li>The parsers contained in this package are able to read and - validate XML documents with the grammar specified in either - DTD or XML Schema format, but not both.</li> - <li>The schema is specified by the xsi:schemaLocation or - xsi:noNamespaceSchemaLocation attribute on the root - element of the document. The xsi prefix must be bound to the - Schema document instance namespace, as specified by the - Recommendation. See the sample provided in the - Usage section.</li> </ul> </s2> <anchor name="usage"/> <s2 title="Usage"> - <p>XML document specifies the XML Schema grammar location in the - xsi:schemaLocation attribute attached to the root / top-level element. - Here is an example with no target namspace: - </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>Please see the sample file, 'samples/data/personal-schema.xml' for - further detail. And review the sample file 'samples/data/personal.xsd' - for an example of an XML Schema grammar. - </p> + <p>Here is an example 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. @@ -134,5 +67,85 @@ parser->setFeature(XMLString::transcode("http://xml.org/sax/features/namespaces" parser->setFeature(XMLString::transcode("http://apache.org/xml/features/validation/schema"), true); parser->parse(xmlFile); </source> + <p>Review the sample file, 'samples/data/personal-schema.xml' and + 'samples/data/personal.xsd' for an example of an XML Schema grammar. + </p> + </s2> + + <anchor name="associate"/> + <s2 title="Assocating Schema Grammar with instance document"> + <p>Schema grammars can be associated with instance documents in two ways. + </p> + + <s3 title="Specifying Schema Grammar through method calls:"> + <p>An application developer may use the methods <code>setExternalSchemaLocation</code> + if they use namespaces, and <code>setExternalNoNamespaceSchemaLocation</code> otherwise + to associate schemas with instance documents. + (For SAX2XMLReader, use the properites: + "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 namspace: + </p> +<source> +// Instantiate the DOM parser. +DOMParser parser; +parser.setDoNamespaces(true); +parser.setDoSchema(true); +parser.setExternalNoNamespaceSchemaLocation("personal.xsd"); +parser.parse("test.xml"); + +// Instantiate the SAX2 XMLReader. +SAX2XMLReader* parser = XMLReaderFactory::createXMLReader(); +parser->setProperty( + XMLString::transcode("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation"), + XMLString transcode("personal.xsd")); +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 than the target namespace defined in the Schema. + </p> +<source> +// Instantiate the DOM parser. +DOMParser 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(); +parser->setProperty( + XMLString::transcode("http://apache.org/xml/properties/schema/external-SchemaLocation"), + XMLString transcode("http://my.com personal.xsd http://my2.com test2.xsd")); +parser.parse("test"); +</source> + </s3> + <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 namspace: + </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 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"> +... +</personnel> +</source> + </s3> </s2> </s1>