15 const VOLK_Graph *
gr;
28term_to_ttl (
const VOLK_Term *term,
char **out_p)
43 out = realloc (*out_p, 2);
53 out = realloc (*out_p, strlen (term->
data) + 3);
55 sprintf (out,
"<%s>", term->
data);
71 buf_len = strlen (tmp) + 3;
85 if (strcmp (metadata,
"xsd:integer") == 0) {
88 }
else if (strcmp (metadata,
"xsd:double") == 0) {
91 }
else if (strcmp (metadata,
"xsd:decimal") == 0) {
94 }
else if (strcmp (metadata,
"xsd:boolean") == 0) {
101 buf_len += strlen (metadata) + padding;
104 out = realloc (*out_p, buf_len);
109 }
else if (metadata) {
113 sprintf (out, fmt, tmp, metadata);
116 sprintf (out,
"\"%s\"", tmp);
128 buf_len = strlen (tmp) + 3;
130 if (term->
lang[0] !=
'\0') {
132 buf_len += strlen (metadata) + 1;
135 out = realloc (*out_p, buf_len);
138 sprintf (out,
"\"%s\"", tmp);
142 if (metadata) out = strcat (strcat (out,
"@"), metadata);
149 out = realloc (*out_p, strlen (term->
data) + 3);
152 sprintf (out,
"_:%s", term->
data);
159 log_error (
"Invalid term type: %d", term->
type);
170gr_to_ttl_init (
const VOLK_Graph *gr)
192 char *ns_tpl =
"@prefix %s: <%s> .\n";
195 for (
size_t i = 0; nsm[i]; i++) {
196 const char **ns = nsm[i];
197 size_t old_len = strlen (res);
198 size_t ns_len = strlen (ns[0]) + strlen (ns[1]) + strlen (ns_tpl);
199 char *tmp = realloc (res, old_len + ns_len + 1);
203 sprintf (res + old_len, ns_tpl, ns[0], ns[1]);
210 char *base_stmt_tpl =
"\n@base <%s> .\n\n";
211 char *base_stmt = malloc (
212 strlen (base_stmt_tpl) + strlen (base_uri_str) + 1);
214 sprintf (base_stmt, base_stmt_tpl, base_uri_str);
215 res = realloc (res, strlen (res) + strlen (base_stmt) + 1);
217 res = strcat (res, base_stmt);
229gr_to_ttl_iter (
void *h,
char **res_p) {
240 term_to_ttl (s, &res);
248 char *p_join =
"\n ";
253 char *tmp = realloc (
254 res, strlen (res) + strlen (it->
p_str) + strlen (p_join) + 1);
256 res = strcat (strcat (tmp, p_join), it->
p_str);
265 it->
rc = term_to_ttl (o, &it->
o_str);
267 char *tmp = realloc (
268 res, strlen (res) + strlen (it->
o_str) + strlen (o_join) + 1);
270 res = strcat (strcat (tmp, o_join), it->
o_str);
275 char *s_sep =
"\n.\n\n";
276 char *tmp = realloc (res, strlen (res) + strlen (s_sep) + 1);
279 *res_p = strcat (tmp, s_sep);
294gr_to_ttl_done (
void *h)
307 .mimetype =
"text/turtle",
310 .encode_term = term_to_ttl,
312 .encode_graph_init = gr_to_ttl_init,
313 .encode_graph_iter = gr_to_ttl_iter,
314 .encode_graph_done = gr_to_ttl_done,
const VOLK_Codec ttl_codec
Turtle codec.
char * fmt_header(char *pfx)
Format an informational header.
VOLK_rc escape_lit(const char *in, char **out_p)
Add escape character (backslash) to illegal literal characters.
VOLK_LinkMap * VOLK_graph_connections(const VOLK_Graph *gr, const VOLK_Term *t, const VOLK_LinkType type)
Get term pairs connected to a term in a graph.
VOLK_TermSet * VOLK_graph_unique_terms(const VOLK_Graph *gr, VOLK_TriplePos pos)
Get all unique subjcts, predicates, or objects in a graph.
const VOLK_Term * VOLK_graph_uri(const VOLK_Graph *gr)
Read-only graph URI.
const char *** VOLK_nsmap_dump(void)
Dump all entries of the namespace map.
VOLK_rc VOLK_nsmap_denormalize_uri(const char *fq_uri, char **pfx_uri_p)
Convert a FQ URI string to a prefixed string if the prefix is found.
#define CALLOC_GUARD(var, rc)
Allocate one pointer with calloc and return rc if it fails.
char * strndup(const char *src, size_t max)
Replacement for GNU strndup.
#define RCCK(exp)
Return exp return value if it is of VOLK_rc type and nonzero.
#define PRCCK(exp)
Return exp return value if it is of VOLK_rc type and negative (=error).
#define VOLK_ERROR
Generic error return code.
#define VOLK_MEM_ERR
Memory allocation error.
#define VOLK_NORESULT
No result yielded.
#define VOLK_END
Loop end.
#define VOLK_OK
Generic success return code.
#define VOLK_PARSE_ERR
Codec parser error.
struct hashmap VOLK_TermSet
a set of unique terms.
VOLK_rc VOLK_term_set_next(VOLK_TermSet *ts, size_t *i, VOLK_Term **term)
Iterate trough a term set.
void VOLK_link_map_iter_free(VOLK_LinkMapIterator *it)
Free a link map iterator.
VOLK_LinkMapIterator * VOLK_link_map_iter_new(const VOLK_LinkMap *lmap)
Create a new iterator to loop through a link map.
VOLK_Term * VOLK_default_datatype
Default literal data type URI.
void VOLK_term_set_free(VOLK_TermSet *ts)
Free a term set.
VOLK_rc VOLK_link_map_next(VOLK_LinkMapIterator *it, VOLK_Term **lt, VOLK_TermSet **ts)
Iterate through a link map.
void VOLK_link_map_free(VOLK_LinkMap *lm)
Free a link map.
char VOLK_LangTag[8]
Language tag, currently restricted to 7 characters.
@ VOLK_LINK_OUTBOUND
Outbound link (po).
@ VOLK_TERM_IRIREF
IRI reference.
@ VOLK_TERM_LT_LITERAL
Language-tagged string literal.
@ VOLK_TERM_LITERAL
Literal without language tag.
@ VOLK_TERM_BNODE
Blank node.
VOLK_rc VOLK_ttl_parse_doc(FILE *fh, const char *sh, VOLK_Graph **gr_p, size_t *ct, char **err_p)
Parse an RDF document in Turtle format.
char * s_str
Serialized subject block (output).
const VOLK_Codec * codec
Codec that generated this iterator.
const VOLK_Graph * gr
Graph being encoded.
char * p_str
Serialized predicate block.
VOLK_rc rc
Internal return code.
VOLK_TermSet * subjects
All subjects in the graph.
char * o_str
Serialized object block.
size_t s_cur
Term set cursor.
char * data
URI, literal value, or BNode label.
struct term_t * datatype
Data type IRI for VOLK_TERM_LITERAL.
VOLK_TermType type
Term type.
VOLK_LangTag lang
Lang tag for VOLK_TERM_LT_LITERAL.