<?xml version='1.0' encoding='UTF-8'?>
<!--
 * 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 'dtd/document.dtd'>
<s1 title='&ParserNameLong; Readme'>
  <s2 title='&ParserNameLong; &ParserVersion; Release'>
    <p>
      Welcome to the future! Xerces2 is the next generation of
      high performance, fully compliant XML parsers in the Apache
      Xerces family. This new version of Xerces introduces the
      Xerces Native Interface (XNI), a complete framework for
      building parser components and configurations that is
      extremely modular and easy to program. 
    </p>
    <p>
      The Apache Xerces2 parser is the reference implementation 
      of XNI but other parser components, configurations, and parsers
      can be written using the Xerces Native Interface. For complete
      design and implementation documents, refer to the 
      <link idref='xni'>XNI Manual</link>.
    </p>
    <p>
      Xerces2 is a <jump href='http://www.w3.org/TR/xmlschema-1/#key-fullyConforming'>
	fully conforming</jump> XML Schema processor. 
      For more information, refer to the <link idref='xml-schema'>
	XML Schema</link> page. 
    </p>
    <p>
      Xerces2 also provides a <link idref='dom3'>complete implementation</link> of the 
<jump href="http://www.w3.org/DOM/DOMTR#dom3">Document 
      Object Model Level 3 Core and Load/Save</jump> W3C Recommendations and provides a 
      <link idref='faq-xinclude'>complete implementation</link> of the <jump href="http://www.w3.org/TR/2006/REC-xinclude-20061115/">XML Inclusions 
      (XInclude)</jump> W3C Recommendation. It also provides <link idref='faq-xcatalogs'>support</link>
      for <jump href="http://www.oasis-open.org/committees/download.php/14809/xml-catalogs.html">OASIS XML Catalogs v1.1</jump>.
    </p>


    <p>Xerces2 is able to parse documents written according to the
        <jump href="http://www.w3.org/TR/2006/REC-xml11-20060816/">
        XML 1.1 Recommendation</jump>, except that 
        it does not yet provide an option to enable normalization checking as described
        in section 2.13 of this specification.
        It also handles namespaces according to the 
        <jump href="http://www.w3.org/TR/2006/REC-xml-names11-20060816/">
        XML Namespaces 1.1 Recommendation</jump>,
        and will correctly serialize XML 1.1 documents if the DOM level
        3 load/save APIs are in use.
    </p>

  </s2>
  <s2 title='Features of This Release'>
    <p>
      The &ParserNameLong; &ParserVersion; supports the
      following standards and APIs:
    </p>
    <ul>
      <li>
	<jump href='http://www.w3.org/XML/'>eXtensible Markup Language</jump>
	(XML) 1.0 
	<jump href='http://www.w3.org/TR/2006/REC-xml-20060816/'>Fourth 
	  Edition</jump> Recommendation
      </li>
      <li>
	   <jump href='http://www.w3.org/TR/2006/REC-xml-names-20060816/'>Namespaces in XML 1.0</jump>
	   Second Edition Recommendation
      </li>
      <li>
	<jump href='http://www.w3.org/XML/'>eXtensible Markup Language</jump>
	(XML) 1.1 
	<jump href='http://www.w3.org/TR/2006/REC-xml11-20060816/'>Second 
	  Edition</jump> Recommendation
      </li>
      <li>
        <jump href='http://www.w3.org/TR/2006/REC-xml-names11-20060816/'>Namespaces in XML 1.1</jump>
        Second Edition Recommendation
      </li>
      <li>
        <jump href='http://www.w3.org/TR/2006/REC-xinclude-20061115/'>
          XML Inclusions (XInclude) Version 1.0</jump> Second Edition Recommendation
      </li>
      <li>
	<jump href='http://www.w3.org/DOM/'>Document Object Model</jump>
	(DOM) Level 3
	<jump href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/'>Core</jump>,
	<jump href='http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/'>Load and Save</jump>,
	(DOM) Level 2
	<jump href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/'>Core</jump>,
	<jump href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/'>Events</jump>,
	and
	<jump href='http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/'>Traversal
	  and Range</jump> Recommendations
      </li>
      <li>
	<jump href='http://sax.sourceforge.net/'>Simple API for XML</jump> (SAX) 2.0.2 Core and Extensions
      </li>
      <li>
	<jump href='http://java.sun.com/xml/xml_jaxp.html'>Java APIs for 
	  XML Processing</jump> (JAXP) 1.3
      </li>
      <li>
	<jump href='http://www.w3.org/XML/Schema'>XML Schema</jump> 1.0
	<jump href='http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/'>Structures</jump>
	and
	<jump href='http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/'>Datatypes</jump>
	Second Edition Recommendations
      </li>
      
    </ul>
  </s2>
  
  <s2 title='Backwards compatibility'>
    <p> According to the DOM Level 3 specification and 
      <jump href="http://www.w3.org/2000/11/DOM-Level-2-errata#core-26">DOM Level 2 errata
      </jump> the createElementNS and createAttributeNS methods convert empty string 
      namespaceURI to null. 
      Please, let us know if this change affects your application.</p>
  </s2>
  
  <s2 title='Changes from Previous Release'>

    <p>
      The &ParserNameLong; &ParserVersion; fixes several bugs which were present 
      in the previous release. It also includes a few minor enhancements and performance 
      improvements.
    </p>
    <p>
      For a more complete list of changes, refer to the 
      <link idref='releases'>Release Information</link> page.
    </p>	      
  </s2>

  <s2 title='Changes from Xerces 1.x'>
    <p>
      Xerces2 is a nearly complete rewrite of the Xerces 1.x codebase
      in order to make the code cleaner, more modular, and easier to
      maintain. It includes a completely redesigned and rewritten XML Schema validation engine. 

      Applications using only the standard interfaces such as
      JAXP, DOM, and SAX should not see any differences. 
    </p>
  </s2>
  <s2 title='License Information'>
    <p>
      The &ParserName; &ParserVersion; release is available
      in source code and precompiled binary (JAR files) form. 
      Both &ParserName; packages are made available under the 
      <jump href='http://www.apache.org/licenses/LICENSE-2.0'>Apache Software
	License</jump>.
    </p>
  </s2>
</s1>
