&XercesCName; 3.1.1 is a bugfix-only release and is binary-compatible with &XercesCName; 3.1.0.
The following section is a discussion of the technical differences between &XercesCName; 3.0.1 and &XercesCName; 3.1.0.
Topics discussed are:
&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.
&XercesCName; 3.0.1 is a bugfix-only release and is binary-compatible with &XercesCName; 3.0.0.
The following section is a discussion of the technical differences between &XercesCName; 2.8.0 and &XercesCName; 3.0.0.
Topics discussed are:
&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.
A large number of public APIs have been modified. Consult individual interface documentation for details. The following list gives an overview of major changes:
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.
Furthermore, a number of DOM interfaces (DOMBuilder, DOMWriter, DOMInputSource, etc.) were replaced as part of the the final DOM Level 3 specification conformance work.
The following section is a discussion of the technical differences between &XercesCName; 2.7.0 code base and the &XercesCName; 2.8.0.
Topics discussed are:
The following section is a discussion of the technical differences between &XercesCName; 2.6.0 code base and the &XercesCName; 2.7.0.
Topics discussed are:
The following lists the public API changes between the &XercesCName; 2.6.0; and the &XercesCName; 2.7.0 releases of the parser.
The following section is a discussion of the technical differences between &XercesCName; 2.5.0 code base and the &XercesCName; 2.6.0.
Topics discussed are:
The following lists the public API changes between the &XercesCName; 2.5.0; and the &XercesCName; 2.6.0 releases of the parser.
The following section is a discussion of the technical differences between &XercesCName; 2.4.0 code base and the &XercesCName; 2.5.0.
Topics discussed are:
The following lists the public API changes between the &XercesCName; 2.4.0; and the &XercesCName; 2.5.0 releases of the parser.
The following section is a discussion of the technical differences between &XercesCName; 2.3.0 code base and the &XercesCName; 2.4.0.
Topics discussed are:
The following lists the public API changes between the &XercesCName; 2.3.0; and the &XercesCName; 2.4.0 releases of the parser.
The following section is a discussion of the technical differences between &XercesCName; 2.2.0 code base and the &XercesCName; 2.3.0.
Topics discussed are:
The following lists the public API changes between the &XercesCName; 2.2.0; and the &XercesCName; 2.3.0 releases of the parser.
The following section is a discussion of the technical differences between &XercesCName; 2.1.0 code base and the &XercesCName; 2.2.0.
Topics discussed are:
&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.
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.
See the Programming Guide
The following lists the public API changes between the &XercesCName; 2.1.0; and the &XercesCName; 2.2.0 releases of the parser.
The following section is a discussion of the technical differences between &XercesCName; 2.0.0 code base and the &XercesCName; 2.1.0.
Topics discussed are:
The following lists the public API changes between the &XercesCName; 2.0.0; and the &XercesCName; 2.1.0 releases of the parser.
The following section is a discussion of the technical differences between &XercesCName; 1.7.0 code base and the &XercesCName; 2.0.0.
Topics discussed are:
The &XercesCName; UNIX Library now follows the Unix Shared Library Naming Convention (libname.so.soname).
1. The old Java-like DOM is now deprecated, and all the associated files, including the headers
and DOMParser files are moved to src/xercesc/dom/deprecated
. Users of the old
Java-like DOM are required to change all their #include lines to pick up the headers.
For example
should now change to
2. The Experimental IDOM is now renamed, and becomes the Apache Recommended DOM C++ Binding. The following changes are made:
src/xercesc/dom
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
should now change to
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:
should now use the features cacheGrammarFromParse and useCachedGrammarFromParse:
Note there are a number of differences between "Reuse Grammar" and "Grammar Caching"
The following lists the public API changes between the &XercesCName; 1.7.0; and the &XercesCName; 2.0.0 releases of the parser.
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.
The following lists the public API changes between the &XercesCName; 1.7.0 and the &XercesCName; 1.7.0 releases of the parser.
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.
The following lists the public API changes between the &XercesCName; 1.5.2 and the &XercesCName; 1.6.0 releases of the parser.
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.
Schema subset support and an experimental IDOM are available in this release.
See
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.
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.
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:
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.
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.
parsers/[Non]Validating[DOM/SAX]parser.hpp
[DOM/SAX]Parser.hpp
. Validation is now a
property which may be set before invoking the
parse
. Now, the
setDoValidation()
method controls the
validation processing.framework/XMLDocumentTypeHandler.hpp
been replaced with
validators/DTD/DocTypeHandler.hpp
.XMLDocumentHandler
,
XMLErrorReporter
or
DocTypeHandler
interfaces.[Non]Validating[DOM/SAX]Parser::docComment
[Non]Validating[DOM/SAX]Parser::doctypePI
[Non]ValidatingSAXParser::elementDecl
[Non]ValidatingSAXParser::endAttList
[Non]ValidatingSAXParser::entityDecl
[Non]ValidatingSAXParser::notationDecl
[Non]ValidatingSAXParser::startAttList
[Non]ValidatingSAXParser::TextDecl
[Non]ValidatingSAXParser::docComment
[Non]ValidatingSAXParser::docPI
[Non]Validating[DOM/SAX]Parser::endElement
[Non]Validating[DOM/SAX]Parser::startElement
[Non]Validating[DOM/SAX]Parser::XMLDecl
[Non]Validating[DOM/SAX]Parser::error
protected
in 2.3.x to
private
(with public setters and getters, as
appropriate).[Non]ValidatingDOMParser::fDocument
[Non]ValidatingDOMParser::fCurrentParent
[Non]ValidatingDOMParser::fCurrentNode
[Non]ValidatingDOMParser::fNodeStack
#include
statements.MemBufInputSource.hpp
StdInInputSource.hpp
URLInputSource.hpp
internal
to separate
validators/DTD
directory.internal/ErrorCodes.hpp
are now split up into
the following files:framework/XMLErrorCodes.hpp
- Core XML errorsframework/XMLValidityCodes.hpp
- DTD validity errorsutil/XMLExceptMsgs.hpp
- C++ specific exception codes.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.
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.
The new samples are:
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.)
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.
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.
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.
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.
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:
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.