<?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="Migration Archive">
    <s2 title="Migrating to earlier Releases">
      <ul>
        <li><link anchor="Migrateto314">Migrating from &XercesCName; 3.1.3 to 3.1.4</link></li>
        <li><link anchor="Migrateto313">Migrating from &XercesCName; 3.1.2 to 3.1.3</link></li>
        <li><link anchor="Migrateto312">Migrating from &XercesCName; 3.1.1 to 3.1.2</link></li>
        <li><link anchor="Migrateto311">Migrating from &XercesCName; 3.1.0 to 3.1.1</link></li>
        <li><link anchor="Migrateto310">Migrating from &XercesCName; 3.0.1 to 3.1.0</link></li>
        <li><link anchor="Migrateto301">Migrating from &XercesCName; 3.0.0 to 3.0.1</link></li>
	<li><link anchor="Migrateto300">Migrating from &XercesCName; 2.8.0 to 3.0.0</link></li>
        <li><link anchor="Migrateto280">Migrating from &XercesCName; 2.7.0 to 2.8.0</link></li>
        <li><link anchor="Migrateto270">Migrating from &XercesCName; 2.6.0 to 2.7.0</link></li>
        <li><link anchor="Migrateto260">Migrating from &XercesCName; 2.5.0 to 2.6.0</link></li>
        <li><link anchor="Migrateto250">Migrating from &XercesCName; 2.4.0 to 2.5.0</link></li>
        <li><link anchor="Migrateto240">Migrating from &XercesCName; 2.3.0 to 2.4.0</link></li>
        <li><link anchor="Migrateto230">Migrating from &XercesCName; 2.2.0 to 2.3.0</link></li>
        <li><link anchor="Migrateto220">Migrating from &XercesCName; 2.1.0 to 2.2.0</link></li>
        <li><link anchor="Migrateto210">Migrating from &XercesCName; 2.0.0 to 2.1.0</link></li>
        <li><link anchor="Migrateto200">Migrating from &XercesCName; 1.7.0 to 2.0.0</link></li>
        <li><link anchor="Migrateto170">Migrating from &XercesCName; 1.6.0 to 1.7.0</link></li>
        <li><link anchor="Migrateto160">Migrating from &XercesCName; 1.5.2 to 1.6.0</link></li>
        <li><link anchor="Migrateto152">Migrating from &XercesCName; 1.4.0 to 1.5.2</link></li>
        <li><link anchor="Migrateto140">Migrating from XML4C 2.x to 1.4.0</link></li>
      </ul>
    </s2>

    <anchor name="Migrateto314"/>
    <s2 title="Migrating from &XercesCName; 3.1.3 to &XercesCName; 3.1.4">
      <p>&XercesCName; 3.1.4 is a bugfix-only release and is
         binary-compatible with &XercesCName; 3.1.3.</p>
    </s2>

    <anchor name="Migrateto313"/>
    <s2 title="Migrating from &XercesCName; 3.1.2 to &XercesCName; 3.1.3">
      <p>&XercesCName; 3.1.4 is a bugfix-only release and is
         binary-compatible with &XercesCName; 3.1.3.</p>
    </s2>

    <anchor name="Migrateto312"/>
    <s2 title="Migrating from &XercesCName; 3.1.1 to &XercesCName; 3.1.2">
      <p>&XercesCName; 3.1.2 is a bugfix-only release and is
         binary-compatible with &XercesCName; 3.1.1.</p>
    </s2>

    <anchor name="Migrateto311"/>
    <s2 title="Migrating from &XercesCName; 3.1.0 to &XercesCName; 3.1.1">
      <p>&XercesCName; 3.1.1 is a bugfix-only release and is
         binary-compatible with &XercesCName; 3.1.0.</p>
    </s2>

    <anchor name="Migrateto310"/>
    <s2 title="Migrating from &XercesCName; 3.0.1 to &XercesCName; 3.1.0">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 3.0.1 and &XercesCName; 3.1.0.</p>

      <p>Topics discussed are:</p>
      <ul>
        <li><link anchor="NewFeatures310">New features in &XercesCName; 3.1.0</link></li>
        <li><link anchor="API310">Public API Changes</link></li>
      </ul>

    <anchor name="NewFeatures310"/>
    <s3 title="New features in &XercesCName; 3.1.0">
      <ul>
    <li>Working multi-import support. The support for handling multiple import
        declarations with the same target namespaces has been improved and
        thoroughly tested. Furthermore, the same logic was extended to
        loadGrammar and the schemaLocation attributes so that you can load
        several schemas with the same namespace and/or "add" more declarations
        with the schemaLocation attributes. To enable this feature, set the
        XMLUni::fgXercesHandleMultipleImports feature/parameter to true.
        Starting with this release all the tests and examples have multi-import
        support enabled by default.</li>

    <li>New property, XMLUni::fgXercesLowWaterMark, allows to configure the
        parser buffer low water mark. In particular, setting this value to 0
        disables data caching in the parser which can be useful if you want
        the SAX events to be dispatched as soon as the data is available.</li>

    <li>DOMLSParser::parseWithContext implementation. In particular, this
        functionality allows one to parse a document fragment with missing
        namespace declarations as long as the context document provides them.</li>

    <li>Improved performance and reduced memory footprint when validating with
        large maxOccurs values. If available, the SSE2 instructions are used to
        further speedup this case.</li>

    <li>Improved scalability of the XML Schema identity checking (key, keyref,
        and unique).</li>

    <li>Multiple XML Schema conformance fixes.</li>

    <li>More robust external library detection (libcurl and ICU). In particular,
        the build system no longer tries to inject any additional paths such as
        /usr or /usr/local.</li>

    <li>Compilation of the ICU message loader resources no longer depends on
        the ICU implementation details.</li>
      </ul>
    </s3>

    <anchor name="API310"/>
    <s3 title="Public API Changes">

        <p>&XercesCName; 3.1.0 is a minor release and does
           not include any public API changes that would preclude
           applications using the previous version of &XercesCName; from
           building successfully with this version.</p>
    </s3>
    </s2>

    <anchor name="Migrateto301"/>
    <s2 title="Migrating from &XercesCName; 3.0.0 to &XercesCName; 3.0.1">
      <p>&XercesCName; 3.0.1 is a bugfix-only release and is
         binary-compatible with &XercesCName; 3.0.0.</p>
    </s2>

    <anchor name="Migrateto300"/>
    <s2 title="Migrating from &XercesCName; 2.8.0 to &XercesCName; 3.0.0">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 2.8.0 and &XercesCName; 3.0.0.</p>

      <p>Topics discussed are:</p>
      <ul>
        <li><link anchor="NewFeatures300">New features in &XercesCName; 3.0.0</link></li>
        <li><link anchor="API300">Public API Changes</link></li>
        <ul>
            <li><link anchor="NewAPI300">New Public API</link></li>
            <li><link anchor="ModifiedAPI300">Modified Public API</link></li>
            <li><link anchor="DeprecatedAPI300">Deprecated/Removed Public API</link></li>
        </ul>
      </ul>

    <anchor name="NewFeatures300"/>
    <s3 title="New features in &XercesCName; 3.0.0">
      <ul>
        <li>Autotools-based build system for the UNIX/Linux/Mac OS X platforms</li>
        <li>Project files for VC++ 9</li>
        <li>Support for the ICU transcoder in VC++ 7.1, 8, and 9 project files</li>
        <li>libcurl-based net accessor</li>
        <li>Support for XInclude in DOM</li>
        <li>Support for both XPath 1 and XPath 2 models in the DOM XPath interface</li>
        <li>Support for the XML Schema subset of XPath 1 in DOM</li>
        <li>Conformance to the final DOM Level 3 interface specification</li>
        <li>Ability to provide custom DOM memory manager as well as tune the global DOM heap parameters</li>
        <li>All public and widely used interfaces as well as a large
            portion of the implementation were converted to be 64-bit safe.</li>
        <li>Various XML Schema fixes including the fix for the large
            maxOccurs and minOccurs bug as well as for the changed ##other
            interpretation</li>
        <li>Reviewed and cleaned up diagnostics messages</li>
        <li>Optimizations for SAX/SAX2 and DOM parsing as well as XML Schema
            validation</li>
      </ul>
    </s3>

    <anchor name="API300"/>
    <s3 title="Public API Changes">

        <p>&XercesCName; 3.0.0 is a major release and includes
           a number of application-breaking interface changes compared to
           &XercesCName; 2 series.
           The following sub-sections provide an overview of the public API
           changes between &XercesCName; 2 series and this release.</p>

        <anchor name="NewAPI300"/>
        <s4 title="New Public APIs">
            <ul>
              <li>XMLGrammarPoolImpl implementation has been moved to
                  framework/ and is now publicly accessible</li>

              <li>DOM XPath interfaces now support XPath 2 model</li>

              <li>A number of DOM interfaces (DOMLSInput, DOMLSOuput,
                  DOMLSParser, DOMLSSerializer, DOMConfiguration, etc.)
                  were added as part of the the final DOM Level 3
                  specification conformance work</li>
            </ul>
        </s4>

        <anchor name="ModifiedAPI300"/>
        <s4 title="Modified Public APIs">

          <p>A large number of public APIs have been modified. Consult
             individual interface documentation for details. The following
             list gives an overview of major changes:</p>

          <ul>
            <li>Several DOM interfaces have been adjusted to conform to the final
                DOM Level 3 specification</li>

            <li>DOM XPath interfaces have been adjusted to support both XPath 1
                and XPath 2</li>

            <li>Many public interfaces that used int/long types to represent
                memory-related sizes, counts, indexes, etc., have been modified
                to use the 64-bit safe XMLSize_t type instead</li>
          </ul>

        </s4>

        <anchor name="DeprecatedAPI300"/>
        <s4 title="Deprecated/Removed Public APIs">
          <p>All APIs marked as deprecated in &XercesCName; 2 series have
             been removed in this release. In particular deprecated DOM
             (depdom) as well as COM support have been removed.</p>

          <p>Furthermore, a number of DOM interfaces (DOMBuilder, DOMWriter,
             DOMInputSource, etc.) were replaced as part of the the final
             DOM Level 3 specification conformance work.</p>
        </s4>

    </s3>
    </s2>

    <anchor name="Migrateto280"/>
    <s2 title="Migrating from &XercesCName; 2.7.0 to &XercesCName; 2.8.0">
    <p>The following section is a discussion of the technical differences between
       &XercesCName; 2.7.0 code base and the &XercesCName; 2.8.0.</p>

      <p>Topics discussed are:</p>
      <ul>
        <li><link anchor="NewFeatures280">New features in &XercesCName; 2.8.0</link></li>
        <li><link anchor="API280">Public API Changes</link></li>
        <ul>
            <li><link anchor="NewAPI280">New Public API</link></li>
            <li><link anchor="ModifiedAPI280">Modified Public API</link></li>
            <li><link anchor="DeprecatedAPI280">Deprecated/Removed Public API</link></li>
        </ul>
      </ul>

    <anchor name="NewFeatures280"/>
    <s3 title="New features in &XercesCName; 2.8.0">
      <ul>
        <li>Exponential growth of memory block (from 16KB to 128KB) that are allocated by the DOM heap.</li>
        <li>The NODE_CLONED notification is now sent to each node's user data handler when cloning the entire DOMDocument.</li>
        <li>On Windows extract the registry code page from MIME\Database\Charset\&lt;encoding>\@InternetEncoding instead of MIME\Database\Charset\&lt;encoding>\@Codepage.</li>
        <li>Allow whitespace-only nodes to be added as children of a DOMDocument.</li>
        <li>When a node is cloned or imported the type information (PSVI) is also copied.</li>
        <li>When using SAX2, including XMLReaderFactory to use createXMLReader doesn't include xercesc/parsers/SAX2XMLReaderImpl.hpp anymore. If you need to cast the SAX2XMLReader to SAX2XMLReaderImpl,
            you need to include this header yourself.</li>
      </ul>
    </s3>
    </s2>

    <anchor name="Migrateto270"/>
    <s2 title="Migrating from &XercesCName; 2.6.0 to &XercesCName; 2.7.0">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 2.6.0 code base and the &XercesCName; 2.7.0.</p>

      <p>Topics discussed are:</p>
      <ul>
        <li><link anchor="NewFeatures270">New features in &XercesCName; 2.7.0</link></li>
        <li><link anchor="API270">Public API Changes</link></li>
        <ul>
            <li><link anchor="NewAPI270">New Public API</link></li>
            <li><link anchor="ModifiedAPI270">Modified Public API</link></li>
            <li><link anchor="DeprecatedAPI270">Deprecated/Removed Public API</link></li>
        </ul>
      </ul>

    <anchor name="NewFeatures270"/>
    <s3 title="New features in &XercesCName; 2.7.0">
      <ul>
        <li>Feature to not generate XML Schema annotations.  That is, not to add them to the grammar.  If you don't need annotations you may want to turn on this feature to avoid memory bloat for XML Schemas that use annotations heavily.</li>
        <li>Option to skip regenerating the XML Schema annotations when deserializing a grammar.  If you don't need annotations you may want to turn on this option to avoid memory bloat for XML Schemas that use annotations heavily.</li>
        <li>Feature to not perform default entity resolution.  When the entityResolver returns NULL, the parser doesn't try to resolve the entity externally.</li>
        <li>Feature to do schema-only validation even if there is a DTD.</li>
      </ul>
    </s3>

    <anchor name="API270"/>
    <s3 title="Public API Changes">

        <p>The following lists the public API changes between the &XercesCName;
           2.6.0; and the &XercesCName; 2.7.0 releases
           of the parser. </p>

        <anchor name="NewAPI270"/>
        <s4 title="New Public API">
            <ul>
              <li>XMLString: subString, compareIStringASCII, lowercaseASCII, uppercaseASCII</li>
              <li>RefHash2KeysTableOf: rehashing support</li>
              <li>XMemory: placement new and delete</li>
              <li>SAX2XMLFilter</li>
            </ul>
        </s4>

        <anchor name="ModifiedAPI270"/>
        <s4 title="Modified Public API">
        </s4>

        <anchor name="DeprecatedAPI270"/>
        <s4 title="Deprecated/Removed Public API">
        </s4>

    </s3>
    </s2>


	<anchor name="Migrateto260"/>
	<s2 title="Migrating from &XercesCName; 2.5.0 to &XercesCName; 2.6.0">
	<p>The following section is a discussion of the technical differences between
      &XercesCName; 2.5.0 code base and the &XercesCName; 2.6.0.</p>

      <p>Topics discussed are:</p>
      <ul>
        <li><link anchor="NewFeatures260">New features in &XercesCName; 2.6.0</link></li>
        <li><link anchor="API260">Public API Changes</link></li>
        <ul>
            <li><link anchor="NewAPI260">New Public API</link></li>
            <li><link anchor="ModifiedAPI260">Modified Public API</link></li>
            <li><link anchor="DeprecatedAPI260">Deprecated/Removed Public API</link></li>
            <li>Please note the following source code incompatibility: Rename VALUE_CONSTRAINT enumeration values in XSConstants.hpp due to conflict with system header.  New
              values are VALUE_CONSTRAINT_NONE, VALUE_CONSTRAINT_DEFAULT and VALUE_CONSTRAINT_FIXED.  Old
              values are VC_NONE, VC_DEFAULT and VC_FIXED.</li>
            <li>Also note that if you have implemented your own XMLGrammarPool implementation, that
                the original getXSModel has been marked deprecated and a new method, of the same
                name, that takes a bool parameter has been added.  This new getXSModel needs
                to always return an XSModel.</li>
        </ul>
      </ul>

    <anchor name="NewFeatures260"/>
    <s3 title="New features in &XercesCName; 2.6.0">
      <ul>
		<li>Reduce footprint of DLL by building the deprecated DOM as a separate library</li>
        <li>Improve packaging scripts</li>
        <li>Enable ID's to work on all kinds of schema components</li>
        <li>Add messages to DOMExceptions along with the error code</li>
        <li>Improve annotation error-reporting capabilities</li>
        <li>Make grammar caching work with DTD internal subsets</li>
        <li>Bring parser up to the XML 1.0 3rd Edition</li>
        <li>Update to the XML 1.1 recommendation</li>
        <li>Add new method to DOMDocument so that DOM level-2 style DOMDocumentTypes (which have a
        DOMDocument to own them) can be created</li>
        <li>Feature for disabling identity constraints</li>
        <li>Update schema errata</li>
        <li>Provide means to get actual values out of PSVI/schema component model</li>
        <li>Synthesize annotation components for non-schema attributes</li>
        <li>Expose partial PSVIElement information at the start element call</li>
        <li>Externalize validation, actual/canonical value production for arbitrary strings</li>
        <li>Laxly validate schema annotations</li>
        <li>Upgrade to ICU 3.0</li>
        <li>Handle elements with a large number of attributes more efficiently</li>
      </ul>
    </s3>

    <anchor name="API260"/>
    <s3 title="Public API Changes">

        <p>The following lists the public API changes between the &XercesCName;
           2.5.0; and the &XercesCName; 2.6.0 releases
           of the parser. </p>

        <anchor name="NewAPI260"/>
        <s4 title="New Public API">
            <ul>
              <li>XSValue</li>
              <li>IdentityConstraintHandler</li>
              <li>XMLBufferFullHandler</li>
              <li>XMLString: removeChar, isValidNOTATION</li>
              <li>XMLUri: normalizeUri</li>
              <li>PSVIHandler: handlePartialElementPSVI</li>
              <li>RefHash family of classes: getHashModulus</li>
              <li>XSAnnotation: setline/col and systemid</li>
              <li>XMLReader: handeEOL</li>
              <li>XMLChar: isValidNmToken</li>
              <li>XMLBigDecimal: parseDecimal, getIntVal</li>
              <li>HexBin: getCanonicalRepresentation, decode</li>
              <li>Base64: getCanonicalRepresentation, decode</li>
              <li>XMLBigInteger: compareValues</li>
              <li>XMLAbstractDoubleFloat: isDataConverted, getValue, isDataOverFlowed</li>
              <li>PSVIItem: getActualValue</li>
              <li>XSSimpleTypeDefinition: getDatatypeValidator</li>
              <li>RefHash2KeysTableOf: transferElement</li>
              <li>XMLGrammarPool: getXSModel</li>
            </ul>
        </s4>

        <anchor name="ModifiedAPI260"/>
        <s4 title="Modified Public API">
            <ul>
              <li>XSerializeEngine constructor</li>
              <li>MACUnicodeConverters</li>
            </ul>
        </s4>

        <anchor name="DeprecatedAPI260"/>
        <s4 title="Deprecated/Removed Public API">
            <ul>
              <li>XSerializeEngine constructor</li>
              <li>DTDAttDef: getDOMTypeInfoName,  getDOMTypeInfoUri</li>
			  <li>DTDElementDecl: getDOMTypeInfoName, getDOMTypeInfoUri</li>
     	      <li>SchemaAttDef: setAnyDatatypeValidator</li>
 			  <li>UnionDatatypeValidator: getMemberTypeName, getMemberTypeUri, getMemberTypeAnonymous, getMemberTypeValidator</li>
 			  <li>XMLAttr: getValidatingTypeURI, getValidatingTypeName, setDatatypeValidator, setSchemaValidated</li>
 			  <li>ComplexTypeInfo: setContentModel</li>
 			  <li>XMLGrammarPool: getXSModel</li>
 			  <li>SAXParser, mark this class deprecated</li>
            </ul>
        </s4>

    </s3>
    </s2>

	<anchor name="Migrateto250"/>
	<s2 title="Migrating from &XercesCName; 2.4.0 to &XercesCName; 2.5.0">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 2.4.0 code base and the &XercesCName; 2.5.0.</p>

      <p>Topics discussed are:</p>
      <ul>
        <li><link anchor="NewFeatures250">New features in &XercesCName; 2.5.0</link></li>
        <li><link anchor="API250">Public API Changes</link></li>
        <ul>
            <li><link anchor="NewAPI250">New Public API</link></li>
            <li><link anchor="ModifiedAPI250">Modified Public API</link></li>
            <li><link anchor="DeprecatedAPI250">Deprecated/Removed Public API</link></li>
        </ul>
      </ul>

    <anchor name="NewFeatures250"/>
    <s3 title="New features in &XercesCName; 2.5.0">
      <ul>
              <li>Fix duplicate attribute detection when namespaces are disabled </li>
              <li>Stricter use of static memory manager for static data only</li>
              <li>PSVI bug fix and enhencement </li>
              <li>ThreadTest with grammar caching</li>
              <li>Re-pluggable Panic Handler</li>
              <li>Enhenced mutex creation to impove thread safety</li>
              <li>Intrinsic transcoding support for 390.</li>
              <li>Canonical Representation Support </li>
              <li>New sample SCMPrint</li>
              <li>New sample PSVIWriter</li>
              <li>New test XSerializerTest</li>
      </ul>
    </s3>

    <anchor name="API250"/>
    <s3 title="Public API Changes">

        <p>The following lists the public API changes between the &XercesCName;
           2.4.0; and the &XercesCName; 2.5.0 releases
           of the parser. </p>

        <anchor name="NewAPI250"/>
        <s4 title="New Public API">
            <ul>
              <li></li>
            </ul>
        </s4>

        <anchor name="ModifiedAPI250"/>
        <s4 title="Modified Public API">
            <ul>
              <li></li>
            </ul>
        </s4>

        <anchor name="DeprecatedAPI250"/>
        <s4 title="Deprecated/Removed Public API">
            <ul>
              <li></li>
            </ul>
        </s4>

    </s3>
    </s2>

    <anchor name="Migrateto240"/>
    <s2 title="Migrating from &XercesCName; 2.3.0 to &XercesCName; 2.4.0">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 2.3.0 code base and the &XercesCName; 2.4.0.</p>

      <p>Topics discussed are:</p>
      <ul>
        <li><link anchor="NewFeatures240">New features in &XercesCName; 2.4.0</link></li>
        <li><link anchor="API240">Public API Changes</link></li>
        <ul>
            <li><link anchor="NewAPI240">New Public API</link></li>
            <li><link anchor="ModifiedAPI240">Modified Public API</link></li>
            <li><link anchor="DeprecatedAPI240">Deprecated/Removed Public API</link></li>
        </ul>
      </ul>

    <anchor name="NewFeatures240"/>
    <s3 title="New features in &XercesCName; 2.4.0">
      <ul>
        <li>PSVI</li>
        <li>Performance enhancement</li>
        <li>Stateless Grammar </li>
        <li>Grammar Serialization/Deserialiation</li>
      </ul>
    </s3>

    <anchor name="API240"/>
    <s3 title="Public API Changes">

        <p>The following lists the public API changes between the &XercesCName;
           2.3.0; and the &XercesCName; 2.4.0 releases
           of the parser. </p>

        <anchor name="NewAPI240"/>
        <s4 title="New Public API">
            <ul>
              <li>PSVI related</li>
              <li>Grammar serialization/deserialization related</li>
            </ul>
        </s4>

        <anchor name="ModifiedAPI240"/>
        <s4 title="Modified Public API">
            <ul>
              <li></li>
            </ul>
        </s4>

        <anchor name="DeprecatedAPI240"/>
        <s4 title="Deprecated/Removed Public API">
            <ul>
              <li>XMLAttDef: getProvided, getDOMTypeInfoUri, getDOMTypeInfoName, setProvided</li>
              <li>XMLAttDefList: hasMoreElements, nextElement, Reset</li>
              <li>DTDAttDefList: hasMoreElements, nextElement, Reset</li>
              <li>SchemaAttDefList: hasMoreElements, nextElement, Reset</li>
              <li>XMLElementDecl: LookupOpts</li>
              <li>XMLNumber family: toString</li>
              <li>ENTITYDatatypeValidator: setEntityDeclPool</li>
              <li>IDDatatypeValidator: setIDRefList</li>
              <li>IDREFDatatypeValidator: setIDRefList</li>
              <li>GeneralAttributeCheck: setIDRefList</li>
              <li>SchemaGrammar: getIDRefList</li>
              <li>SchemaElementDecl: all non thread safe methods </li>
              <li>SchemaAttDef: getters </li>
              <li>DTDGrammar: getRootElemId</li>
            </ul>
        </s4>

    </s3>
    </s2>

    <anchor name="Migrateto230"/>
    <s2 title="Migrating from &XercesCName; 2.2.0 to &XercesCName; 2.3.0">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 2.2.0 code base and the &XercesCName; 2.3.0.</p>

      <p>Topics discussed are:</p>
      <ul>
        <li><link anchor="NewFeatures230">New features in &XercesCName; 2.3.0</link></li>
        <li><link anchor="API230">Public API Changes</link></li>
        <ul>
            <li><link anchor="NewAPI230">New Public API</link></li>
            <li><link anchor="ModifiedAPI230">Modified Public API</link></li>
            <li><link anchor="DeprecatedAPI230">Deprecated/Removed Public API</link></li>
        </ul>
      </ul>

    <anchor name="NewFeatures230"/>
    <s3 title="New features in &XercesCName; 2.3.0">
      <ul>
        <li>Experimental Implementation of Namespaces in XML 1.1 </li>
        <li>Experimental Implementation of XML 1.1: in DOMWriter</li>
        <li>More Schema 1.0 Errata Implementation</li>
        <li>More DOM L3 Core Support</li>
        <ul>
            <li>DOMConfiguration</li>
            <li>Document Normalization</li>
        </ul>
        <li>Plugable Memory Manager</li>
        <li>Plugable Security Manager</li>
        <li>Plugable Panic Handler</li>
        <li>Logical Path Resolution</li>
      </ul>
    </s3>

    <anchor name="API230"/>
    <s3 title="Public API Changes">

        <p>The following lists the public API changes between the &XercesCName;
           2.2.0; and the &XercesCName; 2.3.0 releases
           of the parser. </p>

        <anchor name="NewAPI230"/>
        <s4 title="New Public API">
            <ul>
              <li>To support additional DOM L3 functions, the following are added:</li>
              <li>DOMDocument: getDOMConfiguration</li>
              <li>DOMConfiguration class for document normalization.</li>
            </ul>
        </s4>

        <anchor name="ModifiedAPI230"/>
        <s4 title="Modified Public API">
            <ul>
              <li></li>
            </ul>
        </s4>

        <anchor name="DeprecatedAPI230"/>
        <s4 title="Deprecated/Removed Public API">
            <ul>
              <li>DOMDocument canSetNormalizationFeature, setNormalizationFeature, getNormalizationFeature, getErrorHandler, setErrorHandler removed</li>
            </ul>
        </s4>

    </s3>
    </s2>

    <anchor name="Migrateto220"/>
    <s2 title="Migrating from &XercesCName; 2.1.0 to &XercesCName; 2.2.0">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 2.1.0 code base and the &XercesCName; 2.2.0.</p>

      <p>Topics discussed are:</p>
      <ul>
        <li><link anchor="NewFeatures220">New features in &XercesCName; 2.2.0</link></li>
        <li><link anchor="CPPNamespace220">Using C++ Namespace</link></li>
        <li><link anchor="API220">Public API Changes</link></li>
        <ul>
            <li><link anchor="NewAPI220">New Public API</link></li>
            <li><link anchor="ModifiedAPI220">Modified Public API</link></li>
            <li><link anchor="DeprecatedAPI220">Deprecated/Removed Public API</link></li>
        </ul>
      </ul>

    <anchor name="NewFeatures220"/>
    <s3 title="New features in &XercesCName; 2.2.0">
      <ul>
        <li>C++ Namespace Support</li>
        <li>Schema 1.0 Errata Implementation</li>
        <li>Experimental Implementation of XML 1.1</li>
        <li>More DOM L3 Core Support:</li>
        <ul>
            <li>DOMNode: baseURI</li>
            <li>DOMAttr: isId, getTypeInfo</li>
            <li>DOMElement: setIdAttribute, setIdAttributeNS, setIdAttributeNode, getTypeInfo</li>
        </ul>
        <li>DOM Message: make use of the non-standard extension DOMImplementation::loadDOMExceptionMsg
        to load the default error text message for the correspond Exception Code.</li>
        <li>New feature XMLPlatformUtils::Initialize(const char* const locale) to set
        the locale for message loader.   See <jump href="program-others-&XercesC3Series;.html#SpecifylocaleforMessageLoader">
        Specify locale for Message Loader</jump> for details</li>
        <li>Support Build with ICU Message Loader, or Message Catalog Message Loader</li>
        <li>RPM for Linux</li>
        <li>390: Uniconv390 support</li>
        <li>390: support record-oriented MVS datasets with the DOM Level 3 serialization APIs</li>
        <li>Support for Linux/390</li>
        <li>Performance: Break Scanner for different functionalities and many other performance improvement</li>
        <li>New feature, "http://apache.org/xml/features/dom/byte-order-mark", allows user to enable
            DOMWriter to write Byte-Order-Mark in the output XML stream,
            See <jump href="program-dom-&XercesC3Series;.html#Byte-Order-Mark">
            Xercesc Feature: Byte Order Mark</jump> for details</li>
      </ul>
    </s3>

    <anchor name="CPPNamespace220"/>
    <s3 title="Using C++ Namespace">
        <p>&XercesCName; 2.2.0 now supports C++ Namespace.  All &XercesCName;
           classes, data and variables are defined in the &XercesC3Namespace; namespace
           if C++ Namespace support is ENABLED.</p>

        <p>All the binary distributions of &XercesCName; 2.2.0 are now built with
           C++ Namespace enabled.   Therefore users' applications that links with the distributed
           binary packages must namespace qualify all the &XercesCName; classes, data and variables.</p>

        <p>See the Programming Guide <jump href="program-others-&XercesC3Series;.html#CPPNamespace">Using C++ Namespace</jump>
           for details.</p>

    </s3>

    <anchor name="API220"/>
    <s3 title="Public API Changes">

        <p>The following lists the public API changes between the &XercesCName;
           2.1.0; and the &XercesCName; 2.2.0 releases
           of the parser. </p>

        <anchor name="NewAPI220"/>
        <s4 title="New Public API">
            <ul>
              <li>To support additional DOM L3 functions, the following are added:</li>
              <ul>
                  <li>DOMAttr: isId, getTypeInfo</li>
                  <li>DOMElement: setIdAttribute, setIdAttributeNS, setIdAttributeNode, getTypeInfo</li>
                  <li>Added DOMTypeInfo class for getTypeInfo class in DOMElement and DOMAttr</li>
                  <li>Added getDOMTypeInfoUri, getDOMTypeInfoName to XMLAttDef and XMLElementDecl for use in building DOMTypeInfo</li>
              </ul>
              <li>Added a non-standard extension DOMImplementation::loadDOMExceptionMsg to load the
              default error message for the corresponding DOMException code.</li>
              <li>XMLAttr: Added a constructor and a set method to allow creating/setting of
              XMLAttr using a rawname.</li>
              <li>Added XMLUri::getUriText to return the URI as a string specification.</li>
              <li>Add XMLString::fixURI to transform an absolute path filename to standard URI form.</li>
              <li>Added XMLString::equals for faster string comparison.</li>
              <li>To allow users to tell the parser to force standard uri conformance,
                  the following are added:</li>
                <ul>
                  <li>XercesDOMParser/DOMParser/SAXParser: get/setStandardUriConformant</li>
                  <li>and DOMBuilder/SAX2XMLReader will recognize the feature
                      http://apache.org/xml/features/standard-uri-conformant</li>
                </ul>
              <li>Add XMLURL::hasInvalidChar() to indicate if the URL has invalid char as per RFC standard</li>
              <li>To allow users to enable/disable src offset calculation,
                  the following are added:</li>
                <ul>
                  <li>XercesDOMParser/DOMParser/SAXParser: get/setCalculateSrcOfs</li>
                  <li>and DOMBuilder/SAX2XMLReader will recognize the feature
                      http://apache.org/xml/features/calculate-src-ofst</li>
                </ul>
              <li>To allow users to select the scanner when scanning XML documents,
                  the following are added:</li>
                <ul>
                  <li>XercesDOMParser/DOMParser/SAXParser: useScanner</li>
                  <li>and DOMBuilder/SAX2XMLReader will recognize the property
                      http://apache.org/xml/properties/scannerName</li>
                </ul>
             <li>Added getSrcOffset to XercesDOMParser/DOMParser/SAXParser/DOMBuilder/SAX2XMLReader to
                 allow users to get the current src offset within the input source.</li>
            </ul>
        </s4>

        <anchor name="ModifiedAPI220"/>
        <s4 title="Modified Public API">
            <ul>
              <li>The following DOM functions are being added a const modifier.</li>
              <ul>
                  <li>DOMImplementation::hasFeature</li>
                  <li>DOMNode: isSameNode, isEqualNode, compareTreePosition</li>
              </ul>
              <li>XMLPlatformUtils::Initialize() takes a parameter specifying locale
              for message loader, with default value "en_US".</li>
              <li>To fix [Bug 13641], the QName copy constructor is corrected to take
              a reference as parameter, i.e. QName(const QName&amp; qname).</li>
              <li>To fix [Bug 12232], the QName operator== has been added a const modified.</li>
              <li>Move XMLUri copy constructor and operator = as public.</li>
              <li>Move XMLUri::isURIString as public.</li>
              <li>For validation purpose, added two more default parameters to
              XMLValidator::validateAttrValue.</li>
              <li>To fix [Bug 15802], the getURIText of DOMParser/XercesDOMParser/SAXParser/SAX2XMLReader
              are being added a const modifier.</li>
            </ul>
        </s4>

        <anchor name="DeprecatedAPI220"/>
        <s4 title="Deprecated/Removed Public API">
            <ul>
              <li>No Deprecated Public API in this release.</li>
            </ul>
        </s4>

    </s3>
    </s2>

    <anchor name="Migrateto210"/>
    <s2 title="Migrating from &XercesCName; 2.0.0 to &XercesCName; 2.1.0">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 2.0.0 code base and the &XercesCName; 2.1.0.</p>

      <p>Topics discussed are:</p>
      <ul>
        <li><link anchor="NewFeatures210">New features in &XercesCName; 2.1.0</link></li>
        <li><link anchor="API210">Public API Changes</link></li>
        <ul>
            <li><link anchor="NewAPI210">New Public API</link></li>
            <li><link anchor="ModifiedAPI210">Modified Public API</link></li>
            <li><link anchor="DeprecatedAPI210">Deprecated/Removed Public API</link></li>
        </ul>
      </ul>

    <anchor name="NewFeatures210"/>
    <s3 title="New features in &XercesCName; 2.1.0">
      <ul>
        <li>64 bit binaries distribution on Windows IA64 and Linux IA64</li>
        <li>Support for Cygwin environment</li>
        <li>DOM Level 3 DOMNode: compareTreePosition, lookupNamespaceURI, lookupNamespacePrefix and isDefaultNamespace</li>
        <li>plus many more bug fixes</li>
      </ul>
    </s3>

    <anchor name="API210"/>
    <s3 title="Public API Changes">

        <p>The following lists the public API changes between the &XercesCName;
           2.0.0; and the &XercesCName; 2.1.0 releases
           of the parser. </p>

        <anchor name="NewAPI210"/>
        <s4 title="New Public API">
            <ul>
              <li>To fix bug 7087, XMLEnumerator is added a virtual destructor.</li>
              <li>To fix bug 11448, XMLNotationDecl::get/setBaseURI, and XMLEntityDecl::get/setBaseURI are added.</li>
            </ul>
        </s4>

        <anchor name="ModifiedAPI210"/>
        <s4 title="Modified Public API">
            <ul>
              <li>DOMNodeList: item, and getLength have been added a const modifier.</li>
              <li>DOMNode: lookupNamespacePrefix, isDefaultNamespace, and lookupNamespaceURI have been added a const modifier.</li>
            </ul>
        </s4>

        <anchor name="DeprecatedAPI210"/>
        <s4 title="Deprecated/Removed Public API">
            <ul>
              <li>No Deprecated Public API in this release.</li>
            </ul>
        </s4>

    </s3>
    </s2>

    <anchor name="Migrateto200"/>
    <s2 title="Migrating from &XercesCName; 1.7.0 to &XercesCName; 2.0.0">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 1.7.0 code base and the &XercesCName; 2.0.0.</p>

      <p>Topics discussed are:</p>
      <ul>
        <li><link anchor="NewFeatures200">New features in &XercesCName; 2.0.0</link></li>
        <li><link anchor="LibraryChange200">Unix Library Name change</link></li>
        <li><link anchor="DirChange200">DOM Reorganization</link></li>
        <li><link anchor="Reuse200">Reuse Grammar becomes Grammar Caching</link></li>
        <li><link anchor="API200">Public API Changes</link></li>
        <ul>
            <li><link anchor="NewAPI200">New Public API</link></li>
            <li><link anchor="ModifiedAPI200">Modified Public API</link></li>
            <li><link anchor="DeprecatedAPI200">Deprecated/Removed Public API</link></li>
        </ul>
      </ul>

    <anchor name="NewFeatures200"/>
    <s3 title="New features in &XercesCName; 2.0.0">
      <ul>
        <li>64 bit binaries distribution</li>
        <li>Follow Unix Shared Library Naming Convention</li>
        <li>Apache Recommended DOM C++ Binding</li>
        <li>Experimental DOM Level 3 subset support, including DOMWriter and DOMBuilder</li>
        <li>Grammar preparsing and Grammar caching</li>
        <li>Optionally ignore loading of external DTD</li>
        <li>Project files for Microsoft Visual C++ .Net</li>
        <li>Codewarrior 8 support</li>
        <li>Option to enable/disable strict IANA encoding name checking</li>
        <li>plus many more bug fixes and performance enhancement</li>
      </ul>
    </s3>

    <anchor name="LibraryChange200"/>
    <s3 title="Unix Library Name Change">
      <p>The &XercesCName; UNIX Library now follows the Unix Shared Library Naming Convention (libname.so.soname).</p>
    </s3>

    <anchor name="DirChange200"/>
    <s3 title="DOM Reorganization">
        <p>1. The old Java-like DOM is now deprecated, and all the associated files, including the headers
              and DOMParser files are moved to <code>src/xercesc/dom/deprecated</code>.  Users of the old
              Java-like DOM are required to change all their #include lines to pick up the headers.
              For example</p>
<source>
//old code
#include &lt;xercesc/dom/DOM.hpp&gt;
#include &lt;xercesc/dom/DOM_Document.hpp&gt;
#include &lt;xercesc/parsers/DOMParser.hpp&gt;

void test(char* xmlFile) {
    DOMParser parser;
    parser.parse(xmlFile);
    DOM_Document doc = parser.getDocument();
    :
    return;
}
</source>
              <p> should now change to </p>
<source>
//new code
#include &lt;xercesc/dom/deprecated/DOM.hpp&gt;          //&lt;==== change this include line
#include &lt;xercesc/dom/deprecated/DOM_Document.hpp&gt; //&lt;==== change this include line
#include &lt;xercesc/dom/deprecated/DOMParser.hpp&gt;    //&lt;==== change this include line

// the rest is the same
void test(char* xmlFile) {
    DOMParser parser;
    parser.parse(xmlFile);
    DOM_Document doc = parser.getDocument();
    :
    return;
}
</source>
        <p>2. The Experimental IDOM is now renamed, and becomes the Apache Recommended DOM C++ Binding.
              The following changes are made: </p>
              <ul>
                 <li>class names are renamed from IDOM_XXXX to DOMXXXX, e.g. IDOM_Document to DOMDocument</li>
                 <li>and thus header files are renamed from IDOM_XXXX.hpp to DOMXXXX.hpp and are moved
                     to <code>src/xercesc/dom</code></li>
                 <li>the IDOMParser is renamed to XercesDOMParser.  And thus the header
                     file is renamed as well</li>
                 <li>the rest is the same, see
                     <jump href="ApacheDOMC++Binding.html">Apache Recommended DOM C++ binding</jump>
                     and <jump href="program-dom-&XercesC3Series;.html">DOM Programming Guide</jump> for more programming
                     information</li>
              </ul>
              <p>Users of IDOM are required to change all their #include lines and do a global rename of
                 IDOMParser to XercesDOMParesr, and IDOM_XXXX to DOMXXXX.  For example</p>
<source>
//old code
#include &lt;xercesc/idom/IDOM.hpp&gt;
#include &lt;xercesc/idom/IDOM_Document.hpp&gt;
#include &lt;xercesc/parsers/IDOMParser.hpp&gt;

void test(char* xmlFile) {
    IDOMParser parser;
    parser.parse(xmlFile);
    IDOM_Document* doc = parser.getDocument();
    :
    return;
}
</source>
              <p> should now change to </p>
<source>
//new code
#include &lt;xercesc/dom/DOM.hpp&gt;                  //&lt;==== change this include line
#include &lt;xercesc/dom/DOMDocument.hpp&gt;          //&lt;==== change this include line
#include &lt;xercesc/parsers/XercesDOMParser.hpp&gt;  //&lt;==== change this include line

void test(char* xmlFile) {
    XercesDOMParser parser;                           //&lt;==== rename the IDOMParser
    parser.parse(xmlFile);
    DOMDocument* doc = parser.getDocument();          //&lt;==== rename the IDOM_XXXX
    :
    return;
}
</source>
    </s3>

    <anchor name="Reuse200"/>
    <s3 title="Reuse Grammar becomes Grammar Caching">
        <p>The &XercesCName; 2.0.0 extends the "Reuse Grammar" support by replacing it with
           a new feature called "Grammar Caching" which provides more flexibility in reusing grammars.
           Users who used to do the following:</p>
<source>

      XercesDOMParser parser;

      // this is the first parse, just usual code as you do normal parse
      // "firstXmlFile" has a grammar (schema or DTD) specified.
      parser.parse(firstXmlFile);

      // this is the second parse, by setting second parameter to true,
      // the parser will reuse the grammar in the last parse
      // (i.e. the one in  "firstXmlFile")
      // to validate the second "anotherXmlFile".  Any grammar that is
      // specified in anotherXmlFile is IGNORED.
      //
      // Note: The anotherXmlFile cannot have any DTD internal subset.
      parser.parse(anotherXmlFile, true);

</source>
        <p>should now use the features cacheGrammarFromParse and useCachedGrammarFromParse:</p>
<source>
      XercesDOMParser parser;

      // By setting cacheGrammarFromParse to true,
      // the parser will cache any grammars encountered in the
      // follow-on xml files, if not cached already
      parser.cacheGrammarFromParse(true);

      parser.parse(firstXmlFile);

      // By setting useCachedGrammarFromParse to true,
      // the parser will use all the previous cached grammars
      // to validate the follow-on xml files if the cached
      // grammar matches the one specified in anotherXmlFile.
      //
      // Note: The follow-on xml files cannot have any DTD internal subset.
      parser.useCachedGrammarFromParse(true);

      parser.parse(anotherXmlFile);

      // This will flush the cached grammar pool
      parser.resetCachedGrammarPool();
</source>

        <p>Note there are a number of differences between "Reuse Grammar" and "Grammar Caching" </p>
           <ol>
              <li>"Reuse Grammar" ignores any grammar that is specified in anotherXmlFile and simply
                  reuse whatever stored in previous parse; while "Grammar Caching" will use the
                  cached grammar only if it matches the one specified in the anotherXmlFile.
                  If not match, then the new grammar is parsed.</li>
              <li>"Reuse Grammar" can only reuse the grammar from previous parse; while "Grammar Caching"
                  can selectively cache many grammars from different parses and collect them all in a pool indexed
                  by targetNamespace (for Schema) or system id (for DTD).</li>
              <li>Plus "Grammar Caching" has much more functionalities other than above
                  (like "Pre-parsing Grammar").  Please refer to
                  <jump href="program-others-&XercesC3Series;.html#GrammarCache">Preparsing Grammar and Grammar Caching
                  </jump> for more programming details.</li>
           </ol>
    </s3>

    <anchor name="API200"/>
    <s3 title="Public API Changes">

        <p>The following lists the public API changes between the &XercesCName;
           1.7.0; and the &XercesCName; 2.0.0 releases
           of the parser. </p>

        <anchor name="NewAPI200"/>
        <s4 title="New Public API">
            <ul>
              <li>To support DOM Level 3, the following are added (see
                  <jump href="api-&XercesC3Series;.html">the API documentation page</jump> for details).</li>
                <ul>
                  <li>DOMNode functions set/getUserData, isSameNode isEqualNode.</li>
                  <li>DOMDocument functions renameNode, get/setActualEncoding, get/setEncoding, get/setVersion, get/setStandalone, get/setDocumentURI.</li>
                  <li>DOMEntity functions get/setActualEncoding, get/setEncoding, get/setVersion.</li>
                  <li>classes AbstractDOMParser, DOMError, DOMErrorHandler, and DOMLocator.</li>
                  <li>classes DOMUserDataHandler, DOMImplementationRegistry and DOMImplementationSource.</li>
                  <li>classes DOMBuilder, DOMEntityResolver, DOMImplementationLS, DOMInputSource,
                      Wrapper4DOMInputSource and Wrapper4InputSource.</li>
                  <li>classes DOMWriter, DOMWriterFilter, LocalFileFormatTarget, StdOutFormatTarget,
                      and MemBufFormatTarget</li>
                </ul>
              <li>To support DOMWriter, the following PlatformUtils functions are added</li>
                <ul>
                   <li>openFileToWrite, writeBufferToFile</li>
                </ul>
              <li>To have Apache Recommended DOM C++ Binding, the following are added (see
                  <jump href="ApacheDOMC++Binding.html">Apache Recommended DOM C++ binding).</jump></li>
                <ul>
                  <li>function release() to fix Memory Management problem</li>
                  <li>classes DOMDocumentRange and DOMDocumentTraversal</li>
                  <li>XMLSize_t is used to represent unsigned integral type in DOM</li>
                  <li>IDOM_XXXX classes are renamed to DOMXXXX, and IDOMParser is renamed to XercesDOMParser
                      as described in <link anchor="DirChange200">DOM Reorganization</link></li>
                  <li>XercesDOMParser::adoptDocument is added so that document can optionally live
                  outside the parser.</li>
                </ul>
              <li>To support optionally load external DTD, the following are added:</li>
                <ul>
                  <li>XercesDOMParser::set/getLoadExternalDTD</li>
                  <li>DOMParser::set/getLoadExternalDTD</li>
                  <li>SAXParser::set/getLoadExternalDTD</li>
                  <li>and SAX2XMLReader will recognize the feature
                      http://apache.org/xml/features/nonvalidating/load-external-dtd</li>
                </ul>
              <li>To support Preparsing Grammar and Grammar Caching, the following are added:</li>
                <ul>
                   <li>XercesDOMParser/DOMParser/SAXParser functions loadGrammar, resetCachedGrammarPool,
                       cacheGrammarFromParse, isCachingGrammarFromParse, useCachedGrammarInParse,
                       isUsingCachedGrammarInParse.</li>
                   <li>SAX2XMLReader functions loadGrammar, resetCachedGrammarPool, and will recognize the features
                       http://apache.org/xml/features/validation/cache-grammarFromParse and
                       http://apache.org/xml/features/validation/use-cachedGrammarInParse.</li>
                </ul>
              <li>To support access to Grammar info, the following are added:</li>
                <ul>
                   <li>XercesDOMParser/DOMParser/SAXParser/SAX2XMLReader functions getRootGrammar, getGrammar, getURIText.</li>
                </ul>
              <li>To support strict IANA encoding name checking, the following are added:</li>
                <ul>
                   <li>class EncodingValidator.</li>
                   <li>PlatformUtils functions strictIANAEncoding, isStrictIANAEncoding.</li>
                   <li>XMLTransService functions strictIANAEncoding, isStrictIANAEncoding.</li>
                </ul>
            </ul>
        </s4>

        <anchor name="ModifiedAPI200"/>
        <s4 title="Modified Public API">
            <ul>
              <li>SAXParser::getScanner() is moved from public to protected.</li>
              <li>Grammar::getGrammarType has been added a const modifier.</li>
              <li>Xerces features are renamed from XMLUni::fgSAX2XercesXXXX to XMLUni::fgXercesXXXX
                  so that they can be shared with DOM parser.</li>
              <li>With the new Grammar Caching introduced, the the last parameter "reuseGrammar" in
                  the following API is dropped.
                   Users should now use the "Grammar Caching" feature as described in
                   <link anchor="Reuse200">Reuse Grammar becomes Grammar Caching</link>.</li>
                <ul>
                   <li>(in Parser, SAXParser, DOMParser, and XercesDOMParser) </li>
                   <li>parse(const InputSource&amp; source, const bool reuseGrammar = false);</li>
                   <li>parse(const XMLCh* const systemId, const bool reuseGrammar = false);</li>
                   <li>parse(const char* const systemId, const bool reuseGrammar = false);</li>
                   <li>(in SAXParser, DOMParser, and XercesDOMParser) </li>
                   <li>parseFirst(const InputSource&amp; source, XMLPScanToken&amp;  toFill, const bool reuseGrammar = false);</li>
                   <li>parseFirst(const XMLCh* const systemId, XMLPScanToken&amp;  toFill, const bool reuseGrammar = false);</li>
                   <li>parseFirst(const char* const systemId, XMLPScanToken&amp;  toFill, const bool reuseGrammar = false);</li>
                </ul>
            </ul>
        </s4>

        <anchor name="DeprecatedAPI200"/>
        <s4 title="Deprecated/Removed Public API">
            <ul>
              <li>The old Java-like DOM is now deprecated as described in
                  <link anchor="DirChange200">DOM Reorganization</link></li>
              <li>SAX2XMLReader::setValidationConstraint.   For consistency, SAX2XMLReader users should
                  set the feature "http://apache.org/xml/features/validation-error-as-fatal" instead.</li>
              <li>SAX2XMLReader::setExitOnFirstFatalError.  For consistency, SAX2XMLReader users should
                  set the feature "http://apache.org/xml/features/continue-after-fatal-error" instead.</li>
              <li>With the new Grammar Caching introduced, the following features will not be
                  recognized by the SAX2XMLReader:</li>
                <ul>
                   <li>http://apache.org/xml/features/validation/reuse-grammar</li>
                   <li>http://apache.org/xml/features/validation/reuse-validator</li>
                </ul>
            </ul>
        </s4>
    </s3>
    </s2>

    <anchor name="Migrateto170"/>
    <s2 title="Migrating from &XercesCName; 1.6.0 to 1.7.0">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 1.6.0 code base and the &XercesCName; 1.7.0 code base.</p>

    <s3 title="New features in &XercesCName; 1.7.0">
      <ul>
        <li>Support SAX2-ext's DeclHandler.</li>
        <li>Directory sane_include reorganization: add sub-directory 'xercesc' to src / include folder.
            See <link anchor="DirChange170">"Directory change in &XercesCName; 1.7.0"</link>
            below for detail.</li>
        <li>More IDOM test cases - port IDOMMemTest, and merge ThreadTest and IThreadTest.</li>
        <li>Support IconvFBSD in multi-threading environment.</li>
        <li>Use IDOM in schema processing for faster performance.</li>
        <li>Add Project files for BCB6.</li>
        <li>Port to Caldera (SCO) OpenServer.</li>
        <li>Support building with new MacOSURLAccessCF NetAccessor that doesn't require
            Carbon but can allow Xerces to live solely within CoreServices layer.</li>
      </ul>
    </s3>

    <anchor name="DirChange170"/>
    <s3 title="Directory change in &XercesCName; 1.7.0">
        <ul>
            <li>A new directory, <em>src/xercesc</em> is created to be the new parent directory of
                all src's direct subdirectories.</li>
            <li>And in the binary package, all the headers are distributed in <em>include/xercesc</em> directory.</li>
            <li>Migration considerations:</li>
            <ul>
              <li>Windows application, <br/>
                  either change the <em>include directories </em> setting to
                  "..\..\..\..\..\src\<em>xercesc</em>" (Projects->settings->C/C++->Preprocessor), <br/>
                  or <br/>
                  change the relevant #include instances in the source/header files, accordingly, eg <br/>
                  #include &lt;util/XMLString.hpp&gt; be changed to <br/>
                  #include &lt;<em>xercesc</em>/util/XMLString.hpp&gt; </li>
              <li>Unix application, <br/>
                  either change the <em>include search path </em> in the Makefile to
                  " -I &lt;installroot&gt;/include/<em>xercesc</em>", <br/>
                  or <br/>
                  change the relevant #include instances in the source/header files as shown above. </li>
            </ul>
        </ul>
    </s3>

    <s3 title="Public API Changes in &XercesCName; 1.7.0">

        <p>The following lists the public API changes between the &XercesCName;
           1.7.0 and the &XercesCName; 1.7.0 releases
           of the parser. </p>

        <s4 title="New Public API">
            <ul>
              <li>Added SAX2-ext's DeclHandler class.
                  See <jump href="api-&XercesC3Series;.html">the API documentation page</jump> for details.</li>
              <li>To support SAX2-ext's DeclHandler, the following new methods are added
                  in classes DefaultHandler and SAX2XMLReader:</li>
              <ul>
                <li>void DefaultHandler::elementDecl(const XMLCh* const name, const XMLCh* const model)</li>
                <li>void DefaultHandler::attributeDecl(const XMLCh* const eName, const XMLCh* const aName,
                    const XMLCh* const type, const XMLCh* const mode, const XMLCh* const value)</li>
                <li>void DefaultHandler::internalEntityDecl(const XMLCh* const name, const XMLCh* const value)</li>
                <li>void DefaultHandler::externalEntityDecl(const XMLCh* const name, const XMLCh* const publicId,
                    const XMLCh* const systemId)</li>
                <li>DeclHandler* SAX2XMLReader::getDeclarationHandler() const</li>
                <li>void SAX2XMLReader::setDeclarationHandler(DeclHandler* const handler)</li>
              </ul>
              <li>To conform to DOM Level 2 specification, the following methods are added:</li>
              <ul>
                <li>DOM_Node DOM_NodeIterator::getRoot()</li>
                <li>DOM_Node DOM_TreeWalker::getRoot()</li>
                <li>bool DOM_Node::hasAttributes() const</li>
                <li>bool DOM_Element::hasAttribute(const DOMString &amp;name) const</li>
                <li>bool DOM_Element::hasAttributeNS(const DOMString &amp;namespaceURI,
                                const DOMString &amp;localName) const</li>
                <li>IDOM_Node* IDOM_NodeIterator::getRoot()</li>
                <li>IDOM_Node* IDOM_TreeWalker::getRoot()</li>
                <li>bool IDOM_Node::hasAttributes() const</li>
                <li>bool IDOM_Element::hasAttribute(const XMLCh* name) const</li>
                <li>bool IDOM_Element::hasAttributeNS(const XMLCh* namespaceURI,
                                const XMLCh* localName) const</li>
              </ul>
              <li>To fix [Bug 5570], a copy constructor is added to DOM_Range</li>
            </ul>
        </s4>

        <s4 title="Modified Public API">
            <ul>
              <li>To conform to the SAX2 specification, the namespace-prefixes feature
                  in SAX2 is set to off as default.</li>
              <li>To fix [Bug 6330], the Base64::encode and Base64::decode have been modified
                  as follows</li>
                  <ul>
                  <li>static XMLByte* Base64::encode(const XMLByte* const inputData,
                      const unsigned int   inputLength,
                      unsigned int*        outputLength);</li>
                  <li>static XMLByte* Base64::decode(const XMLByte* const inputData,
                           unsigned int*        outputLength);</li>
                  <li>static XMLCh* decode(const XMLCh* const inputData,
                         unsigned int*      outputLength);</li>
                  </ul>
              <li>To conform to DOM Level 2 specification, the DOM_Node::supports and IDOM_Node::supports
                  are modified to</li>
              <ul>
                <li>bool DOM_Node::isSupported(const DOMString &amp;feature, const DOMString &amp;version) const</li>
                <li>bool IDOM_Node::isSupported(const XMLCh* feature, const XMLCh* version) const</li>
              </ul>
            </ul>
        </s4>

        <s4 title="Deprecated Public API">
            <ul>
              <li>No Deprecated Public API in this release.</li>
            </ul>
        </s4>

    </s3>
    </s2>

    <anchor name="Migrateto160"/>
    <s2 title="Migrating from &XercesCName; 1.5.2 to 1.6.0">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 1.5.2 code base and the &XercesCName; 1.6.0 code base.</p>

    <s3 title="New features in &XercesCName; 1.6.0">
      <ul>
        <li>Full Schema support is available in this release.
            See <jump href="schema-&XercesC3Series;.html">the Schema page</jump> for details.</li>
        <li>New sample SEnumVal to show how to enumerate the markup decls in a Schema Grammar is added.</li>
      </ul>
    </s3>

    <s3 title="Public API Changes in &XercesCName; 1.6.0">

        <p>The following lists the public API changes between the &XercesCName;
           1.5.2 and the &XercesCName; 1.6.0 releases
           of the parser. </p>

        <s4 title="New Public API">
            <ul>
              <li>It should not be a fatal error if a schema InputSource is not found.
                  Add the following new methods:</li>
                <ul>
                   <li>const bool InputSource::getIssueFatalErrorIfNotFound() const</li>
                   <li>void InputSource::setIssueFatalErrorIfNotFound(const bool flag</li>
                </ul>
              <li>Allow code to take advantage of the fact that the length of the prefix and
                  local name are known when constructing the QName.
                  Add the following new methods:</li>
                <ul>
                   <li>void QName::setNPrefix(const XMLCh*, const unsigned int)</li>
                   <li>void QName::setNLocalPart(const XMLCh*, const unsigned int)</li>
                </ul>
              <li>To support schemaLocation and noNamespaceSchemaLocation to be specified outside the
                  instance document, the following new methods are added:</li>
              <ul>
                <li>XMLCh* DOMParser::getExternalSchemaLocation() const</li>
                <li>XMLCh* DOMParser::getExternalNoNamespaceSchemaLocation() const</li>
                <li>void DOMParser::setExternalSchemaLocation(const XMLCh* const schemaLocation)</li>
                <li>void DOMParser::setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation)</li>
                <li>XMLCh* IDOMParser::getExternalSchemaLocation() const</li>
                <li>XMLCh* IDOMParser::getExternalNoNamespaceSchemaLocation() const</li>
                <li>void IDOMParser::setExternalSchemaLocation(const XMLCh* const schemaLocation)</li>
                <li>void IDOMParser::setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation)</li>
                <li>XMLCh* SAXParser::getExternalSchemaLocation() const</li>
                <li>XMLCh* SAXParser::getExternalNoNamespaceSchemaLocation() const</li>
                <li>void SAXParser::setExternalSchemaLocation(const XMLCh* const schemaLocation)</li>
                <li>void SAXParser::setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation)</li>
                <li>and the following properties are recognized by SAX2XMLReader:</li>
                <ul>
                   <li>http://apache.org/xml/properties/schema/external-schemaLocation</li>
                   <li>http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation</li>
                </ul>
              </ul>
              <li>To support identity constraints, the following new method is added:</li>
              <ul>
                <li>QName* XMLAttr::getAttName() const</li>
              </ul>
            </ul>
        </s4>

        <s4 title="Modified Public API">
            <ul>
              <li>To support attribute constraint checking, the constant values in XMLAttDef::DefAttTypes have been re-ordered.</li>
            </ul>
        </s4>

        <s4 title="Deprecated Public API">
            <ul>
              <li>Root Element check is moved from XMLValidator to XMLScanner.  Thus XMLValidator::checkRootElement() is deprecated.</li>
            </ul>
        </s4>

    </s3>
    </s2>

    <anchor name="Migrateto152"/>
    <s2 title="Migrating from &XercesCName; 1.4.0 to 1.5.2">
      <p>The following section is a discussion of the technical differences between
      &XercesCName; 1.4.0 code base and the &XercesCName; 1.5.2 code base.</p>

    <s3 title="New features in &XercesCName; 1.5.2">
        <p>Schema subset support and an experimental IDOM are available
           in this release.
        </p>
        <s4 title="Schema Subset Support">
            <ul>
              <li>New function "setDoSchema" is added to DOM/SAX parser.</li>
              <li>New feature "http://apache.org/xml/features/validation/schema" is recognized by SAX2XMLReader.</li>
              <li>New classes such as SchemaValidator, TraverseSchema ... are added.</li>
              <li>The Scanner is enhanced to process schema.</li>
              <li>New sample data files personal-schema.xml and personal.xsd.</li>
              <li>New command line option "-s" for samples.</li>
            </ul>
            <p>
               See <jump href="schema-&XercesC3Series;.html">the Schema page</jump> for details.
            </p>
        </s4>

        <s4 title="Experimental IDOM">
           <p>The experimental IDOM API is a new design of the C++ DOM API. Please note that
              this experimental IDOM API is only a prototype and is subject to change.
           </p>
        </s4>

    </s3>

    <s3 title="Changes required to migrate to &XercesCName; 1.5.2">

        <p>There are some architectural changes between the &XercesCName;
           1.4.0 and the &XercesCName; 1.5.2 releases
           of the parser, and as a result, some code has undergone restructuring
           as shown below. </p>

        <s4 title="Validator directory Reorganization">
            <ul>
              <li>common content model files such as DFAContentModel ...
                  are moved to a new directory called src/validators/common</li>
              <li>DTD related files are moved to a new directory called src/validators/DTD</li>
              <li>new directory src/validators/Datatype is created to store all datatype validators</li>
              <li>new directory src/validators/schema is created to store Schema related files</li>
            </ul>
        </s4>

        <s4 title="DTDValidator">
            <p> DTDValidator was design to scan, validate and store the DTD in &XercesCName; 1.4.0
                or earlier. In &XercesCName; 1.5.2, this process is broken down into three components:
            </p>
            <ul>
              <li>new class DTDScanner - to scan the DTD</li>
              <li>new class DTDGrammar - to store the DTD Grammar</li>
              <li>DTDValidator - to validate the DTD only</li>
            </ul>
        </s4>

    </s3>
    </s2>

    <anchor name="Migrateto140"/>
    <s2 title="Migrating from XML4C 2.x to &XercesCName; 1.4.0">
       <p>The following section is a discussion of the technical differences between
       XML4C 2.x code base and the new &XercesCName; 1.4.0 code base.</p>

    <s3 title="Summary of changes required to migrate from XML4C 2.x to &XercesCName; 1.4.0">

        <p>There are some major architectural changes
        between the 2.3.x and &XercesCName; 1.4.0 releases
        of the parser, and as a result the code has undergone
        significant restructuring. The list below mentions the public
        api's which existed in 2.3.x and no longer exist in
        &XercesCName; 1.4.0. It also mentions the
        &XercesCName; 1.4.0 api which will give you the
        same functionality.  Note: This list is not exhaustive. The
        API docs (and ultimately the header files) supplement this
        information.</p>

        <ul>

            <li><code>parsers/[Non]Validating[DOM/SAX]parser.hpp</code><br/>
            These files/classes have all been consolidated in the new
            version to just two files/classes:
            <code>[DOM/SAX]Parser.hpp</code>.  Validation is now a
            property which may be set before invoking the
            <code>parse</code>. Now, the
            <code>setDoValidation()</code> method controls the
            validation processing.</li>

            <li>The <code>framework/XMLDocumentTypeHandler.hpp</code>
            been replaced with
            <code>validators/DTD/DocTypeHandler.hpp</code>.</li>

            <li>The following methods now have different set of
            parameters because the underlying base class methods have
            changed in the 3.x release. These methods belong to one of
            <code>XMLDocumentHandler</code>,
            <code>XMLErrorReporter</code> or
            <code>DocTypeHandler</code> interfaces.</li>
            <ul>
                <li><code>[Non]Validating[DOM/SAX]Parser::docComment</code></li>
                <li><code>[Non]Validating[DOM/SAX]Parser::doctypePI</code></li>
                <li><code>[Non]ValidatingSAXParser::elementDecl</code></li>
                <li><code>[Non]ValidatingSAXParser::endAttList</code></li>
                <li><code>[Non]ValidatingSAXParser::entityDecl</code></li>
                <li><code>[Non]ValidatingSAXParser::notationDecl</code></li>
                <li><code>[Non]ValidatingSAXParser::startAttList</code></li>
                <li><code>[Non]ValidatingSAXParser::TextDecl</code></li>
                <li><code>[Non]ValidatingSAXParser::docComment</code></li>
                <li><code>[Non]ValidatingSAXParser::docPI</code></li>
                <li><code>[Non]Validating[DOM/SAX]Parser::endElement</code></li>
                <li><code>[Non]Validating[DOM/SAX]Parser::startElement</code></li>
                <li><code>[Non]Validating[DOM/SAX]Parser::XMLDecl</code></li>
                <li><code>[Non]Validating[DOM/SAX]Parser::error</code></li>
            </ul>

            <li>The following methods/data members changed visibility
            from <code>protected</code> in 2.3.x to
            <code>private</code> (with public setters and getters, as
            appropriate).</li>

            <ul>
                <li><code>[Non]ValidatingDOMParser::fDocument</code></li>
                <li><code>[Non]ValidatingDOMParser::fCurrentParent</code></li>
                <li><code>[Non]ValidatingDOMParser::fCurrentNode</code></li>
                <li><code>[Non]ValidatingDOMParser::fNodeStack</code></li>
            </ul>


            <li>The following files have moved, possibly requiring
            changes in the <code>#include</code> statements.</li>

            <ul>
                <li><code>MemBufInputSource.hpp</code></li>
                <li><code>StdInInputSource.hpp</code></li>
                <li><code>URLInputSource.hpp</code></li>
            </ul>


            <li>All the DTD validator code was moved from
            <code>internal</code> to separate
            <code>validators/DTD</code> directory.</li>

            <li>The error code definitions which were earlier in
            <code>internal/ErrorCodes.hpp</code> are now split up into
            the following files:</li>

            <ul>
                <li><code>framework/XMLErrorCodes.hpp   </code> - Core XML errors</li>
                <li><code>framework/XMLValidityCodes.hpp</code> - DTD validity errors</li>
                <li><code>util/XMLExceptMsgs.hpp        </code> - C++ specific exception codes.</li>
            </ul>
        </ul>

    </s3>



    <s3 title="The Samples">

        <p>The sample programs no longer use any of the unsupported
        util/xxx classes. They only existed to allow us to write
        portable samples. But, since we feel that the wide character
        APIs are supported on a lot of platforms these days, it was
        decided to go ahead and just write the samples in terms of
        these. If your system does not support these APIs, you will
        not be able to build and run the samples. On some platforms,
        these APIs might perhaps be optional packages or require
        runtime updates or some such action.</p>

        <p>More samples have been added as well. These highlight some
        of the new functionality introduced in the new code base. And
        the existing ones have been cleaned up as well.</p>

        <p>The new samples are:</p>
        <ol>
           <li>PParse - Demonstrates 'progressive parse' (see below)</li>
           <li>StdInParse - Demonstrates use of the standard in input source</li>
           <li>EnumVal - Shows how to enumerate the markup decls in a DTD Validator</li>
        </ol>
    </s3>


    <s3 title="Parser Classes">

        <p>In the XML4C 2.x code base, there were the following parser
        classes (in the src/parsers/ source directory):
        NonValidatingSAXParser, ValidatingSAXParser,
        NonValidatingDOMParser, ValidatingDOMParser.  The
        non-validating ones were the base classes and the validating
        ones just derived from them and turned on the validation.
        This was deemed a little bit overblown, considering the tiny
        amount of code required to turn on validation and the fact
        that it makes people use a pointer to the parser in most cases
        (if they needed to support either validating or non-validating
        versions.)</p>

        <p>The new code base just has SAXParer and DOMParser
        classes. These are capable of handling both validating and
        non-validating modes, according to the state of a flag that
        you can set on them. For instance, here is a code snippet that
        shows this in action.</p>

<source>void ParseThis(const  XMLCh* const fileToParse,
               const bool validate)
{
  //
  // Create a SAXParser. It can now just be
  // created by value on the stack if we want
  // to parse something within this scope.
  //
  SAXParser myParser;

  // Tell it whether to validate or not
  myParser.setDoValidation(validate);

  // Parse and catch exceptions...
  try
  {
    myParser.parse(fileToParse);
  }
    ...
};</source>

        <p>We feel that this is a simpler architecture, and that it makes things
        easier for you. In the above example, for instance, the parser will be
        cleaned up for you automatically upon exit since you don't have to
        allocate it anymore.</p>

    </s3>


    <s3 title="Moved Classes to src/framework">

        <p>Some of the classes previously in the src/internal/
        directory have been moved to their more correct location in
        the src/framework/ directory. These are classes used by the
        outside world and should have been framework classes to begin
        with. Also, to avoid name classes in the absence of C++ namespace
        support, some of these clashes have been renamed to make them
        more XML specific and less likely to clash. More
        classes might end up being moved to framework as well.</p>

        <p>So you might have to change a few include statements to
        find these classes in their new locations. And you might have
        to rename some of the names of the classes, if you used any of
        the ones whose names were changed.</p>

    </s3>

    <s3 title="Util directory Reorganization">

        <p>The src/util directory was becoming somewhat of a dumping
        ground of platform and compiler stuff. So we reworked that
        directory to better spread things out. The new scheme is:
        </p>

        <s4 title="util - The platform independent utility stuff">
            <ul>
                <li>MsgLoaders - Holds the msg loader implementations</li>
                <ol>
                    <li>ICU</li>
                    <li>InMemory</li>
                    <li>MsgCatalog</li>
                    <li>Win32</li>
                </ol>
                <li>Compilers - All the compiler specific files</li>
                <li>Transcoders - Holds the transcoder implementations</li>
                <ol>
                    <li>Iconv</li>
                    <li>ICU</li>
                    <li>Win32</li>
                </ol>
                <li>Platforms</li>
                <ol>
                    <li>AIX</li>
                    <li>HP-UX</li>
                    <li>Linux</li>
                    <li>Solaris</li>
                    <li>....</li>
                    <li>Win32</li>
                </ol>
            </ul>
        </s4>

        <p>This organization makes things much easier to understand.
        And it makes it easier to find which files you need and which
        are optional. Note that only per-platform files have any hard
        coded references to specific message loaders or
        transcoders. So if you don't include the ICU implementations
        of these services, you don't need to link in ICU or use any
        ICU headers. The rest of the system works only in terms of the
        abstraction APIs.</p>

    </s3>
    </s2>

</s1>
