The predicates in this section translate between values and their lexical forms for XML-Schema data types. They are implementated in C to achieve the best possible performance.
NaN 
and INF. If a Prolog float is converted into a string it 
returns the XML canonical form. This form always has one digit before 
the decimal dot, at least one digit after it and an exponential 
component using the capital
E. This predicate behaves as number_string/2 
for integers.
Throws a syntax_error(xsd_number) if String 
is given and is not a well-formed XSD number.
| Prolog term | Type | XSD string | 
| date(Y,M,D) | xsd:date | YYYY-MM-DD | 
| date_time(Y,M,D,H,Mi,S) | xsd:dateTime | YYYY-MM-DDTHH:MM:SS | 
| date_time(Y,M,D,H,Mi,S,0) | xsd:dateTime | YYYY-MM-DDTHH:MM:SSZ | 
| date_time(Y,M,D,H,Mi,S,TZ) | xsd:dateTime | YYYY-MM-DDTHH:MM:SS[+-]HH:MM | 
| time(H,M,S) | xsd:time | HH:MM:SS | 
| year_month(Y,M) | xsd:gYearMonth | YYYY-MM | 
| month_day(M,D) | xsd:gMonthDay | MM-DD | 
| D | xsd:gDay | DD | 
| M | xsd:gMonth | MM | 
| Y | xsd:gYear | YYYY | 
For the Prolog term all variables denote integers except for
S, which represents seconds as either an integer or float. 
The
TZ argument is the offset from UTC in seconds. The
Type is written as xsd:name, but is in fact the 
full URI of the XSD data type, e.g., http://www.w3.org/2001/XMLSchema#date. 
In the XSD string notation, the letters YMDHS denote digits. The 
notation SS is either a two-digit integer or a decimal number with two 
digits before the floating point, e.g. 05.3 to denote 5.3 
seconds.
For most conversions, Type may be specified unbound and is 
unified with the resulting type. For ambiguous conversions, Type 
must be specified or an instantiation_error is raised. When converting 
from Prolog to XSD serialization, D, M and Y are ambiguous. When 
convertion from XSD serialization to Prolog, only DD and MM are 
ambiguous. If
Type and String are both given and String 
is a valid XSD date/time representation but not matching Type 
a syntax error with the shape syntax_error(Type) is raised. 
If DateTime and Type are both given and DateTime 
does not satisfy
Type a domain_error of the shape
domain_error(xsd_time(Type), DateTime) is raised.
The domain of numerical values is verified and a corresponding 
domain_error exception is raised if the domain is violated. There is no 
test for the existence of a date and thus "2016-02-31", 
although non-existing is accepted as valid.