---
name: "Catmandu::Importer::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::Importer::XSD"
---

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

Import and validate serialized XML documents

## NAME

Catmandu::Importer::XSD - Import and validate serialized XML documents

## SYNOPSIS

```
    # Compile an XSD schema file and parse one shiporder.xml file
    catmandu convert XSD --root '{}shiporder'
                         --schemas demo/order/*.xsd
                         to YAML < shiporder.xml
    # Same as above but parse more than one file into an array of records
    catmandu convert XSD --root '{}shiporder'
                         --schemas demo/order/*.xsd
                         --files 'data/*.xml'
                         to YAML
    # Same as above but all array of records are in a XML container file
    catmandu convert XSD --root '{}shiporder'
                         --schemas demo/order/*.xsd
                         --xpath '/Container/List//Record/Payload/*'
                         to YAML < data/container.xml
    # In Perl
    use Catmandu;
    my $importer = Catmandu->importer('XSD',
                file => 'ex/data.xml'
                root => ...,
                schemas => [ ...]
    );
    my $n = $importer->each(sub {
        my $hashref = $_[0];
        # ...
    });
```

## DESCRIPTION

This is a Catmandu::Importer for parsing and validating XML data using one or more XSD schema files.

## CONFIGURATION

- file

  Read input from a local file given by its path. Alternatively a scalar reference can be passed to read from a string.

- fh

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

- files

  Optional. Don't read the content from the standard input but use the 'files' parameter as a glob for one or more filenames. E.g.

  ```
      catmandu ... --files 'data/input/*.xml'
  ```

- examples

  Optional. Don't do anything only show an example output how a document should be structured in the given XSD scheme. E.g.

  ```
      catmandu convert XSD --root {}shiporder --schemas "t/demo/ead/*xsd" --example 1 to YAML
  ```

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

- xpath

  Optional. An XPath expression, the XML container in which the PNX record can be found. Default : /oai:OAI-PMH/oai:ListRecords//oai:record/oai:metadata/\*

- 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

- any\_element

  Optional. The handling of `"<any"`\> content in schemas. One of TAKE\_ALL (default: process as XML::LibXML::Node) , SKIP\_ALL (ignore these) , XML\_STRING (process as string) , CODE (provide a reference to parse the data). See XML::Compile::Translate::Reader

## METHODS

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

## SEE ALSO

Catmandu::Importer, Catmandu::XSD

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