Renee Baecker

NAME

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

VERSION

version 0.03

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.

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)



Hosting generously
sponsored by Bytemark