|
@@ -73,6 +73,8 @@ term_to_ttl (const LSUP_Term *term, const LSUP_NSMap *nsm, char **out_p)
|
|
|
return LSUP_ERROR;
|
|
|
buf_len = strlen (tmp) + 3; // Room for "" and terminator
|
|
|
|
|
|
+ // Data type.
|
|
|
+ bool shorten = false;
|
|
|
if (
|
|
|
term->datatype != 0
|
|
|
&& term->datatype != LSUP_default_datatype
|
|
@@ -80,21 +82,42 @@ term_to_ttl (const LSUP_Term *term, const LSUP_NSMap *nsm, char **out_p)
|
|
|
md_rc = LSUP_nsmap_denormalize_uri (
|
|
|
nsm, term->datatype->data, &metadata);
|
|
|
PRCCK (md_rc);
|
|
|
- // Room for `^^<>` for FQURI, `^^` for NS URI
|
|
|
- unsigned padding = md_rc == LSUP_NORESULT ? 4 : 2;
|
|
|
+ unsigned padding = 0;
|
|
|
+
|
|
|
+ // Shorten numeric and boolean types.
|
|
|
+ if (strcmp (metadata, "xsd:integer") == 0) {
|
|
|
+ // TODO check for valid format.
|
|
|
+ shorten = true;
|
|
|
+ } else if (strcmp (metadata, "xsd:double") == 0) {
|
|
|
+ // TODO check for valid format.
|
|
|
+ shorten = true;
|
|
|
+ } else if (strcmp (metadata, "xsd:decimal") == 0) {
|
|
|
+ // TODO check for valid format.
|
|
|
+ shorten = true;
|
|
|
+ } else if (strcmp (metadata, "xsd:boolean") == 0) {
|
|
|
+ // TODO check for valid format.
|
|
|
+ shorten = true;
|
|
|
+ } else {
|
|
|
+ // Room for `^^<>` for FQURI, `^^` for NS URI
|
|
|
+ padding = md_rc == LSUP_NORESULT ? 4 : 2;
|
|
|
+ }
|
|
|
buf_len += strlen (metadata) + padding;
|
|
|
}
|
|
|
|
|
|
out = realloc (*out_p, buf_len);
|
|
|
if (UNLIKELY (!out)) return LSUP_MEM_ERR;
|
|
|
|
|
|
- if (metadata) {
|
|
|
+ if (shorten) {
|
|
|
+ strcpy (out, tmp);
|
|
|
+ } else if (metadata) {
|
|
|
char *fmt = (
|
|
|
md_rc == LSUP_NORESULT ? "\"%s\"^^<%s>"
|
|
|
: "\"%s\"^^%s");
|
|
|
sprintf (out, fmt, tmp, metadata);
|
|
|
}
|
|
|
- else sprintf (out, "\"%s\"", tmp);
|
|
|
+ else {
|
|
|
+ sprintf (out, "\"%s\"", tmp);
|
|
|
+ }
|
|
|
free (tmp);
|
|
|
|
|
|
rc = LSUP_OK;
|