Top | ![]() |
![]() |
![]() |
![]() |
XML Schema Datetime and DecimalsXML Schema Datetime and Decimals — XML Schema datetime and arbitrary length decimal number arithmetic. |
Classes for providing XSD datatypes for Datetimes plus Decimals with arbitrary length floating point decimals and standard operators on the Decimals suitable for SPARQL.
rasqal_xsd_date * rasqal_new_xsd_date (rasqal_world *world
,const char *date_string
);
char * rasqal_xsd_date_to_counted_string (const rasqal_xsd_date *date
,size_t *len_p
);
int rasqal_xsd_date_equals (const rasqal_xsd_date *d1
,const rasqal_xsd_date *d2
,int *incomparible_p
);
int rasqal_xsd_date_compare (const rasqal_xsd_date *d1
,const rasqal_xsd_date *d2
,int *incomparible_p
);
#define RASQAL_XSD_DATETIME_NO_TZ (9999)
Sentinel XSD Decimal timezone value indicating no timezone is present.
rasqal_xsd_datetime * rasqal_new_xsd_datetime (rasqal_world *world
,const char *datetime_string
);
rasqal_xsd_datetime * rasqal_new_xsd_datetime_from_timeval (rasqal_world *world
,struct timeval *tv
);
rasqal_xsd_datetime * rasqal_new_xsd_datetime_from_unixtime (rasqal_world *world
,time_t secs
);
rasqal_xsd_datetime * rasqal_new_xsd_datetime_from_xsd_date (rasqal_world *world
,rasqal_xsd_date *date
);
int rasqal_xsd_datetime_compare (const rasqal_xsd_datetime *dt1
,const rasqal_xsd_datetime *dt2
);
rasqal_xsd_datetime_compare
is deprecated and should not be used in newly-written code.
int rasqal_xsd_datetime_compare2 (const rasqal_xsd_datetime *dt1
,const rasqal_xsd_datetime *dt2
,int *incomparible_p
);
int rasqal_xsd_datetime_equals (const rasqal_xsd_datetime *dt1
,const rasqal_xsd_datetime *dt2
);
rasqal_xsd_datetime_equals
is deprecated and should not be used in newly-written code.
int rasqal_xsd_datetime_equals2 (const rasqal_xsd_datetime *dt1
,const rasqal_xsd_datetime *dt2
,int *incomparible_p
);
struct timeval *
rasqal_xsd_datetime_get_as_timeval (rasqal_xsd_datetime *dt
);
time_t
rasqal_xsd_datetime_get_as_unixtime (rasqal_xsd_datetime *dt
);
rasqal_xsd_decimal * rasqal_xsd_datetime_get_seconds_as_decimal (rasqal_world *world
,rasqal_xsd_datetime *dt
);
char * rasqal_xsd_datetime_get_timezone_as_counted_string (rasqal_xsd_datetime *dt
,size_t *len_p
);
char * rasqal_xsd_datetime_get_tz_as_counted_string (rasqal_xsd_datetime *dt
,size_t *len_p
);
int rasqal_xsd_datetime_set_from_timeval (rasqal_xsd_datetime *dt
,struct timeval *tv
);
int rasqal_xsd_datetime_set_from_unixtime (rasqal_xsd_datetime *dt
,time_t clock
);
char * rasqal_xsd_datetime_to_counted_string (const rasqal_xsd_datetime *dt
,size_t *len_p
);
char *
rasqal_xsd_datetime_to_string (const rasqal_xsd_datetime *dt
);
int rasqal_xsd_decimal_abs (rasqal_xsd_decimal *result
,rasqal_xsd_decimal *a
);
int rasqal_xsd_decimal_add (rasqal_xsd_decimal *result
,rasqal_xsd_decimal *a
,rasqal_xsd_decimal *b
);
char * rasqal_xsd_decimal_as_counted_string (rasqal_xsd_decimal *dec
,size_t *len_p
);
int rasqal_xsd_decimal_ceil (rasqal_xsd_decimal *result
,rasqal_xsd_decimal *a
);
int rasqal_xsd_decimal_compare (rasqal_xsd_decimal *a
,rasqal_xsd_decimal *b
);
int rasqal_xsd_decimal_divide (rasqal_xsd_decimal *result
,rasqal_xsd_decimal *a
,rasqal_xsd_decimal *b
);
int rasqal_xsd_decimal_equals (rasqal_xsd_decimal *a
,rasqal_xsd_decimal *b
);
int rasqal_xsd_decimal_floor (rasqal_xsd_decimal *result
,rasqal_xsd_decimal *a
);
long rasqal_xsd_decimal_get_long (rasqal_xsd_decimal *dec
,int *error_p
);
int rasqal_xsd_decimal_multiply (rasqal_xsd_decimal *result
,rasqal_xsd_decimal *a
,rasqal_xsd_decimal *b
);
int rasqal_xsd_decimal_negate (rasqal_xsd_decimal *result
,rasqal_xsd_decimal *a
);
int rasqal_xsd_decimal_round (rasqal_xsd_decimal *result
,rasqal_xsd_decimal *a
);
int rasqal_xsd_decimal_set_double (rasqal_xsd_decimal *dec
,double d
);
int rasqal_xsd_decimal_set_long (rasqal_xsd_decimal *dec
,long l Param2
);
int rasqal_xsd_decimal_set_string (rasqal_xsd_decimal *dec
,const char *string
);
int rasqal_xsd_decimal_subtract (rasqal_xsd_decimal *result
,rasqal_xsd_decimal *a
,rasqal_xsd_decimal *b
);
typedef struct { signed int year; /* the following fields are integer values not characters */ unsigned char month; unsigned char day; signed short timezone_minutes; time_t time_on_timeline; char have_tz; } rasqal_xsd_date;
XML schema date datatype (xsd:date)
Examples of timezone fields: "2010-01-02" : timezone_minutes RASQAL_XSD_DATETIME_NO_TZ, have_tz 'N' "2010-01-02Z" : timezone_minutes 0, have_tz 'Z' "2010-01-02+00:00" : timezone_minutes 0, have_tz 'Y' "2010-01-02-01:00" : timezone_minutes -60, have_tz 'Y'
typedef struct { signed int year; unsigned char month; unsigned char day; /* the following fields are integer values not characters */ signed char hour; signed char minute; signed char second; signed int microseconds; signed short timezone_minutes; time_t time_on_timeline; char have_tz; } rasqal_xsd_datetime;
XML Schema dateTime datatype (xsd:dateTime)
Signed types are required for normalization process where a value can be negative temporarily.
Examples of timezone fields: "2010-01-02T01:02:03" : timezone_minutes RASQAL_XSD_DATETIME_NO_TZ, have_tz 'N' "2010-01-02T01:02:03Z" : timezone_minutes 0, have_tz 'Z' "2010-01-02T01:02:03+00:00" : timezone_minutes 0, have_tz 'Y' "2010-01-02T01:02:03-01:00" : timezone_minutes -60, have_tz 'Y'
year |
||
month 1-12 |
||
1-31 |
||
hour 0-23 |
||
minute 0-59 |
||
second 0-60 (yes 60 is allowed for leap seconds) |
||
microseconds |
||
minutes +/- against UTC or RASQAL_XSD_DATETIME_NO_TZ if there is no timezone in the dateTime. |
||
time on timeline |
||
timezone flag: 'Z' if Zulu, 'Y' if has other timezone offset in |