NAME

    TypeLibrary::FromXSD - create a Type::Tiny library of simpleTypes in
    .xsd files.

VERSION

    version 0.05

SYNOPSIS

      use TypeLibrary::FromXSD;
      
      my $generator = TypeLibrary::FromXSD->new(
        xsd    => '/path/to/file.xsd',
        output => '/path/to/Library.pm',
      );
      
      $generator->run;

DESCRIPTION

    This module helps to create a library for types (using Type::Tiny)
    based on a XML schema. It searches for simpleTypes in the .xsd file and
    creates a type for it.

ATTRIBUTES

      * types

      * xsd

      * output

      * namespace

      * version_add

METHODS

 run

SUPPORTED TYPES

 Date And DateTime

      <xs:simpleType name="ISODate">
        <xs:restriction base="xs:date"/>
      </xs:simpleType>
      <xs:simpleType name="ISODateTime">
        <xs:restriction base="xs:dateTime"/>
      </xs:simpleType>

    create those types:

      declare ISODate =>
          as Str,
          where {
              ($_ =~ m{\A-?[0-9]{4,}-[0-9]{2}-[0-9]{2}(?:Z|[-+]?[0-2][0-9]:[0-5][0-9])?\z}) &&
              (validate_date( $_ )) # if an extra validation is passed
          };

 Strings

      <xs:simpleType name="BEIIdentifier">
        <xs:restriction base="xs:string">
          <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
        </xs:restriction>
      </xs:simpleType>

    =>

      declare BEIIdentifier =>
         as Str,
         where{
             ($_ =~ m![A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}!)
         };

 Enumerations

      <xs:simpleType name="AddressType2Code">
        <xs:restriction base="xs:string">
          <xs:enumeration value="ADDR"/>
          <xs:enumeration value="PBOX"/>
          <xs:enumeration value="HOME"/>
          <xs:enumeration value="BIZZ"/>
          <xs:enumeration value="MLTO"/>
          <xs:enumeration value="DLVY"/>
        </xs:restriction>
      </xs:simpleType>

    =>

      declare AddressType2Code => as enum ["ADDR","PBOX","HOME","BIZZ","MLTO","DLVY"];

 Numbers

      <xs:simpleType name="CurrencyAndAmount_SimpleType">
        <xs:restriction base="xs:decimal">
          <xs:minInclusive value="0"/>
          <xs:fractionDigits value="5"/>
          <xs:totalDigits value="18"/>
        </xs:restriction>
      </xs:simpleType>

    =>

      declare CurrencyAndAmount_SimpleType =>
          as Num,
          where {
              ($_ <= 0) &&
              (length( (split /\./, $_)[1] ) == 5) &&
              (tr/0123456789// == 18)
          };

AUTHOR

    Renee Baecker <github@renee-baecker.de>

COPYRIGHT AND LICENSE

    This software is Copyright (c) 2013 by Renee Baecker.

    This is free software, licensed under:

      The Artistic License 2.0 (GPL Compatible)

