http://xml.apache.org/http://www.apache.org/http://www.w3.org/

Home

Readme
Download
Installation
Build Instructions

API Docs
Samples
Schema

FAQs
Programming
Migration

Releases
Bug-Reporting
Feedback

Y2K Compliance
PDF Document

CVS Repository
Mail Archive

Disclaimer
 

Schema is not fully supported in Xerces-C++ yet. But an experimental implementation of a subset of the W3C XML Schema language is now available for review in Xerces-C++ 1.5.2. You should not consider this implementation complete or correct. The limitations of this implementation are detailed below. Please read this document before using Xerces-C++ 1.5.2.


Introduction
 

The Xerces-C++ 1.5.2 contains an implementation of a subset of the W3C XML Schema Language as specified in the 2 May 2001 Recommendation for Structures and Datatypes. 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.

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 Xerces-C mailing list xerces-c-dev@xml.apache.org .


Limitations
 

The XML Schema implementation in the Xerces-C++ 1.5.2 is a subset of the features defined in the 2 May 2001 XML Schema Recommendation.


Features/Datatypes Not Supported
 
  • Identity Constraints
  • Particle Derivation Constraint Checking
  • Built-in Datatypes Not Supported
    • Primitive Datatypes
      • duration
      • dateTime
      • time
      • date
      • gYearMonth
      • gYear
      • gMonthDay
      • gDay
      • gMonth

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.


Other Limitations
 
  • No interface is provided for exposing the post-schema validation infoset , beyond that provided by DOM or SAX;
  • The parser permits situations in which there is circular or multiple importing. However, the parser only permits forward references--that is, references directed from the direction of the schema cited in the instance document to other schemas. For instance, if schema A imports both schema B and schema C, then any reference in schema B to an information item from schema C will produce an error. Circular or multiple <include>s have similar limitations.
  • Due to the way in which the parser constructs content models for elements with complex content, specifying large values for the minOccurs or maxOccurs attributes may cause a stack overflow or very poor performance in the parser. Large values for minOccurs should be avoided, and unbounded should be used instead of a large value for maxOccurs.
  • 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.
  • 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.

Usage
 

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:

<?xml version="1.0" encoding="UTF-8"?>
<personnel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:noNamespaceSchemaLocation='personal.xsd'>
...
</personnel>

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.

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.

// Instantiate the DOM parser.
DOMParser parser;
parser.setDoNamespaces(true);
parser.setDoSchema(true);
parser.parse(xmlFile);

Usage in SAXParser is similar, please refer to the sample program 'samples/SAXCount/SAXCount.cpp' for further reference.

Here is an example how to turn on schema processing in SAX2XMLReader (default is on). Note that namespace must be on (default is on) as well.

SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();
parser->setFeature(XMLString::transcode("http://xml.org/sax/features/namespaces"), true);
parser->setFeature(XMLString::transcode("http://apache.org/xml/features/validation/schema"), true);
parser->parse(xmlFile);


Copyright © 2001 The Apache Software Foundation. All Rights Reserved.