The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

XML::Compile::Schema::BuiltInTypes - Define handling of built-in data-types

INHERITANCE

 XML::Compile::Schema::BuiltInTypes
   is a Exporter

SYNOPSIS

 # Not for end-users
 use XML::Compile::Schema::BuiltInTypes qw/%builtin_types/;

DESCRIPTION

Different schema specifications specify different available types, but there is a lot over overlap. The XML::Compile::Schema::Specs module defines the availability, but here the types are implemented.

This implementation certainly does not try to be minimal in size: using the restriction rules and inheritance structure defined in the schema specification would be too slow.

FUNCTIONS

The functions named in this chapter are all used at compile-time by the translator. At that moment, they will be placed in the kind-of opcode tree which will process the data at run-time. You cannot call these functions yourself.

Any

anySimpleType

anyType

    Both any*Type built-ins can contain any kind of data. Perl decides how to represent the passed values.

Ungrouped types

boolean

    Contains true, false, 1 (is true), or 0 (is false). Unchecked, the actual value is used. Otherwise, 0 and 1 are preferred for the hash value and true and false in XML.

Big Integers

Schema's define integer types which are derived from the decimal type. These values can grow enormously large, and therefore can only be handled correctly using Math::BigInt. When the translator is built with the sloppy_integers option, this will simplify (speed-up) the produced code considerably: all integers then shall be between -2G and +2G.

integer

    An integer with an undertermined, but maximally huge number of digits.

long

    A little bit shorter than an integer, but still up-to 19 digits.

negativeInteger

nonNegativeInteger

nonPositiveInteger

positiveInteger

unsignedInt

    Just too long to fit in Perl's ints.

unsignedLong

    Value up-to 20 digits.

Integers

byte

    Signed 8-bits value.

int

precissionDecimal

    PARTIAL IMPLEMENTATION. Special values INF and NaN not handled.

short

    Signed 16-bits value.

unsigned(Short)

    unsigned 16-bits value.

unsignedByte

    Unsigned 8-bits value.

Floating-point

PARTIAL IMPLEMENTATION: INF, NaN not handled. The float is not limited in size, but mapped on double.

decimal

    Decimals are painful: they can be very large, much larger than Perl's internal floats. The value is therefore kept as string. Use Math::BigFloat when you need calculations. You can also pass such object here.

double

    A floating-point value.

float

    A small floating-point value.

Binary

base64Binary

    In the hash, it will be kept as binary data. In XML, it will be base64 encoded.

hexBinary

    In the hash, it will be kept as binary data. In XML, it will be hex encoded, two hex digits per byte.

Dates

date

    A day, represented in localtime as YYYY-MM-DD or YYYY-MM-DD[-+]HH:mm. When a decimal value is passed, it is interpreted as time value in UTC, and will be formatted as required. When reading, the date string will not be parsed.

dateTime

    A moment, represented in localtime as "date T time tz", where date is YYYY-MM-DD, time is HH:MM:SS and optional, and time-zone tz is either -HH:mm, +HH:mm, or Z for UTC.

    When a decimal value is passed, it is interpreted as time value in UTC, and will be formatted as required. When reading, the date string will not be parsed.

gDay

    Format ---12 or ---12+09:00 (12 days, optional time-zone)

gMonth

    Format --09 or --09+07:00 (9 months, optional time-zone)

gMonthDay

    Format --09-12 or --09-12+07:00 (9 months 12 days, optional time-zone)

gYear

    Format 2006 or 2006+07:00 (year 2006, optional time-zone)

gYearMonth

    Format 2006-11 or 2006-11+07:00 (november 2006, optional time-zone)

Duration

dayTimeDuration

    Format -PnDTnHnMnS, where optional starting - means negative. The P is obligatory, and the T indicates start of a time part. All other n[DHMS] are optional.

duration

    Format -PnYnMnDTnHnMnS, where optional starting - means negative. The P is obligatory, and the T indicates start of a time part. All other n[YMDHMS] are optional.

yearMonthDuration

    Format -PnYnMn, where optional starting - means negative. The P is obligatory, the n[YM] are optional.

Strings

ID(, IDREF, IDREFS)

    A label, reference to a label, or set of references.

    PARTIAL IMPLEMENTATION: the validity of used characters is not checked.

NCName(, ENTITY, ENTITIES)

    A name which contains no colons (a non-colonized name).

Name

language

    An RFC3066 language indicator.

normalizedString

    String where all sequence of white-spaces (including new-lines) are interpreted as one blank. Blanks at beginning and the end of the string are ignored.

string

    (Usually utf8) string.

token(, NMTOKEN, NMTOKENS)

URI

NOTATION

    NOT IMPLEMENTED, so treated as string.

QName

    A qualified type name: a type name with optional prefix. The prefix notation prefix:type will be translated into the {$ns}type notation.

    For writers, this translation can only happen when the $ns is also in use on some other place in the message: the name-space declaration can not be added at run-time. In other cases, you will get a run-time error. Play with XML::Compile::Schema::compile(output_namespaces), predefining evenything what may be used, setting the used count to 1.

anyURI

    You may pass a string or, for instance, an URI object which will be stringified into an URI. When read, the data will not automatically be translated into an URI object: it may not be used that way.

only in 1999 and 2000/10 schemas

binary

    Perl strings can contain any byte, also nul-strings, so can contain any sequence of bits. Limited to byte length.

timeDuration

uriReference

    Probably the same rules as anyURI().

    $builtin_types{century} = { period => 'P100Y' } $builtin_types{recurringDate} = { duration => 'P24H', period => 'P1Y' } $builtin_types{recurringDay} = { duration => 'P24H', period => 'P1M' } $builtin_types{timeInstant} = { duration => 'P0Y', period => 'P0Y' } $builtin_types{timePeriod} = { duration => 'P0Y' } $builtin_types{year} = { period => 'P1Y' } $builtin_types{recurringDuration} = ??

SEE ALSO

This module is part of XML-Compile distribution version 0.67, built on February 04, 2008. Website: http://perl.overmeer.net/xml-compile/

LICENSE

Copyrights 2006-2008 by Mark Overmeer. For other contributors see ChangeLog.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See http://www.perl.com/perl/misc/Artistic.html