[xsd-announcements] XSD 3.3.0 beta1 released

Boris Kolpackov boris at codesynthesis.com
Wed Feb 10 03:27:35 EST 2010


We have released the first and hopefully the only beta for XSD 3.3.0.
The final release is planned for the middle of March. Besides the new
major features described below, this release includes a large number 
of small improvements, bug fixes, and optimizations. In particular,
the compiler is now much faster, especially on large and complex 
schemas, and generates smaller and simpler code.

The NEWS file entries for 3.3.0.b1 are as follows:

  * New option, --char-encoding, allows to specify the character encoding
    that should be used in the generated code. Valid values for the 'char'
    character type are 'utf8' (default), 'iso8859-1' (new), 'lcp' (Xerces-C++
    local code page), and 'custom' (provides support for custom encodings). 
    Note that if you use a non-default character encoding and include some 
    libxsd headers (e.g., xsd/cxx/xml/string.hxx) directly, then you will 
    need to fist include the correct xsd/cxx/xml/char-<enc>.hxx header, 
    where <enc> is iso8859-1, lcp, etc. This mechanism replaces the 
    XSD_USE_LCP macro.

    For the wchar_t character type the only valid value for this option is 
    'auto' and the encoding is automatically selected between UTF-16 and 
    UTF-32, depending on the wchar_t type size.

  * When the XSD compiler is built with Xerces-C++ 3.1.0 or later, the
    handling  of multiple imports for the same namespace is enabled. Before,
    all subsequent imports for a namespace were ignored which caused errors
    in some schemas. Note that if your application has XML Schema validation
    enabled, then you will also need to build it with Xerces-C++ 3.1.0 or
    later to take advantage of this feature.

  * Automatic mapping for the urn-style XML namespaces. The last component
    in the urn name is used to derive the C++ namespace name.

  * Warning id's have changed to start with a letter identifying the
    component issuing the warning. F - compiler frontend, D - compiler
    driver, P - C++/Parser mapping, T - C++/Tree mapping.

  * Strings used to match regular expressions supplied with the
    --namespace-regex and --anonymous-regex options now include the file 
    component for the schema being compiled.


  * New option, --generate-element-type, triggers the generation of types
    instead of parsing/serialization functions for root elements. This
    is primarily useful to distinguish object models with the same root
    type but with different root elements. For more information, refer
    to the messaging example and Section 2.9.1, "Element Types" in the
    C++/Tree Mapping User Manual. To support the customization of the 
    element type naming the --element-type-regex option has been added.
    See the NAMING CONVENTION section in the compiler command line manual
    (man pages) for details.

  * New option, --generate-element-map, triggers the generation of a root
    element map. The element map allows uniform parsing and serialization
    of multiple root elements. This option can only be used together with
    --generate-element-type. For more information, refer to the messaging
    example and Section 2.9.2, "Element Map" in the C++/Tree Mapping
    User Manual.

  * Prior to this version, if the --generate-polymorphic option is 
    specified the compiler treats all types as potentially polymorphic.
    Now by default only type hierarchies used in substitution groups and 
    those explicitly declared polymorphic with the new --polymorphic-type
    option are treated as polymorphic. This results in smaller and faster
    generated code. If you would like to continue using the old behavior,
    you will need to specify --polymorphic-type-all. For more information,
    on this change see Section 2.11, "Mapping for xsi:type and Substitution
    Groups" in the C++/Tree Mapping User Manual.

  * New option, --generate-detach, triggers the generation of detach 
    functions for required elements and attributes. For optional and 
    sequence cardinalities the detach functions are now provided by the 
    respective containers even without this option. These functions, for 
    example, allow one to move sub-trees in the object model either within
    the same tree or between different trees without copying. For more 
    information, refer to Section 2.8 "Mapping for Local Elements and 
    Attributes" in the C++/Tree Mapping User Manual.

  * New option, --export-xml-schema, causes the compiler to export/import
    types in the XML Schema namespace using the export symbol provided
    with the --export-symbol option.

  * New example, embedded, shows how to embed the binary representation of
    the schema grammar into an application and then use it to parse and 
    validate XML documents.

  * New example, compression, shows how to compress an XML document during 
    serialization and decompress it during parsing using the zlib library.

  * New example, custom/mixed, shows how to use type customization to parse 
    and serialize mixed content.

  * The streaming example has been extended to show how to perform stream-
    oriented, partially in-memory XML processing using the C++/Tree mapping.
    With the partially in-memory parsing and serialization only a part of
    the object model is in memory at any given time. With this approach one
    can process parts of the document as they become available as well as 
    handle documents that are too large to fit into memory.

  * New default/fixed value initialization code. Now the default/fixed values
    are parsed by the XSD compiler at compile time instead of the standard
    parsing code at runtime. This will allow the compilation of schemas that 
    use the default/fixed values without support for XML parsing 
    (--suppress-parsing option).

  * Empty XML Schema enumeration values are now mapped to the 'empty' C++ 
    enumerator name instead of 'cxx'.

This release has been tested with the recently published Xerces-C++ 3.1.0 
and all the precompiled binary distributions have been  built with this 
version. The only known issue with this release and Xerces-C++ 3.1.0 is 
a bug in the DOM importing code in Xerces-C++ that manifests itself in 
the custom/mixed example mentioned above. This bug will be fixed in the
Xerces-C++ 3.1.1 bugfix release and a patch is available for 3.1.0:


Precompiled binary distributions for 3.3.0.b1 are available from the 
product's download page. Let me know if you need a binary for any 
other platform:


Source code for this release is available from the project's web page:


SHA1 checksums for the files:

e2ece57780b575dd28832f2e70dd14a98f0dd9e7  xsd-3.3.0.b1.tar.bz2
064279491ed6e5c49660c21a0c38d735c7d19cdf  xsd-3.3.0.b1+dep.tar.bz2
69726a0a10618b07982ed26f3517d9cb66a8939d  xsd-3.3.0.b1-i686-windows.zip
0b1cbbe106da3b089c164bb28055d615b1490481  xsd-3.3.0.b1-i686-linux-gnu.tar.bz2
a09f3a71dffed9b890932ef429bebd44cee354b9  xsd-3.3.0.b1-x86_64-linux-gnu.tar.bz2
4645d909c3c6f1fcf3bef629767e4d2aa5dbb7b3  xsd-3.3.0.b1-i686-macosx.tar.bz2
0084352a1d7191ecae0ef10375c5a38c46c76c50  xsd-3.3.0.b1-sparc-solaris.tar.gz


More information about the xsd-announcements mailing list