Provided by: xsdcxx_3.3.0.1-1.4_amd64 bug

NAME

       xsdcxx - W3C XML Schema to C++ Compiler

SYNOPSIS

       xsdcxx command [ options ] file [ file ...]
       xsdcxx help [ command ]
       xsdcxx version

DESCRIPTION

       xsdcxx  generates  vocabulary-specific,  statically-typed  C++  mapping  from W3C XML Schema definitions.
       Particular mapping to produce is selected by a command.  Each mapping has a  number  of  mapping-specific
       options that should appear, if any, after the command.  Input files should be W3C XML Schema definitions.
       The exact set of the generated files depends on the selected mapping and options.

COMMANDS

       cxx-tree
              Generate  the  C++/Tree  mapping. For each input file in the form name.xsd the following C++ files
              are generated: name.hxx (header file), name.ixx (inline file, generated only  if  the  --generate-
              inline  option  is specified), name.cxx (source file), and name-fwd.hxx (forward declaration file,
              generated only if the --generate-forward option is specified).

       cxx-parser
              Generate the C++/Parser mapping. For each input file in the form name.xsd the following C++  files
              are  generated:  name-pskel.hxx  (parser  skeleton  header  file), name-pskel.ixx (parser skeleton
              inline file, generated only if the --generate-inline  option  is  specified),  and  name-pskel.cxx
              (parser  skeleton  source  file).  If  the --generate-noop-impl or --generate-print-impl option is
              specified, the following additional sample  implementation  files  are  generated:  name-pimpl.hxx
              (parser implementation header file) and name-pimpl.cxx (parser implementation source file). If the
              --generate-test-driver  option  is  specified,  the additional name-driver.cxx test driver file is
              generated.

       help   Print usage information and exit. Use

                 xsdcxx help command

              for command-specific help.

       version
              Print version and exit.

OPTIONS

       Command-specific options, if any, should appear after the corresponding command.

   common options
       --char-type type
              Generate code using the provided character type instead of the default  char.   Valid  values  are
              char and wchar_t.

       --char-encoding enc
              Specify  the  character  encoding that should be used in the generated code.  Valid values for the
              char character type are utf8 (default), iso8859-1,lcp (Xerces-C++ local code  page),  and  custom.
              If you pass custom as the value then you will need to include the transcoder implementation header
              for your encoding at the beginning of the generated header files (see the --hxx-prologue option).

              For  the  wchar_t  character  type  the only valid value is auto and the encoding is automatically
              selected between UTF-16 and UTF-32/UCS-4, depending on the wchar_t type size.

       --output-dir dir
              Write generated files to dir instead of the current directory.

       --namespace-map xns=cns
              Map XML Schema namespace xns to C++ namespace cns.  Repeat this option to specify mapping for more
              than one XML Schema namespace.  For example, the following option:

              --namespace-map http://example.com/foo/bar=foo::bar

              will map the http://example.com/foo/bar XML Schema namespace to the foo::bar C++ namespace.

       --namespace-regex regex
              Add regex to the list of regular expressions used to translate XML Schema namespace names  to  C++
              namespace  names.  regex is a perl-like regular expression in the form /pattern/replacement/.  Any
              character can be used as a delimiter instead of /.  Escaping of the delimiter character in pattern
              or replacement is not supported.

              All the regular expressions are pushed into a stack with the last specified expression  considered
              first.  The  first match that succeeds is used. Regular expressions are applied to a string in the
              form

              filename namespace

              For example, if you have file hello.xsd with namespace http://example.com/hello and you run xsdcxx
              on this file, then the string in question will be:

              hello.xsd. http://example.com/hello

              For the built-in XML Schema namespace the string is:

              XMLSchema.xsd http://www.w3.org/2001/XMLSchema

              The following three steps are performed for each regular expression until the match is found:

                 1. The expression is applied and if the result is empty the next expression is considered.

                 2. All / are replaced with ::.

                 3. The result is verified to be a  valid  C++  scope  name  (e.g.,  foo::bar).   If  this  test
                    succeeds, the result is used as a C++ namespace name.

              As   an   example,   the   following   expression   maps   XML   Schema  namespaces  in  the  form
              http://example.com/foo/bar to C++ namespaces in the form foo::bar:

              %.* http://example.com/(.+)%$1%

              See also the REGEX AND SHELL QUOTING section below.

       --namespace-regex-trace
              Trace the process of applying regular expressions specified with the --namespace-regex option. Use
              this option to find out why your regular expressions don't do what you expected them to do.

       --reserved-name name[=rep]
              Add name to the list of names that should not be used as identifiers. The name can  optionally  be
              followed  by  =  and  the  replacement  name that should be used instead. All the C++ keywords are
              already in this list.

       --include-with-brackets
              Use angle brackets (<>) instead of quotes ("") in generated #include directives.

       --include-prefix prefix
              Add prefix to generated #include directive paths.

              For example, if you had the following import element in your schema

              <import namespace="..." schemaLocation="base.xsd"/>

              and compiled this fragment with --include-prefix schemas/,  then  the  include  directive  in  the
              generated code would be:

              #include schemas/base.hxx

       --include-regex regex
              Add regex to the list of regular expressions used to transform #include directive paths.  regex is
              a  perl-like regular expression in the form /pattern/replacement/.  Any character can be used as a
              delimiter instead of /.  Escaping of the delimiter character in  pattern  or  replacement  is  not
              supported.

              All  the regular expressions are pushed into a stack with the last specified expression considered
              first. The first match that succeeds is used.

              As an example, the following expression transforms paths in the form schemas/foo/bar to  paths  in
              the form generated/foo/bar:

              %schemas/(.+)%generated/$1%

              See also the REGEX AND SHELL QUOTING section below.

       --include-regex-trace
              Trace  the  process of applying regular expressions specified with the --include-regex option. Use
              this option to find out why your regular expressions don't do what you expected them to do.

       --guard-prefix prefix
              Add prefix to generated header inclusion guards. The prefix  is  transformed  to  upper  case  and
              characters  that  are  illegal in a preprocessor macro name are replaced with underscores. If this
              option is not specified then the directory part of the input schema file is used as a prefix.

       --hxx-suffix suffix
              Use the provided suffix instead of the default .hxx to construct the name of the header file. Note
              that this suffix is also used to construct names for included/imported schemas.

       --ixx-suffix suffix
              Use the provided suffix instead of the default .ixx to construct the name of the inline file.

       --cxx-suffix suffix
              Use the provided suffix instead of the default .cxx to construct the name of the source file.

       --hxx-regex regex
              Use the provided expression to construct the name of  the  header  file.   regex  is  a  perl-like
              regular  expression  in the form /pattern/replacement/.  Note that this expression is also used to
              construct names for included/imported schemas. See also the REGEX AND SHELL QUOTING section below.

       --ixx-regex regex
              Use the provided expression to construct the name of  the  inline  file.   regex  is  a  perl-like
              regular  expression  in  the  form  /pattern/replacement/.   See  also the REGEX AND SHELL QUOTING
              section below.

       --cxx-regex regex
              Use the provided expression to construct the name of  the  source  file.   regex  is  a  perl-like
              regular  expression  in  the  form  /pattern/replacement/.   See  also the REGEX AND SHELL QUOTING
              section below.

       --hxx-prologue text
              Insert text at the beginning of the header file.

       --ixx-prologue text
              Insert text at the beginning of the inline file.

       --cxx-prologue text
              Insert text at the beginning of the source file.

       --prologue text
              Insert text at the beginning of each generated file for which there is no file-specific prologue.

       --hxx-epilogue text
              Insert text at the end of the header file.

       --ixx-epilogue text
              Insert text at the end of the inline file.

       --cxx-epilogue text
              Insert text at the end of the source file.

       --epilogue text
              Insert text at the end of each generated file for which there is no file-specific epilogue.

       --hxx-prologue-file file
              Insert the content of the file at the beginning of the header file.

       --ixx-prologue-file file
              Insert the content of the file at the beginning of the inline file.

       --cxx-prologue-file file
              Insert the content of the file at the beginning of the source file.

       --prologue-file file
              Insert the content of the file at the beginning of each generated file for which there is no file-
              specific prologue file.

       --hxx-epilogue-file file
              Insert the content of the file at the end of the header file.

       --ixx-epilogue-file file
              Insert the content of the file at the end of the inline file.

       --cxx-epilogue-file file
              Insert the content of the file at the end of the source file.

       --epilogue-file file
              Insert the content of the file at the end of each generated file  for  which  there  is  no  file-
              specific epilogue file.

       --custom-literals file
              Load custom XML string to C++ literal mappings from file.  This mechanism can be useful if you are
              using  a  custom  character  encoding  and  some  of  the  strings  in  your  schemas, for example
              element/attribute names or enumeration values, contain non-ASCII characters. In this case you will
              need to provide a custom mapping to C++ literals for such strings. The  format  of  this  file  is
              specified  in  the  custom-literals.xsd  XML  Schema  file  that can be found in the documentation
              directory.

       --export-symbol symbol
              Insert    symbol    in    places    where    DLL    export/import     control     statements     (
              __declspec(dllexport/dllimport)) are necessary.

       --export-xml-schema
              Export/import  types  in  the  XML  Schema  namespace  using  the  export symbol provided with the
              --export-symbol option. The XSD_NO_EXPORT  macro  can  be  used  to  omit  this  code  during  C++
              compilation,  which may be useful if you would like to use the same generated code across multiple
              platforms.

       --export-maps
              Export polymorphism support maps from a Win32 DLL into which this generated code is  linked.  This
              is  necessary  when your type hierarchy is split across several DLLs since otherwise each DLL will
              have its own set of maps. In this situation the generated code for the  DLL  which  contains  base
              types  and/or  substitution group heads should be compiled with this option and the generated code
              for all other DLLs should be compiled with --import-maps.  This option is only valid together with
              --generate-polymorphic.  The XSD_NO_EXPORT macro  can  be  used  to  omit  this  code  during  C++
              compilation,  which may be useful if you would like to use the same generated code across multiple
              platforms.

       --import-maps
              Import polymorphism support maps to a Win32 DLL or executable into which this  generated  code  is
              linked. See the --export-maps option documentation for details. This option is only valid together
              with  --generate-polymorphic.   The  XSD_NO_EXPORT  macro can be used to omit this code during C++
              compilation, which may be useful if you would like to use the same generated code across  multiple
              platforms.

       --disable-warning warn
              Disable  printing  warning with id warn.  If all is specified for the warning id then all warnings
              are disabled.

       --show-sloc
              Show the number of generated physical source lines of code (SLOC).

       --sloc-limit num
              Check that the number of generated physical source lines of code (SLOC) does not exceed num.

       --options-file file
              Read additional options from file.  Each option  should  appear  on  a  separate  line  optionally
              followed  by  space  and  an  argument.  Empty  lines  and  lines starting with # are ignored. The
              semantics of providing options in a file is equivalent to providing the same set of options in the
              same order in the command line at the point where the --options-file option  is  specified  except
              that  shell  escaping  and  quoting  is  not required. Repeat this option to specify more than one
              options files.

       --proprietary-license
              Indicate that the generated code is licensed under a proprietary license instead of the GPL.

       --preserve-anonymous
              Preserve anonymous types. By default anonymous types are automatically named  with  names  derived
              from  the enclosing elements/attributes. Because mappings implemented by this compiler require all
              types to be named, this option is only useful if you want to make sure  your  schemas  don't  have
              anonymous types.

       --show-anonymous
              Show  elements  and  attributes that are of anonymous types. This option only makes sense together
              with the --preserve-anonymous option.

       --anonymous-regex regex
              Add regex to the list of regular expressions used to derive names for  anonymous  types  from  the
              enclosing   attributes/elements.    regex   is   a   perl-like  regular  expression  in  the  form
              /pattern/replacement/.  Any character can be used as a delimiter instead of /.   Escaping  of  the
              delimiter character in pattern or replacement is not supported.

              All  the regular expressions are pushed into a stack with the last specified expression considered
              first. The first match that succeeds is used. Regular expressions are applied to a string  in  the
              form

              filename namespace xpath

              For instance:

              hello.xsd http://example.com/hello element

              hello.xsd http://example.com/hello type/element

              As  an  example,  the following expression makes all the derived names start with capital letters.
              This could be useful when your naming  convention  requires  type  names  to  start  with  capital
              letters:

              %.* .* (.+/)*(.+)%\u$2%

              See also the REGEX AND SHELL QUOTING section below.

       --anonymous-regex-trace
              Trace the process of applying regular expressions specified with the --anonymous-regex option. Use
              this option to find out why your regular expressions don't do what you expected them to do.

       --location-map ol=nl
              Map the original schema location ol that is specified in the XML Schema include or import elements
              to  new schema location nl.  Repeat this option to map more than one schema location. For example,
              the following option maps the http://example.com/foo.xsd URL to the foo.xsd local file.

              --location-map http://example.com/foo.xsd=foo.xsd

       --location-regex regex
              Add regex to the list of regular expressions used to map schema locations that  are  specified  in
              the  XML  Schema  include or import elements.  regex is a perl-like regular expression in the form
              /pattern/replacement/.  Any character can be used as a delimiter instead of /.   Escaping  of  the
              delimiter  character  in  pattern or replacement is not supported. All the regular expressions are
              pushed into a stack with the last specified expression considered  first.  The  first  match  that
              succeeds is used.

              For    example,    the    following    expression    maps    URL    locations    in    the    form
              http://example.com/foo/bar.xsd to local files in the form bar.xsd:

              %http://.+/(.+)%$1%

              See also the REGEX AND SHELL QUOTING section below.

       --location-regex-trace
              Trace the process of applying regular expressions specified with the --location-regex option.  Use
              this option to find out why your regular expressions don't do what you expected them to do.

       --file-per-type
              Generate  a separate set of C++ files for each type defined in XML Schema.  Note that in this mode
              you only need to compile the root schema(s) and the code will be generated for  all  included  and
              imported  schemas.  This  compilation mode is primarily useful when some of your schemas cannot be
              compiled separately or have cyclic dependencies which  involve  type  inheritance.  Other  options
              related to this mode are: --type-file-regex, --schema-file-regex, and --file-list.

       --type-file-regex regex
              Add  regex  to the list of regular expressions used to translate type names to file names when the
              --file-per-type option is specified.   regex  is  a  perl-like  regular  expression  in  the  form
              /pattern/replacement/.   Any  character  can be used as a delimiter instead of /.  Escaping of the
              delimiter character in pattern or replacement is not supported. All the  regular  expressions  are
              pushed  into  a  stack  with  the last specified expression considered first. The first match that
              succeeds is used. Regular expressions are applied to a string in the form

              namespace type-name

              For example, the following expression maps type foo that is defined in the  http://example.com/bar
              namespace to file name bar-foo:

              %http://example.com/(.+) (.+)%$1-$2%

              See also the REGEX AND SHELL QUOTING section below.

       --type-file-regex-trace
              Trace the process of applying regular expressions specified with the --type-file-regex option. Use
              this option to find out why your regular expressions don't do what you expected them to do.

       --schema-file-regex regex
              Add  regex to the list of regular expressions used to translate schema file names when the --file-
              per-type  option  is  specified.   regex  is  a  perl-like  regular   expression   in   the   form
              /pattern/replacement/.   Any  character  can be used as a delimiter instead of /.  Escaping of the
              delimiter character in pattern or replacement is not supported. All the  regular  expressions  are
              pushed  into  a  stack  with  the last specified expression considered first. The first match that
              succeeds is used. Regular expressions are applied to the absolute filesystem path of a schema file
              and the result, including the directory part, if any, is used to  derive  the  #include  directive
              paths  as  well  as  the  generated  C++ file paths. This option, along with --type-file-regex are
              primarily used to place the generated files into subdirectories or to resolve file name conflicts.

              For example, the following expression maps schema files in  the  foo/1.0.0/  subdirectory  to  the
              files in the foo/ subdirectory. As a result, the #include directive paths for such schemas will be
              in the foo/schema.hxx form and the generated C++ files will be placed into the foo/ subdirectory:

              %.*/foo/1.0.0/(.+)%foo/$1%

              See also the REGEX AND SHELL QUOTING section below.

       --schema-file-regex-trace
              Trace  the  process of applying regular expressions specified with the --schema-file-regex option.
              Use this option to find out why your regular expressions don't do what you expected them to do.

       --file-list file
              Write a list of generated C++ files to file.  This option is primarily useful in the file-per-type
              compilation mode (--file-per-type) to create a list of generated C++  files,  for  example,  as  a
              makefile fragment.

       --file-list-prologue text
              Insert  text  at  the  beginning  of  the  file  list. As a convenience, all occurrences of the \n
              character sequence in text are replaced with new lines. This option can, for example, be  used  to
              assign the generated file list to a makefile variable.

       --file-list-epilogue text
              Insert  text  at  the  end of the file list. As a convenience, all occurrences of the \n character
              sequence in text are replaced with new lines.

       --file-list-delim text
              Delimit file names written to the file list with text instead of new lines. As a convenience,  all
              occurrences of the \n character sequence in text are replaced with new lines.

   cxx-tree command options
       --generate-polymorphic
              Generate  polymorphism-aware code. Specify this option if you use substitution groups or xsi:type.
              Use the --polymorphic-type or --polymorphic-type-all option to specify which type hierarchies  are
              polymorphic.

       --polymorphic-type type
              Indicate that type is a root of a polymorphic type hierarchy. The compiler can often automatically
              determine  which  types are polymorphic based on the substitution group declarations. However, you
              may need to use this option if you are not using substitution groups or if substitution groups are
              defined in another schema. You need to specify this option when compiling every schema  file  that
              references  type.   The  type argument is an XML Schema type name that can be optionally qualified
              with a namespace in the namespace#name form.

       --polymorphic-type-all
              Indicate that all types should be treated as polymorphic.

       --generate-serialization
              Generate serialization functions. Serialization functions convert the object model back to XML.

       --generate-inline
              Generate simple functions inline. This option triggers creation of the inline file.

       --generate-ostream
              Generate ostream insertion operators (operator<<) for generated types. This allows to easily print
              a fragment or the whole object model for debugging or logging.

       --generate-doxygen
              Generate documentation comments suitable for  extraction  by  the  Doxygen  documentation  system.
              Documentation from annotations is added to the comments if present in the schema.

       --generate-comparison
              Generate  comparison  operators  (operator==  and  operator!=)  for  complex  types. Comparison is
              performed memberwise.

       --generate-default-ctor
              Generate default constructors even for types that have required members.  Required members  of  an
              instance  constructed  using  such a constructor are not initialized and accessing them results in
              undefined behavior.

       --generate-from-base-ctor
              Generate constructors that expect an instance of a base type followed by all required members.

       --generate-detach
              Generate detach functions for required elements and attributes (detach functions for optional  and
              sequence  cardinalities  are provided by the respective containers). These functions, for example,
              allow you to move sub-trees in the object model either within the same tree or  between  different
              trees.

       --generate-wildcard
              Generate  accessors  and  modifiers  as  well  as  parsing  and  serialization code for XML Schema
              wildcards (any and anyAttribute).  XML content matched by wildcards is presented as DOM fragments.
              Note that you need to initialize the Xerces-C++ runtime if you are using this option.

       --generate-insertion os
              Generate data representation stream insertion operators for the os output stream type. Repeat this
              option to specify more than one stream type. The ACE CDR stream (ACE_OutputCDR) and  RPC  XDR  are
              recognized  by the compiler and the necessary #include directives are automatically generated. For
              custom stream types use the --hxx-prologue* options to provide the necessary declarations.

       --generate-extraction is
              Generate data representation stream extraction constructors for the is input stream  type.  Repeat
              this  option  to  specify more than one stream type. The ACE CDR stream (ACE_InputCDR) and RPC XDR
              are recognized by the compiler and the necessary #include directives are automatically  generated.
              For custom stream types use the --hxx-prologue* options to provide the necessary declarations.

       --generate-forward
              Generate a separate header file with forward declarations for the types being generated.

       --generate-xml-schema
              Generate  a  C++  header file as if the schema being compiled defines the XML Schema namespace. In
              particular, the resulting file will have definitions for all XML Schema built-in types. The schema
              file provided to the compiler need not exist and is only used to derive the name of the  resulting
              header  file.  Use  the --extern-xml-schema option to include this file in the generated files for
              other schemas.

       --extern-xml-schema file
              Include a header file derived from file instead of generating the  XML  Schema  namespace  mapping
              inline.  The  provided  file  need  not  exist and is only used to derive the name of the included
              header file. Use the --generate-xml-schema option to generate this header file.

       --suppress-parsing
              Suppress the generation of the parsing functions and constructors. Use this option to  reduce  the
              generated code size when parsing from XML is not needed.

       --generate-element-type
              Generate types instead of parsing and serialization functions for root elements. This is primarily
              useful to distinguish object models with the same root type but with different root elements.

       --generate-element-map
              Generate  a  root  element  map  that  allows  uniform  parsing and serialization of multiple root
              elements. This option is only valid together with --generate-element-type.

       --generate-intellisense
              Generate workarounds for IntelliSense bugs in Visual Studio 2005 (8.0). When this option is  used,
              the  resulting  code  is  slightly more verbose. IntelliSense in Visual Studio 2008 (9.0) does not
              require these workarounds. Support for IntelliSense in Visual Studio 2003 (7.1) is  improved  with
              this option but is still incomplete.

       --omit-default-attributes
              Omit attributes with default and fixed values from serialized XML documents.

       --type-naming style
              Specify  the  type  naming convention that should be used in the generated code.  Valid styles are
              knr (default), ucc, and java.  See the NAMING CONVENTION section below for more information.

       --function-naming style
              Specify the function naming convention that should be used in the generated code. Valid styles are
              knr (default), lcc, and java.  See the NAMING CONVENTION section below for more information.

       --type-regex regex
              Add regex to the list of regular expressions used to translate XML Schema type names to  C++  type
              names. See the NAMING CONVENTION section below for more information.

       --accessor-regex regex
              Add   regex   to  the  list  of  regular  expressions  used  to  translate  XML  Schema  names  of
              elements/attributes to C++ accessor function names. See the NAMING CONVENTION  section  below  for
              more information.

       --one-accessor-regex regex
              Add   regex   to  the  list  of  regular  expressions  used  to  translate  XML  Schema  names  of
              elements/attributes with cardinality one to C++ accessor function names. See the NAMING CONVENTION
              section below for more information.

       --opt-accessor-regex regex
              Add  regex  to  the  list  of  regular  expressions  used  to  translate  XML  Schema   names   of
              elements/attributes  with  cardinality  optional  to  C++  accessor function names. See the NAMING
              CONVENTION section below for more information.

       --seq-accessor-regex regex
              Add  regex  to  the  list  of  regular  expressions  used  to  translate  XML  Schema   names   of
              elements/attributes  with  cardinality  sequence  to  C++  accessor function names. See the NAMING
              CONVENTION section below for more information.

       --modifier-regex regex
              Add  regex  to  the  list  of  regular  expressions  used  to  translate  XML  Schema   names   of
              elements/attributes  to  C++  modifier function names. See the NAMING CONVENTION section below for
              more information.

       --one-modifier-regex regex
              Add  regex  to  the  list  of  regular  expressions  used  to  translate  XML  Schema   names   of
              elements/attributes with cardinality one to C++ modifier function names. See the NAMING CONVENTION
              section below for more information.

       --opt-modifier-regex regex
              Add   regex   to  the  list  of  regular  expressions  used  to  translate  XML  Schema  names  of
              elements/attributes with cardinality optional to C++  modifier  function  names.  See  the  NAMING
              CONVENTION section below for more information.

       --seq-modifier-regex regex
              Add   regex   to  the  list  of  regular  expressions  used  to  translate  XML  Schema  names  of
              elements/attributes with cardinality sequence to C++  modifier  function  names.  See  the  NAMING
              CONVENTION section below for more information.

       --parser-regex regex
              Add  regex  to  the  list of regular expressions used to translate XML Schema element names to C++
              parsing function names. See the NAMING CONVENTION section below for more information.

       --serializer-regex regex
              Add regex to the list of regular expressions used to translate XML Schema  element  names  to  C++
              serialization function names. See the NAMING CONVENTION section below for more information.

       --enumerator-regex regex
              Add  regex  to  the list of regular expressions used to translate XML Schema enumeration values to
              C++ enumerator names. See the NAMING CONVENTION section below for more information.

       --element-type-regex regex
              Add regex to the list of regular expressions used to translate XML Schema  element  names  to  C++
              element type names. See the NAMING CONVENTION section below for more information.

       --name-regex-trace
              Trace  the process of applying regular expressions specified with the name transformation options.
              Use this option to find out why your regular expressions don't do what you expected them to do.

       --root-element-first
              Treat only the first global element as a  document  root.  By  default  all  global  elements  are
              considered document roots.

       --root-element-last
              Treat  only  the  last  global  element  as  a  document  root. By default all global elements are
              considered document roots.

       --root-element-all
              Treat all global elements as  document  roots.  This  is  the  default  behavior.   By  explicitly
              specifying this option you can suppress the warning that is issued if more than one global element
              is defined.

       --root-element-none
              Do  not treat any global elements as document roots. By default all global elements are considered
              document roots.

       --root-element element
              Treat only element as a document root. Repeat this option to specify more than one root element.

       --custom-type name[=type[/base]]
              Use a custom C++ type type instead of the generated class for XML Schema type name.   If  type  is
              not  present  or empty then the custom type is assumed to have the same name and be defined in the
              same namespace as the generated class would have. If base is specified then the generated class is
              still generated but with that name.

       --custom-type-regex /name-pat/[type-sub/[base-sub/]]
              For each type defined in XML Schema that matches the  name-pat  pattern  use  a  custom  C++  type
              instead  of the generated class. The name of the custom type is obtained by substituting type-sub.
              If type-sub is not present or its substitution results in an empty string then the custom type  is
              assumed  to  have  the same name and be defined in the same namespace as the generated class would
              have. If base-sub is present and its substitution results in a non-empty string then the generated
              class is still generated but with the  result  of  substitution  as  its  name.  The  pattern  and
              substitutions  are  in  the  perl  regular expression format. See also the REGEX AND SHELL QUOTING
              section below.

       --fwd-suffix suffix
              Use the provided suffix instead of the default -fwd.hxx to  construct  the  name  of  the  forward
              declaration file.

       --fwd-regex regex
              Use  the  provided  expression  to construct the name of the forward declaration file.  regex is a
              perl-like regular expression in the form /pattern/replacement/.  See  also  the  REGEX  AND  SHELL
              QUOTING section below.

       --fwd-prologue text
              Insert text at the beginning of the forward declaration file.

       --fwd-epilogue text
              Insert text at the end of the forward declaration file.

       --fwd-prologue-file file
              Insert the content of the file at the beginning of the forward declaration file.

       --fwd-epilogue-file file
              Insert the content of the file at the end of the forward declaration file.

       --parts num
              Split  generated  source  code  into  num parts. This is useful when translating large, monolithic
              schemas and a C++ compiler is not able to compile the resulting source code at once  (usually  due
              to insufficient memory).

       --parts-suffix suffix
              Use suffix instead of the default '-' to separate the file name from the part number.

   cxx-parser command options
       --type-map mapfile
              Read XML Schema to C++ type mapping information from mapfile Repeat this option to specify several
              type  maps.  Type  maps  are  considered  in  order of appearance and the first match is used.  By
              default all user-defined types are mapped to void.  See  the  TYPE  MAP  section  below  for  more
              information.

       --xml-parser parser
              Use  parser  as  the  underlying  XML parser. Valid values are xerces for Xerces-C++ (default) and
              expat for Expat.

       --generate-inline
              Generate simple functions inline. This option triggers creation of the inline file.

       --generate-validation
              Generate validation code ("perfect" parser) which ensures that instance documents conform  to  the
              schema.  Validation  code  is generated by default when the selected underlying XML parser is non-
              validating (expat).

       --suppress-validation
              Suppress the generation of validation code ("perfect" parser). Validation is suppressed by default
              when the selected underlying XML parser is validating (xerces).

       --generate-polymorphic
              Generate polymorphism-aware code. Specify this option if you use substitution groups or xsi:type.

       --generate-noop-impl
              Generate  a  sample  parser  implementation  that  does  nothing  (no  operation).    The   sample
              implementation  can  then  be  filled with the application-specific code. For an input file in the
              form name.xsd this option triggers the generation of the two additional C++  files  in  the  form:
              name-pimpl.hxx  (parser  implementation  header  file)  and  name-pimpl.cxx (parser implementation
              source file).

       --generate-print-impl
              Generate a sample parser implementation that prints the XML data to STDOUT.  For an input file  in
              the form name.xsd this option triggers the generation of the two additional C++ files in the form:
              name-pimpl.hxx  (parser  implementation  header  file)  and  name-pimpl.cxx (parser implementation
              source file).

       --generate-test-driver
              Generate a test driver for the sample parser  implementation.  For  an  input  file  in  the  form
              name.xsd  this  option  triggers  the  generation  of  an  additional  C++  file in the form name-
              driver.cxx.

       --force-overwrite
              Force overwriting of the existing implementation and test driver files.  Use this option  only  if
              you  do  not  mind  loosing  the changes you have made in the sample implementation or test driver
              files.

       --root-element-first
              Indicate that the first global element is the document root. This information is used to  generate
              the test driver for the sample implementation.

       --root-element-last
              Indicate  that  the last global element is the document root. This information is used to generate
              the test driver for the sample implementation.

       --root-element element
              Indicate that element is the document root. This information is used to generate the  test  driver
              for the sample implementation.

       --generate-xml-schema
              Generate  a  C++  header file as if the schema being compiled defines the XML Schema namespace. In
              particular, the resulting file will have definitions for all parser skeletons and  implementations
              corresponding  to the XML Schema built-in types. The schema file provided to the compiler need not
              exist and is only used to derive the name of the resulting  header  file.  Use  the  --extern-xml-
              schema option to include this file in the generated files for other schemas.

       --extern-xml-schema file
              Include  a  header  file  derived from file instead of generating the XML Schema namespace mapping
              inline. The provided file need not exist and is only used to  derive  the  name  of  the  included
              header file. Use the --generate-xml-schema option to generate this header file.

       --skel-type-suffix suffix
              Use  the  provided suffix instead of the default _pskel to construct the names of generated parser
              skeletons.

       --skel-file-suffix suffix
              Use the provided suffix instead of the default -pskel to construct the names of  generated  parser
              skeleton files.

       --impl-type-suffix suffix
              Use  the  provided  suffix  instead  of  the  default  _pimpl  to  construct  the  names of parser
              implementations for the built-in XML Schema types and sample parser implementations.

       --impl-file-suffix suffix
              Use the provided suffix instead of the default -pimpl to construct the names of  generated  sample
              parser implementation files.

NAMING CONVENTION

       The  compiler  can be instructed to use a particular naming convention in the generated code. A number of
       widely-used conventions can be selected using the --type-naming and --function-naming options.  A  custom
       naming  convention can be achieved using the --type-regex, --accessor-regex, --one-accessor-regex, --opt-
       accessor-regex,  --seq-accessor-regex,  --modifier-regex,   --one-modifier-regex,   --opt-modifier-regex,
       --seq-modifier-regex,  --parser-regex,  --serializer-regex,  --enumerator-regex, and --element-type-regex
       options.

       The --type-naming option specifies the convention that should be used for  naming  C++  types.   Possible
       values  for  this  option are knr (default), ucc, and java.  The knr value (stands for K&R) signifies the
       standard, lower-case naming convention with the underscore used as a word delimiter,  for  example:  foo,
       foo_bar.  The ucc (stands for upper-camel-case) and java values a synonyms for the same naming convention
       where the first letter of each word in the name is capitalized, for example: Foo, FooBar.

       Similarly,  the  --function-naming  option  specifies  the  convention that should be used for naming C++
       functions.  Possible values for this option are knr (default), lcc, and java.  The knr value (stands  for
       K&R)  signifies  the standard, lower-case naming convention with the underscore used as a word delimiter,
       for example: foo(), foo_bar().  The lcc value (stands for lower-camel-case) signifies a naming convention
       where the first letter of each word except the first is capitalized, for example:  foo(),  fooBar().  The
       java naming convention is similar to the lower-camel-case one except that accessor functions are prefixed
       with  get,  modifier  functions  are  prefixed  with  set, parsing functions are prefixed with parse, and
       serialization functions are prefixed with serialize, for  example:  getFoo(),  setFooBar(),  parseRoot(),
       serializeRoot().

       Note  that  the naming conventions specified with the --type-naming and --function-naming options perform
       only limited transformations on the names that come from the schema in the form of type,  attribute,  and
       element  names.  In  other  words, to get consistent results, your schemas should follow a similar naming
       convention as the one you would like to have in the  generated  code.  Alternatively,  you  can  use  the
       --*-regex  options  (discussed  below) to perform further transformations on the names that come from the
       schema.

       The --type-regex,  --accessor-regex,  --one-accessor-regex,  --opt-accessor-regex,  --seq-accessor-regex,
       --modifier-regex,   --one-modifier-regex,   --opt-modifier-regex,  --seq-modifier-regex,  --parser-regex,
       --serializer-regex, --enumerator-regex, and --element-type-regex  options  allow  you  to  specify  extra
       regular  expressions  for each name category in addition to the predefined set that is added depending on
       the --type-naming and --function-naming options. Expressions that are provided with the --*-regex options
       are evaluated prior to any predefined expressions. This allows you to selectively override some or all of
       the predefined transformations.  When debugging your own expressions, it is often  useful  to  see  which
       expressions  match which names. The --name-regex-trace option allows you to trace the process of applying
       regular expressions to names.

       The  value  for  the  --*-regex  options  should  be  a  perl-like  regular  expression   in   the   form
       /pattern/replacement/.  Any character can be used as a delimiter instead of /.  Escaping of the delimiter
       character  in  pattern or replacement is not supported. All the regular expressions for each category are
       pushed into a category-specific stack with the last specified  expression  considered  first.  The  first
       match  that  succeeds  is  used.  For  the  --one-accessor-regex (accessors with cardinality one), --opt-
       accessor-regex  (accessors  with  cardinality  optional),  and   --seq-accessor-regex   (accessors   with
       cardinality  sequence) categories the --accessor-regex expressions are used as a fallback. For the --one-
       modifier-regex,  --opt-modifier-regex,   and   --seq-modifier-regex   categories   the   --modifier-regex
       expressions  are  used  as a fallback. For the --element-type-regex category the --type-regex expressions
       are used as a fallback.

       The type name expressions (--type-regex) are evaluated on the name string that has the following format:

       [namespace  ]name[,name][,name][,name]

       The element type name expressions (--element-type-regex), effective only when the --generate-element-type
       option is specified, are evaluated on the name string that has the following format:

       namespace name

       In the type name format the namespace part followed by a space is only present for global type names. For
       global types and elements defined in schemas without a target namespace, the namespace part is empty  but
       the  space  is  still  present.  In  the  type  name format after the initial name component, up to three
       additional name components can be present, separated by commas. For example:

       http://example.com/hello type

       foo

       foo,iterator

       foo,const,iterator

       The following set of predefined regular expressions is used to transform type names when the upper-camel-
       case naming convention is selected:

       /(?:[^ ]* )?([^,]+)/\u$1/

       /(?:[^ ]* )?([^,]+),([^,]+)/\u$1\u$2/

       /(?:[^ ]* )?([^,]+),([^,]+),([^,]+)/\u$1\u$2\u$3/

       /(?:[^ ]* )?([^,]+),([^,]+),([^,]+),([^,]+)/\u$1\u$2\u$3\u$4/

       The accessor and modifier expressions (--*accessor-regex and --*modifier-regex) are evaluated on the name
       string that has the following format:

       name[,name][,name]

       After the initial name component, up to two additional name  components  can  be  present,  separated  by
       commas. For example:

       foo

       dom,document

       foo,default,value

       The  following  set  of  predefined regular expressions is used to transform accessor names when the java
       naming convention is selected:

       /([^,]+)/get\u$1/

       /([^,]+),([^,]+)/get\u$1\u$2/

       /([^,]+),([^,]+),([^,]+)/get\u$1\u$2\u$3/

       For the parser,  serializer,  and  enumerator  categories,  the  corresponding  regular  expressions  are
       evaluated  on local names of elements and on enumeration values, respectively. For example, the following
       predefined regular expression is used to transform parsing function names when the java naming convention
       is selected:

       /(.+)/parse\u$1/

       See also the REGEX AND SHELL QUOTING section below.

TYPE MAP

       Type map files are used in C++/Parser to define a mapping between XML Schema and C++ types. The  compiler
       uses this information to determine the return types of post_* functions in parser skeletons corresponding
       to  XML  Schema types as well as argument types for callbacks corresponding to elements and attributes of
       these types.

       The compiler has a set of predefined mapping rules that map built-in XML Schema  types  to  suitable  C++
       types  (discussed  below)  and all other types to void.  By providing your own type maps you can override
       these predefined rules.  The format of the type map file is presented below:

              namespace schema-namespace [ cxx-namespace ]
              {
                ( include file-name; )*
                ([ type ] schema-type cxx-ret-type [ cxx-arg-type ]; )*
              }

       Both schema-namespace and schema-type are regex patterns while cxx-namespace, cxx-ret-type, and  cxx-arg-
       type  are  regex  pattern  substitutions.  All  names  can be optionally enclosed in " ", for example, to
       include white-spaces.

       schema-namespace determines XML Schema namespace. Optional cxx-namespace is prefixed to  every  C++  type
       name  in  this  namespace declaration.  cxx-ret-type is a C++ type name that is used as a return type for
       the post_* functions. Optional cxx-arg-type is an argument type for callback functions  corresponding  to
       elements  and  attributes  of this type. If cxx-arg-type is not specified, it defaults to cxx-ret-type if
       cxx-ret-type ends with * or & (that is,  it  is  a  pointer  or  a  reference)  and  const  cxx-ret-type&
       otherwise.   file-name  is  a  file  name  either in the " " or < > format and is added with the #include
       directive to the generated code.

       The # character starts a comment that ends with a new line or  end  of  file.  To  specify  a  name  that
       contains # enclose it in " ". For example:

              namespace http://www.example.com/xmlns/my my
              {
                include "my.hxx";

                # Pass apples by value.
                #
                apple apple;

                # Pass oranges as pointers.
                #
                orange orange_t*;
              }

       In  the  example above, for the http://www.example.com/xmlns/my#orange XML Schema type, the my::orange_t*
       C++ type will be used as both return and argument types.

       Several namespace declarations can be specified in a single file.  The namespace declaration can also  be
       completely omitted to map types in a schema without a namespace. For instance:

              include "my.hxx";
              apple apple;

              namespace http://www.example.com/xmlns/my
              {
                orange "const orange_t*";
              }

       The  compiler  has a number of predefined mapping rules that can be presented as the following map files.
       The string-based XML Schema built-in types are mapped to either std::string or std::wstring depending  on
       the character type selected with the --char-type option (char by default).

              namespace http://www.w3.org/2001/XMLSchema
              {
                boolean bool bool;

                byte "signed char" "signed char";
                unsignedByte "unsigned char" "unsigned char";

                short short short;
                unsignedShort "unsigned short" "unsigned short";

                int int int;
                unsignedInt "unsigned int" "unsigned int";

                long "long long" "long long";
                unsignedLong "unsigned long long" "unsigned long long";

                integer "long long" "long long";

                negativeInteger "long long" "long long";
                nonPositiveInteger "long long" "long long";

                positiveInteger "unsigned long long" "unsigned long long";
                nonNegativeInteger "unsigned long long" "unsigned long long";

                float float float;
                double double double;
                decimal double double;

                string std::string;
                normalizedString std::string;
                token std::string;
                Name std::string;
                NMTOKEN std::string;
                NCName std::string;
                ID std::string;
                IDREF std::string;
                language std::string;
                anyURI std::string;

                NMTOKENS xml_schema::string_sequence;
                IDREFS xml_schema::string_sequence;

                QName xml_schema::qname;

                base64Binary std::auto_ptr<xml_schema::buffer>
                             std::auto_ptr<xml_schema::buffer>;
                hexBinary std::auto_ptr<xml_schema::buffer>
                          std::auto_ptr<xml_schema::buffer>;

                date xml_schema::date;
                dateTime xml_schema::date_time;
                duration xml_schema::duration;
                gDay xml_schema::gday;
                gMonth xml_schema::gmonth;
                gMonthDay xml_schema::gmonth_day;
                gYear xml_schema::gyear;
                gYearMonth xml_schema::gyear_month;
                time xml_schema::time;
              }

       The last predefined rule maps anything that wasn't mapped by previous rules to void:

              namespace .*
              {
                .* void void;
              }

       When you provide your own type maps with the --type-map option, they are evaluated first. This allows you
       to selectively override predefined rules.

REGEX AND SHELL QUOTING

       When  entering  a  regular  expression  argument  in  the shell command line it is often necessary to use
       quoting (enclosing the argument in " " or ' ') in order to prevent the shell  from  interpreting  certain
       characters, for example, spaces as argument separators and $ as variable expansions.

       Unfortunately  it is hard to achieve this in a manner that is portable across POSIX shells, such as those
       found on GNU/Linux and UNIX, and Windows shell. For example, if you use " " for quoting you  will  get  a
       wrong  result  with  POSIX shells if your expression contains $. The standard way of dealing with this on
       POSIX systems is to use ' ' instead. Unfortunately, Windows shell does not remove  '  '   from  arguments
       when  they  are passed to applications. As a result you may have to use ' ' for POSIX and " " for Windows
       ($ is not treated as a special character on Windows).

       Alternatively, you can save regular expression options into a file, one option per  line,  and  use  this
       file with the --options-file option. With this approach you don't need to worry about shell quoting.

DIAGNOSTICS

       If  the  input  file  is  not a valid W3C XML Schema definition, xsdcxx will issue diagnostic messages to
       STDERR and exit with non-zero exit code.

BUGS

       Send bug reports to the xsd-users@codesynthesis.com mailing list.

COPYRIGHT

       Copyright (c) 2005-2010 Code Synthesis Tools CC.

       Permission is granted to copy, distribute and/or modify this document under the terms  of  the  GNU  Free
       Documentation  License,  version  1.2; with no Invariant Sections, no Front-Cover Texts and no Back-Cover
       Texts. Copy of the license can be obtained from http://codesynthesis.com/licenses/fdl-1.2.txt

XSD 3.3.0                                          April 2010                                          XSDCXX(1)