5typedef struct nt_codec_iterator {
21term_to_nt (
const VOLK_Term *term,
char **out_p)
24 char *out = NULL, *escaped;
25 const char *metadata = NULL;
28 char *data = term->
data;
31 out = realloc (*out_p, strlen (data) + 3);
34 sprintf (out,
"<%s>", data);
36 if (data != term->
data) free (data);
44 buf_len = strlen (escaped) + 3;
51 buf_len += strlen (metadata) + 4;
54 out = realloc (*out_p, buf_len);
57 sprintf (out,
"\"%s\"", escaped);
62 out = strcat (strcat (strcat (out,
"^^<"), metadata),
">");
72 buf_len = strlen (escaped) + 3;
74 if (term->
lang[0] !=
'\0') {
75 metadata = term->
lang;
76 buf_len += strlen (metadata) + 1;
79 out = realloc (*out_p, buf_len);
82 sprintf (out,
"\"%s\"", escaped);
86 if (metadata) out = strcat (strcat (out,
"@"), metadata);
93 out = realloc (*out_p, strlen (term->
data) + 3);
96 sprintf (out,
"_:%s", term->
data);
112gr_to_nt_init (
const VOLK_Graph *gr)
126gr_to_nt_iter (
void *h,
char **res) {
131 if (rc !=
VOLK_OK)
goto finally;
142 term_to_nt (abs_s, &it->
str_s);
143 term_to_nt (spo->
p, &it->
str_p);
144 term_to_nt (abs_o, &it->
str_o);
151 char *tmp = realloc (
153 + strlen (it->
str_o) + 6);
171gr_to_nt_done (
void *h)
184 .mimetype =
"application/n-triples",
187 .encode_term = term_to_nt,
189 .encode_graph_init = gr_to_nt_init,
190 .encode_graph_iter = gr_to_nt_iter,
191 .encode_graph_done = gr_to_nt_done,
const VOLK_Codec nt_codec
N-Triples codec.
VOLK_rc escape_lit(const char *in, char **out_p)
Add escape character (backslash) to illegal literal characters.
#define VOLK_graph_lookup(...)
Non-transactional version of VOLK_graph_lookup_txn.
VOLK_rc VOLK_graph_iter_next(VOLK_GraphIterator *it, VOLK_Triple **spo_p)
Advance a cursor obtained by a lookup and return a matching triple.
void VOLK_graph_iter_free(VOLK_GraphIterator *it)
Free a graph iterator.
const VOLK_Term * VOLK_graph_uri(const VOLK_Graph *gr)
Read-only graph URI.
#define CALLOC_GUARD(var, rc)
Allocate one pointer with calloc and return rc if it fails.
#define VOLK_ERROR
Generic error return code.
#define VOLK_MEM_ERR
Memory allocation error.
#define VOLK_OK
Generic success return code.
#define VOLK_PARSE_ERR
Codec parser error.
VOLK_Term * VOLK_iriref_new_abs(const VOLK_Term *root, const VOLK_Term *iri)
Create a new absolute IRI from a path relative to a root IRI.
VOLK_Term * VOLK_default_datatype
Default literal data type URI.
void VOLK_term_free(VOLK_Term *term)
void VOLK_triple_free(VOLK_Triple *spo)
Free a triple and all its internal pointers.
@ 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_nt_parse_doc(FILE *fh, const char *sh, VOLK_Graph **gr_p, size_t *ct, char **err_p)
Parse an RDF document in N-Triples format.
VOLK_rc VOLK_nt_parse_term(const char *rep, VOLK_Term **term)
Parse a single term.
const VOLK_Term * gr_uri
Graph URI.
char * str_o
Temporary string.
char * str_s
Temporary string.
char * str_p
Temporary string.
VOLK_GraphIterator * gr_it
Graph iterator.
const VOLK_Codec * codec
Codec that generated this iterator.
VOLK_rc rc
Internal return code.
size_t cur
Internal 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.