Provided by: xsdcxx_4.0.0-9build2_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
       --std version
              Specify  the  C++  standard that the generated code should conform to. Valid values
              are c++98 (default) and c++11.

              The C++ standard affects various aspects of the generated code that  are  discussed
              in  more  detail in various mapping-specific documentation.  Overall, when C++11 is
              selected, the generated code relies on the move semantics and uses  std::unique_ptr
              instead of deprecated std::auto_ptr.

              When the C++11 mode is selected, you normally don't need to perform any extra steps
              other than enable C++11 in your C++ compiler, if required. The XSDCXX compiler will
              automatically  add  the  necessary macro defines to the generated header files that
              will switch the header-only XSDCXX runtime library  (libxsd)  to  the  C++11  mode.
              However,  if  you  include  any  of  the  XSDCXX  runtime  headers directly in your
              application (normally you just include the generated headers), then you  will  need
              to define the XSD_CXX11 macro for your entire project.

       --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.

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

       --generate-xml-schema
              Generate a C++ header file as if the schema being compiled defines the  XML  Schema
              namespace.  For  the  C++/Tree mapping, the resulting file will contain definitions
              for all XML Schema built-in types. For the C++/Parser mapping, the  resulting  file
              will   contain  definitions  for  all  the  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.

       --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 xsd 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 n[=r]
              Add  name  n  to the list of names that should not be used as identifiers. The name
              can optionally be followed by = and the replacement name  r  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 of header files
              corresponding to 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.

       --fwd-suffix suffix
              Use the provided suffix instead of the default -fwd.hxx to construct  the  name  of
              the forward declaration 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  of  header files corresponding to
              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.

       --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.

       --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.

       --fwd-prologue text
              Insert text at the beginning of the forward declaration 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.

       --fwd-epilogue text
              Insert text at the end of the forward declaration 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.

       --fwd-prologue-file file
              Insert the content of the file at the beginning of the forward declaration 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.

       --fwd-epilogue-file file
              Insert the content of the file at the end of the forward declaration 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.

       --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
              placed.  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 options 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.

       --generate-dep
              Generate make dependency information. This option triggers the creation of  the  .d
              file  containing the dependencies of the generated files on the main schema file as
              well  as  all  the  schema  files  that  it  includes/imports,  transitively.  This
              dependency  file  is  then  normally  included  into the main makefile to implement
              automatic dependency tracking.

              Note also that automatic dependency generation is not supported  in  the  file-per-
              type  mode  (--file-per-type).  In  this case, all the generated files are produced
              with a single compiler invocation and depend on all the schemas. As a result, it is
              easier  to  establish  such  a  dependency  manually,  perhaps with the help of the
              --file-list* options.

       --generate-dep-only
              Generate make dependency information only.

       --dep-phony
              Generate phony targets for included/imported schema files, causing each  to  depend
              on  nothing.  Such  dummy  rules  work  around make errors caused by the removal of
              schema files without also updating the dependency file to match.

       --dep-target target
              Change the target of the dependency rule. By default it contains all the  generated
              C++ files as well as the dependency file itself, without any directory prefixes. If
              you require multiple targets, then  you  can  specify  them  as  a  single,  space-
              separated argument or you can repeat this option multiple times.

       --dep-suffix suffix
              Use  the  provided  suffix  instead  of the default .d to construct the name of the
              dependency file.

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

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

       --options-file file
              Read  additional options from file. Each option should appearing on a separate line
              optionally followed by space and an option value. Empty lines  and  lines  starting
              with  #  are  ignored.  Option  values  can be enclosed in double (") or single (')
              quotes  to preserve leading and trailing whitespaces as well as  to  specify  empty
              values. If the value itself contains trailing or leading quotes, enclose it with an
              extra pair of quotes, for example '"x"'. Non-leading and  non-trailing  quotes  are
              interpreted as being part of the option value.

              The  semantics  of  providing options in a file is equivalent to providing the same
              set of options in the same order on  the  command  line  at  the  point  where  the
              --options-file  option  is  specified except that the shell escaping and quoting is
              not required. You can repeat this option to specify more than one options file.

       --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.

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

       --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.

       --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, --fat-type-file, 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 useful 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.

       --fat-type-file
              Generate code corresponding to global elements into type files  instead  of  schema
              files  when  the  --type-file-regex  option  is specified. This option is primarily
              useful when trying to minimize the amount of object  code  that  is  linked  to  an
              executable by packaging compiled generated code into a static (archive) library.

       --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.

       --polymorphic-plate num
              Specify the polymorphic map plate the generated  code  should  register  on.   This
              functionality  is  primarily  useful  to segregate multiple schemas that define the
              same polymorphic types.

       --ordered-type type
              Indicate that element order in type is significant. An example would be  a  complex
              type  with  unbounded  choice as a content model where the element order in XML has
              application-specific semantics. For ordered types the compiler generates a  special
              container  data  member and a corresponding set of accessors and modifiers that are
              used to capture the order of elements and, for mixed content, of text.

              The type argument is an XML Schema type name that can be optionally qualified  with
              a  namespace  in  the namespace#name form.  Note also that you will need to specify
              this option when compiling every schema file that has other ordered  types  derived
              from this type.

       --ordered-type-derived
              Automatically  treat  types  derived  from  ordered  bases as also ordered. This is
              primarily useful if you would like to be able to iterate over the complete  content
              using the content order container.

       --ordered-type-mixed
              Automatically treat complex types with mixed content as ordered.

       --ordered-type-all
              Indicate that element order in all types is significant.

       --order-container type
              Specify  a custom class template that should be used as a container for the content
              order in ordered types instead of the default std::vector.  See --ordered-type  for
              more  information  on  ordered type. This option is primarily useful if you need to
              perform more complex lookups in the content order container, for example by element
              id.  In  this case, a container like Boost multi-index may be more convenient. Note
              that if using a custom container, you will also most likely  need  to  include  the
              relevant headers using the --hxx-prologue* options.

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

       --generate-ostream
              Generate ostream insertion operators (operator<<) for generated types. This  allows
              one 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 member-wise.

       --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.

       --suppress-assignment
              Suppress  the  generation  of  copy assignment operators for complex types. If this
              option is specified, the copy assignment operators  for  such  types  are  declared
              private and left unimplemented.

       --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-any-type
              Extract  and  store  content of the XML Schema anyType type as a DOM fragment. 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.

       --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) and later 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.

       --const-regex regex
              Add regex to the list of regular expressions used to translate  XML  Schema-derived
              names  to  C++  constant  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 map
              Use a custom C++ type instead of the generated class. The map argument  is  in  the
              form  name[=type[/base]],  where  name  is a type name as defined in XML Schema and
              type is a C++ type name that should be used instead. 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 regex
              Use custom C++ types instead of the generated classes. The regex argument is in the
              form /name-pat/[type-sub/[base-sub/]], where name-pat is a regex pattern that  will
              be  matched  against type names as defined in XML Schema and type-sub is a C++ type
              name substitution that should be used instead. 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 this substitution as  its
              name.  The pattern and substitutions are in the Perl regular expression format. See
              also the REGEX AND SHELL QUOTING section below.

       --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-validation
              Generate  validation  code.  The  validation  code  ("perfect parser") 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. 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 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  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.

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

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

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

       --impl-file-suffix suffix
              Use the provided suffix instead of the default -pimpl to construct the names of the
              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, --const-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, --const-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/

       The const category is used to create C++  constant  names  for  the  element/wildcard/text
       content ids in ordered types.

       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-2014 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