NAME
Types::XSD - type constraints based on XML schema datatypes
SYNOPSIS
package Person;
use Moo;
use Types::XSD qw( PositiveInteger String );
has name => (is => "ro", isa => String[ minLength => 1 ]);
has age => (is => "ro", isa => PositiveInteger);
DESCRIPTION
Type Constraints
This module defines the following type constraints based on the data types defined in XML Schema. (The names of the type constraints are the same as the XML Schema data types, but capitalization often differs.)
AnyTypeAnySimpleTypeStringNormalizedStringTokenLanguageNameNmTokenNmTokensNCNameIdIdRefIdRefsEntityEntitiesBooleanBase64BinaryHexBinaryFloatDoubleAnyURIQNameNotationDecimalIntegerNonPositiveIntegerNegativeIntegerLongIntShortByteNonNegativeIntegerPositiveIntegerUnsignedLongUnsignedIntUnsignedShortUnsignedByteDurationDateTimeTimeDateGYearMonthGYearGMonthDayGDayGMonth
Datatypes can be parameterized using the facets defined by XML Schema. For example:
use Types::XSD qw( String Decimal PositiveInteger Token );
my @sizes = qw( XS S M L XL XXL );
has name => (is => "ro", isa => String[ minLength => 1 ]);
has price => (is => "ro", isa => Decimal[ fractionDigits => 2 ]);
has rating => (is => "ro", isa => PositiveInteger[ maxInclusive => 5 ]);
has size => (is => "ro", isa => Token[ enumeration => \@sizes ]);
The whiteSpace facet is ignored as I'm not entirely sure what it should do. It perhaps makes sense for coercions, but this module doesn't define any coercions.
Note that to be super-correct, the {max,min}{Inclusive,Exclusive} facets for numeric types are performed by passing the numbers through Math::BigInt or Math::BigFloat, so may be a little slow.
Functions
This module also exports some convenience functions:
dur_parse($str)-
Parse an xsd:duration string, returning a DateTime::Duration.
dur_cmp($a, $b)-
Compare two strings conforming to the xsd:duration datatype to indicate which is the longer duration.
Returns -1 if $a is shorter. Returns 1 if $b is shorter. Returns 0 if the durations are identical. Returns undef if the comparison is indeterminate; for example, "P1Y" (one year) and "P365D" (365 days) are not necessarily identical - in leap years "P365D" is shorter.
dt_cmp($type, $a, $b)-
Compare two datetime-like strings. For example, two
gYearMonthstrings can be compared using:dt_cmp(GYearMonth, "2009-02", "2010-10");Both strings are expected to conform to the same datatype. It doesn't make much sense to compare them otherwise.
dt_parse($type, $str)-
Parse a datetime-like string, returning a DateTime::Incomplete object. Note that DateTime::Incomplete objects are always returned, even if the datetime is potentially complete.
BUGS
Please report any bugs to http://rt.cpan.org/Dist/Display.html?Queue=Types-XSD.
SEE ALSO
AUTHOR
Toby Inkster <tobyink@cpan.org>.
COPYRIGHT AND LICENCE
This software is copyright (c) 2013 by Toby Inkster.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
DISCLAIMER OF WARRANTIES
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.