---
name: "Catmandu::Exporter::XSD"
section: "3pm"
platform: "linux"
package: "libcatmandu-xsd-perl"
version: "0.05-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Catmandu::Exporter::XSD"
---

# Catmandu::Exporter::XSD(3pm)

Export and validate XML documents

## NAME

Catmandu::Exporter::XSD - Export and validate XML documents

## SYNOPSIS

```
    # Convert one shiporder YAML to XML
    catmandu convert YAML to XSD --root '{}shiporder'
                                 --schemas demo/order/*.xsd < shiporder.YAML
    # Same as above but store multiple shiporders in the YAML into a separate file
    catmandu convert YAML to XSD --root '{}shiporder'
                                 --schemas demo/order/*.xsd
                                 --split 1
                                 < shiporder.YAML
    # Same as above but use template toolkit to pack the XML into an container
    # (The xml record is stored in the 'xml' key which can be retrieved in the
    # template by [% xml %])
    catmandu convert YAML to XSD --root '{}shiporder'
                                 --schemas demo/order/*.xsd
                                 --template_before t/xml_header.tt
                                 --template t/xml_record.tt
                                 --template t/xml_footer.tt
                                 < shiporder.YAML
    use Catmandu;
    # Print to STDOUT
    my $exporter = Catmandu->exporter('XSD',
                        root => ...
                        schemas => ...
    );
    $exporter->add_many($arrayref);
    $exporter->add_many($iterator);
    $exporter->add_many(sub { });
    $exporter->add($hashref);
    $exporter->commit;
```

## DESCRIPTION

This is a Catmandu::Exporter for converting Perl into valided XML documents using an XSD schema file.

## CONFIGURATION

- file

  Write output to a local file given by its path. Alternatively a scalar reference can be passed to write to a string.

- fh

  Write output to an IO::Handle. If not specified, Catmandu::Util::io is used to create the output stream from the `"file"` argument or by using STDOUT.

- split

  Optional. Don't write to the file (or STDOUT) and split the output documents into one or more files. E.g.

  ```
      catmandu ... to XSD --root ... --schemas ... --split 1  < data
  ```

- split\_pattern

  Optional. Use a FORMAT as template for naming output files. Uses the '\_id' field in the data or an incremental counter as input. E.g.

  ```
      # Creates 000001.xml , 000002.xml, etc
      catmandu ... to XSD --root ... --schemas ... --split 1 --split_pattern '%-6.6d.xml' < data
  ```

- split\_directory

  Optional. Specify the directory in which the split files need to be written.

- template

  Optional. A template toolkit template to be used for creating each XML output record. Gets as input the input data plus the XML serialized form in the 'xml' field.

- template\_before

  Optional. The template toolkit template to be used as XML header.

- template\_after

  Optional. The template toolkit template to be used as XML footer.

- fix

  An ARRAY of one or more fixes or file scripts to be applied to imported items.

- root

  Required. The name (and namespace) of the root element of the XML document. E.g.:

  ```
      {}shiporder
      {http://www.loc.gov/mods/v3}mods
      {urn:isbn:1-931666-22-9}ead
  ```

- schemas

  Required. An array or comma separated list of XSD schema locations.

- prefixes

  Optional. An array or comma delimited string of namespace prefixes to be used hand handling XML files. E.g.

  ```
      # On the command line:
      catmandu ... --prefixes ead:urn:isbn:1-931666-22-9,...
      # In Perl
      prefixes => [
          ead => 'urn:isbn:1-931666-22-9' ,
          ... => ...
      ]
  ```

- mixed

  Optional. The handling of mixed element content. One of ATTRIBUTES (default), TEXTUAL, STRUCTURAL, XML\_NODE, XML\_STRING, CODE reference. See also Catmandu::XSD and XML::Compile::Translate::Reader

## METHODS

Every Catmandu::Importer is a Catmandu::Iterable all its methods are inherited.

## SEE ALSO

Catmandu::Exporter, Catmandu::XSD , Template

## AUTHOR

Patrick Hochstenbach , `"patrick.hochstenbach at ugent.be"`

## LICENSE AND COPYRIGHT

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See \<http://dev.perl.org/licenses/\> for more information.
