<?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="&XercesCFullName;">

    <s2 title="&XercesCName; Version &XercesC3Version;">

        <p>&XercesCName; is a validating XML parser written in a portable subset of
        C++.   &XercesCName; makes it easy to give your application the ability to read and write
        <jump href="http://www.w3.org/XML/">XML</jump> data.    A shared
        library is provided for parsing, generating, manipulating, and validating XML documents
        using the DOM, SAX, and SAX2 APIs. For an introduction to programming
        with &XercesCName; refer to the <jump href="program-&XercesC3Series;.html">Programming
        Guide</jump>.</p>

        <p>&XercesCName; is faithful to the
        <jump href="http://www.w3.org/TR/REC-xml">XML 1.0</jump> recommendation
        and many associated standards (see <link anchor="Features">Features</link> below).
        </p>
        <p>The parser provides high performance, modularity, and scalability.    Source
        code, samples and API documentation are provided with the parser.   For
        portability, care has been taken to make minimal use of templates,
        no RTTI, and minimal use of #ifdefs.</p>

    </s2>

    <s2 title="Applications of the &XercesCProjectName; Parser">

        <p>&XercesCProjectName; has rich generating and validating capabilities. The parser is used for:</p>

        <ul>
            <li>Building XML-savvy Web servers</li>
            <li>Building next generation of vertical applications that use XML as
              their data format</li>
            <li>On-the-fly validation for creating XML editors</li>
            <li>Ensuring the integrity of e-business data expressed in XML</li>
            <li>Building truly internationalized XML applications</li>
        </ul>
    </s2>

    <anchor name="Features"/>
    <s2 title="Features">
        <ul>
            <li>Conforms to</li>
            <ul>
               <li><jump href="http://www.w3.org/TR/2004/REC-xml-20040204/">
                   XML 1.0 (Third Edition)</jump>, W3C Recommendation</li>
			   <li><jump href="http://www.w3.org/TR/2004/REC-xml11-20040204/">
                   XML 1.1 (First Edition)</jump>, W3C Recommendation
                   (Note: section 2.13 Normalization Checking has not been implemented)</li>
               <li><jump href="http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/">
                   DOM Level 1 Specification</jump>, W3C Recommendation of October 1, 1998</li>
               <li><jump href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/">
                   DOM Level 2 Core Specification</jump>, W3C Recommendation of November 13, 2000</li>
               <li><jump href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/">
                   DOM Level 2 Traversal and Range Specification</jump>,
                   W3C Recommendation of November 13, 2000</li>
               <li><jump href="http://sax.sourceforge.net/">SAX 1.0 and SAX 2.0</jump></li>
               <li><jump href="http://www.w3.org/TR/1999/REC-xml-names-19990114/">
                   Namespaces in XML</jump>, W3C Recommendation of January 14, 1999</li>
	           <li><jump href="http://www.w3.org/TR/xml-names11/">
                   Namespaces in XML 1.1</jump>, W3C Recommendation</li>
               <li><jump href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">
                   XML Schema Part 1: Structure</jump>, W3C Recommendation 2 May 2001</li>
               <li><jump href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/">
                   XML Schema Part 2: Datatypes</jump>, W3C Recommendation 2 May 2001</li>
               <li><jump href="http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407">
            	   DOM Level 3.0 Core Specification</jump>, W3C Recommendation 7 April 2004</li>
               <li><jump href="http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407">
            	   DOM Level 3.0 Load and Save Specification</jump>, W3C Recommendation 7 April 2004<br/>
	               See <jump href="program-dom-&XercesC3Series;.html#DOM3">DOM Level 3 Support</jump> for detail.</li>
               <li><jump href="http://www.w3.org/TR/2006/REC-xinclude-20061115/">
            	   XML Inclusions (XInclude) 1.0 (Second Edition)</jump>, W3C Recommendation 15 November 2006</li>
            </ul>
            <li>Source code, samples, and documentation is provided</li>
            <li>Programmatic generation and validation of XML</li>
            <li>Pluggable catalogs, validators and encodings</li>
            <li>High performance</li>
            <li>Customizable error handling</li>
        </ul>
    </s2>

    <s2 title="License Information">
       <p>The &XercesCName; Version &XercesC3Version; is available in both source distribution and
          binary distribution.   &XercesCName; is made available under the
          <jump href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache Software License, Version 2.0</jump>.
       </p>
    </s2>

</s1>
