<?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 home of Xerces Java. Xerces2 provides high performance, 
      fully compliant XML parsers in the Apache Xerces family. This new version 
      of Xerces continues to build upon 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 provides fully conforming XML Schema 1.0 and 1.1 processors. An experimental implementation of the 
	  "<jump href='http://www.w3.org/TR/2010/CR-xmlschema-ref-20100119/'>XML Schema Definition
	  Language (XSD): Component Designators</jump> (SCD) Candidate Recommendation (January 2010)"	  
	  is also provided for evaluation. 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://www.w3.org/TR/2008/REC-ElementTraversal-20081222/'>Element Traversal</jump>
      First Edition Recommendation
      </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://www.jcp.org/en/jsr/summary?id=206'>Java APIs for 
	  XML Processing</jump> (JAXP) 1.4
      </li>
      <li>
    <jump href='http://www.jcp.org/en/jsr/summary?id=173'>Streaming API For XML</jump> (StAX) 1.0 
    Event API (javax.xml.stream.events)
      </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>
      <li>
	<jump href='http://www.w3.org/XML/Schema'>XML Schema</jump> 1.1
	<jump href='http://www.w3.org/TR/2012/REC-xmlschema11-1-20120405/'>Structures</jump>
	and
	<jump href='http://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/'>Datatypes</jump> Recommendations
      </li>   
      <li>
    <jump href='http://www.w3.org/TR/2010/CR-xmlschema-ref-20100119/'>XML Schema Definition Language 
    (XSD): Component Designators</jump> (SCD) Candidate Recommendation (January 2010)
      </li>   
    </ul>
    From the above mentioned features, all the features mentioned except the last two (i.e XML Schema 1.1 and SCD 
    implementations), are available with both the following Xerces2 Java packages:
    <ul>
       <li>Xerces2 Java 2.12.3 - tar.gz / Xerces2 Java 2.12.3 - zip</li>
       <li>Xerces2 Java 2.12.3 (XML Schema 1.1) - tar.gz / Xerces2 Java 2.12.3 (XML Schema 1.1) - zip</li>
    </ul>
    Whereas, the feature implementations for 'XML Schema 1.1' and 'XML Schema Definition Language (XSD): 
    Component Designators (SCD)', are available only within the Xerces2 Java package 'Xerces2 Java 2.12.3 
    (XML Schema 1.1) - tar.gz / Xerces2 Java 2.12.3 (XML Schema 1.1) - zip'. Please visit the page 
    <jump href='http://xerces.apache.org/mirrors.cgi'>Xerces downloads</jump>, to download the Xerces2 
    Java package that is needed.  
  </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; is a bug fix release, and is largely compatible with
      the previous release in terms of broad functionality offered. It fixes few bugs which were 
      present in the previous release and also includes a few other minor enhancements.
    </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>
