| 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 |