[xsd-users] XSD 3.2.0 released

Boris Kolpackov boris at codesynthesis.com
Tue Sep 30 09:38:49 EDT 2008


We have released XSD 3.2.0. The NEWS file entries for this release
are as follows:

  * New option, --disable-warning, disables printing of a warning with
    the specified id. Specifying 'all' for the warning id disables all

  * New options, --export-maps and --import-maps, provide support for 
    splitting a polymorphic type hierarchy across several Win32 DLLs.
    See the compiler command line manual (man pages) for details.


  * During serialization the generated code automatically assigns
    generic prefixes (p1, p2, etc) to XML namespaces used in the
    vocabulary and for which no custom prefix-namespace mapping
    was provided via the xml_schema::namespace_infomap argument.
    The xml_schema::namespace_infomap argument in the serialization
    functions is now default-initialized to an empty map. The
    xml_schema::no_namespace_mapping and xml_schema::xsi_already_in_use
    exceptions have been removed.

  * New example, performance, measures the performance of parsing and
    serialization. This example also shows how to structure your code
    to achieve the maximum performance for these two operations.

  * New example, xpath, shows how to use the C++/Tree mapping together
    with XPath.

  * New options, --one-accessor-regex, --opt-accessor-regex,
    --seq-accessor-regex, --one-modifier-regex, --opt-modifier-regex,
    and --seq-modifier-regex, allow specification of transformations
    for accessor and modifier function names for elements and attributes
    with specific cardinalities. For more information see the NAMING
    CONVENTION section in the compiler command line manual (man pages).

  * Support for comparison (--generate-comparison) and printing 
    (--generate-ostream) of polymorphic object models.

  * New serialization flag, xml_schema::flags::dont_pretty_print,
    disables extra spaces and new lines that make the resulting XML
    slightly bigger but easier to read.

  * New example, custom/double, shows how to customize parsing and 
    serialization code for the xsd:double XML Schema built-in type.
    It can be used as a guide on how to customize built-in XML Schema
    types that are mapped to fundamental C++ types.

  * Support for fractionDigits and totalDigits facets in serialization
    of types derived from xsd:decimal.

  * New set of compile-time macros that control how the xsd:float, 
    xsd:double, and xsd:decimal types are serialized. The following
    macros control the format:


    The following macros control the precision:


    If the *_PRECISION_MAX macro is defined then the maximum number of
    potentially significant decimal digits that the type can represent
    is used. Otherwise, if the *_PRECISION macro is defined then its
    value is used. By default the precision is set to the number of
    decimal digits that the type can represent without change. For
    more information on these options, refer to the following paper:


    The old macro, XSD_FP_ALL_DIGITS, that was equivalent to defining
    all three *_PRECISION_MAX macros has been removed.

    An alternative to using these macros is to customize the floating
    point type as shown in the custom/double example.

  * An additional constructor is generated in situations where a type
    contains one or more required element of complex type (that is,
    it itself contains elements or attributes). In this constructor,
    initializers for such elements are passed as std::auto_ptr and the
    newly created instance is directly initialized with and assumes
    ownership of the pointed to objects. This constructor is a logical
    addition to the non-copying modifiers that were introduced in the
    previous version.

  * Extra conversion operators in the fundamental_base class template
    which is used to emulate inheritance from fundamental types are now
    disabled by default since they cause problems on several compilers.
    To enable them compile your code with the XSD_TREE_EXTRA_FUND_CONV
    macro defined.


  * New options, --generate-xml-schema and --extern-xml-schema, trigger
    generation of the mapping for the XML Schema namespace to a separate
    header file and inclusion of that header into other generated header
    files instead of generating the necessary declarations inline,
    respectively. See the compiler command line manual (man pages) for

  * New example, performance, measures the performance of XML parsing.
    This example also shows how to structure your code to achieve the
    maximum performance for this operation.

  * Type map files can now include comments. A comment starts with #
    and ends with a new line or end of file. To specify a name that
    contains # enclose it in "".

  * In type map files the optional argument type now defaults to the
    return type if the return type ends with * or & (that is, it is
    a pointer or a reference) and 'const return type&' otherwise.

  * The interface for polymorphic parsing has been simplified. Calling the
    *_parser() functions multiple times to specify several parsers is no 
    longer supported. Instead you need to pass the xml_schema::parser_map
    object which contains the parsers. For more information refer to
    Section 5.4, "Support for Polymorphism" in the C++/Parser Mapping
    Getting Started Guide.

  * The use of virtual inheritance has been reduced which results in a
    much smaller object code size (more than factor of 2 on some tests)
    and faster C++ compilation with less RAM used.

  * The low-level Expat-specific parsing API (parse_begin() and parse_end())
    has been extended to provide XML and XML Schema error translation to
    exceptions or error handler calls. See Section 7.2, "Expat Document
    Parser" in the C++/Parser Mapping Getting Started Guide for more

Furthermore, this version of XSD has been extensively tested with the 
just released Xerces-C++ 3.0.0 and all precompiled binary distributions
are build with this version of Xerces-C++. Due to static library name
changes between Xerces-C++ 2.8.0 and 3.0.0, the Visual Studio projects
and solutions have been split. Solutions in the form tree.sln link to
Xerces-C++ 3.0.0 while solutions in the form tree-xerces2.sln link to

Thanks to the following individuals for reporting bugs as well as suggesting
fixes and improvements:

Gennady Khokhorin           <gok at aerometric-ak.com>
Uri Karagila                <uri at hyperroll.com>
Gordon Kramer               <gkr at as-guides.com>
Ryan Prather                <Ryan.Prather at peterson.af.mil>
Shivakumar Balasubramanyam  <sbalasub at qualcomm.com>
Timothy K Lenz              <timothy.k.lenz at lmco.com>
Nick John                   <Nick.John at ActivIdentity.com>
Samuel Toulouse             <samlepirate at samlepirate.net>
David Moss                  <david.r.moss at selex-comms.com>
Roger Evans                 <roger at autodata.no>
Joe Mcduffey                <jdmcduf at nsa.gov>
Mario Lang                  <mlang at delysid.org>
Manav Rathi                 <manav.rathi at incainformatics.com>
Matthew Hutchins            <Matthew.Hutchins at csiro.au>
Bruno Marotta               <bruno.marotta at fortis.com>
Ray Lischner                <rlischner at proteus-technologies.com>
Thierry Seegers             <Thierry.Seegers at am.sony.com>
Raymond Rizzuto             <Raymond.Rizzuto at sig.com>
Aaron Bray                  <abray at ara.com>
Petteri Tolonen             <petteri.tolonen at logica.com>
Forstner Michael            <Michael.Forstner at cpg.de>
Jeroen N. Witmond           <jnw at xs4all.nl>
Alan Pettitt                <ap at kaon.co.uk>
Rance Kirtley               <rakirtley at bellsouth.net>
Michael Coulman             <michael.coulman at mac.com>
Mark Stevens                <Mark.Stevens at dtn.com>
Eric Niebler                <eric at boostpro.com>

Precompiled binary distributions are available from the product's
download page:


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


SHA1 checksums for the files:

cbf104bdb158d68416d1e7184930f2f06e0df151  xsd-3.2.0.tar.bz2
4b950de34b61cd78c0cd3fc2b01cfa4066b75996  xsd-3.2.0-powerpc-aix.tar.gz
7e4cb3bc0a3ee6ec3d2bc5798a7b412c3883d6e4  xsd_3.2.0-1_i386.deb
ab5cc6dae39a2dc26085354dd53aa62ff68b437e  xsd-3.2.0-1.i686.rpm
bd6b217012a6cda07ae0f7597ee4f23470dba06a  xsd-3.2.0-i686-linux-gnu.tar.bz2
7999fc878055bcf208cc0ab674bb8de694dbb760  xsd_3.2.0-1_amd64.deb
afce842c1ec62b8d423cebfb2b8f7c104399c9fa  xsd-3.2.0-1.x86_64.rpm
d044e0af9db2335215b3f69592623055b4dca545  xsd-3.2.0-x86_64-linux-gnu.tar.bz2
d0b3f115f4a539c523482ef53a1398df68595757  xsd-3.2.0-powerpc-linux-gnu.tar.bz2
43c2143d4b198a0b5723ee4d8fc1c7b03e0854cb  xsd-3.2.0-ia64-linux-gnu.tar.bz2
ba0054f4cb64206e851a6304966725adf0d801fb  xsd-3.2.0-hppa-hpux.tar.gz
f2888f8a80530fa69945206bc9da2aa9b4900259  xsd-3.2.0-powerpc-macosx.tar.bz2
0893ac4aca5eb0059e20de8557135a37f3b26337  xsd-3.2.0-i686-macosx.tar.bz2
99e46fe617079ca68bfe586e3a9888741a612b21  xsd-3.2.0-sparc-solaris.tar.gz
9d54011989cbf89971c8549a138df085d09a33c4  xsd-3.2.0-i686-solaris.tar.gz
ac74860b1f69c86b764e6a015b0cce1ebf05dc4f  xsd-3.2.0-i686-windows.zip
b56974dcd880e3c5c246b23a9333f126966f5d03  xsd-3.2.msi


More information about the xsd-users mailing list