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

        <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.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>
            </ul>
            <li>Contains a partial implementation of the
            <jump href="http://www.w3.org/TR/DOM-Level-3-Core/">
            DOM Level 3.0 Core Specification</jump>, Version 1.0 W3C Working Draft 26 February 2003
            and
            <jump href="http://www.w3.org/TR/DOM-Level-3-LS/">
            Document Object Model (DOM) Level 3 Load and Save Specification</jump>,
            Version 1.0 W3C Working Draft 26 February 2003.
            This implementation is experimental.
            See <jump href="dom3.html">DOM Level 3 Support</jump> for detail.</li>
            <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="Platforms with Binaries">

      <p>Precompiled binaries are available for the following platforms
         and compilers:</p>

      &build-winunix-supported-platforms;
	</s2>

    <s2 title="Other Platforms and Compilers">
        <ul>
            <li>MS Visual C++ 6.0</li>
            <li>GCC 3.2.x</li>
            <li>Solaris 8, 9</li>
            <li>AIX 5.1, 5.2</li>
            <li>OS/390</li>
            <li>AS/400</li>
            <li>FreeBSD</li>
            <li>SGI IRIX</li>
            <li>OS/2</li>
            <li>PTX</li>
            <li>UnixWare</li>
        </ul>
    </s2>

    <s2 title='License Information'>
       <p>The &XercesCName; Version &XercesCVersion; 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>
