|
@@ -4,6 +4,15 @@
|
|
|
#include "graph.h"
|
|
|
|
|
|
|
|
|
+/** @brief Codec iterator type.
|
|
|
+ *
|
|
|
+ * This structure holds state data including input and output for encoding and
|
|
|
+ * decoding RDF. Normally it should not be inspected ormanipulated directly,
|
|
|
+ * but rather passed to codec iteration functions for processing RDF.
|
|
|
+ *
|
|
|
+ * NOTE: This should be used as an opaque handle, however it is exposed here
|
|
|
+ * for easier inclusion into each codec.
|
|
|
+ */
|
|
|
typedef struct codec_iter_t {
|
|
|
char * rep; // String representation of a RDF fragment.
|
|
|
LSUP_Triple * trp; // RDF fragment being encoded or decoded.
|
|
@@ -39,13 +48,55 @@ typedef LSUP_rc (*term_dec_fn_t)(
|
|
|
const char *rep, const LSUP_NSMap *nsm, LSUP_Term **term);
|
|
|
|
|
|
|
|
|
-/** @brief Graph encoder callback type.
|
|
|
+/** @brief Initialize a graph encoding loop.
|
|
|
*
|
|
|
- * @return LSUP_OK on successful encoding; <0 for other errors.
|
|
|
+ * This prototype is to be implemented by graph encoding loops. It should
|
|
|
+ * create an iterator and perform all initial setup for finding triples.
|
|
|
+ *
|
|
|
+ * @param[in] gr The graph to be encoded. The graph's namespace map is used by the
|
|
|
+ * codec for namespace prefixing. The graph may only be freed after the loop is
|
|
|
+ * finalized.
|
|
|
+ *
|
|
|
+ * @return A codec iterator handle to be passed to a #gr_codec_iter_fn_t
|
|
|
+ * function and, eventually, to a #gr_codec_done_fn_t function.
|
|
|
*/
|
|
|
-typedef LSUP_CodecIterator * (*gr_codec_init_fn_t)(const LSUP_Graph *gr);
|
|
|
+typedef LSUP_CodecIterator * (*gr_encode_init_fn_t)(const LSUP_Graph *gr);
|
|
|
|
|
|
-typedef LSUP_rc (*gr_codec_iter_fn_t)(LSUP_CodecIterator *it);
|
|
|
+
|
|
|
+/** @brief Initialize a graph decoding loop.
|
|
|
+ *
|
|
|
+ * This prototype is to be implemented by graph decoding loops. It should
|
|
|
+ * create an iterator and perform all initial setup for tokenizing text into
|
|
|
+ * processing units.
|
|
|
+ *
|
|
|
+ * @param[in] rep The RDF string to be decoded. Any namespace prefixes defined in
|
|
|
+ * this string will be used for decoding.
|
|
|
+ *
|
|
|
+ * @return A codec iterator handle to be passed to a #gr_codec_iter_fn_t
|
|
|
+ * function and, eventually, to a #gr_codec_done_fn_t function.
|
|
|
+ */
|
|
|
+typedef LSUP_CodecIterator * (*gr_decode_init_fn_t)(const char *rep);
|
|
|
+
|
|
|
+
|
|
|
+/** @brief Perform one encoding or decoding iteration.
|
|
|
+ *
|
|
|
+ * This prototype is used for both encoding and decoding function. It should
|
|
|
+ * perform all the steps to either encode one or more triples into a complete
|
|
|
+ * RDF fragment representing a complete triple or a set thereof, or to parse
|
|
|
+ * a RDF string into one or more complete triples.
|
|
|
+ *
|
|
|
+ * @param[in] it Iterator handle.
|
|
|
+ *
|
|
|
+ * @param[out] res Handle to be populated with the data obtained from encoding
|
|
|
+ * (a string) or decoding (a NULL-terminated array of triples). This pointer
|
|
|
+ * must be passed initialized (it may be NULL) and should be eventually
|
|
|
+ * freed manually at the end of the loop (it is reallocated at each iteration,
|
|
|
+ * so memory from a previous iteration may be overwritten with new data).
|
|
|
+ *
|
|
|
+ * @return LSUP_OK if a new token was processed; LSUP_END if the end of the
|
|
|
+ * loop was reached.
|
|
|
+ */
|
|
|
+typedef LSUP_rc (*gr_codec_iter_fn_t)(LSUP_CodecIterator *it, void **res);
|
|
|
|
|
|
typedef void (*gr_codec_done_fn_t)(LSUP_CodecIterator *it);
|
|
|
|
|
@@ -66,12 +117,20 @@ typedef LSUP_rc (*gr_dec_fn_t)(const char *rep, LSUP_Graph **gr);
|
|
|
* - name: A brief (16-char max), human-readable to identify the codec.
|
|
|
* - mimetype: MIME type associated with the codec.
|
|
|
* - extension: File extension associated with the serialized file.
|
|
|
+ *
|
|
|
* - term_encoder: Callback function for encoding a single term.
|
|
|
* - term_decoder: Callback function for decoding a single term.
|
|
|
*
|
|
|
- * There is no validation enforced, but at least the name, mimetype and
|
|
|
- * extension, as well as one or more encoding functions and their respective
|
|
|
- * decoding functions, should be defined in a codec.
|
|
|
+ * - gr_encode_init: Initialize a graph decoding loop.
|
|
|
+ * - gr_encode_iter: Run one iteration of encoding on one or more triples.
|
|
|
+ * - gr_encode_done: Finalize the encoding loop and free the support data.
|
|
|
+ *
|
|
|
+ * - gr_decode_init: Initialize a graph decoding loop.
|
|
|
+ * - gr_decode_iter: Run one iteration of decoding on one or more text lines.
|
|
|
+ * - gr_decode_done: Finalize the decoding loop and free the support data.
|
|
|
+ *
|
|
|
+ * For documentation on the individual encoding and decoding callbaks, see the
|
|
|
+ * related function prototypes.
|
|
|
*/
|
|
|
typedef struct codec_t {
|
|
|
char name[16]; // Name of the codec.
|
|
@@ -83,12 +142,12 @@ typedef struct codec_t {
|
|
|
term_dec_fn_t term_decoder; // Term decoder function.
|
|
|
|
|
|
// Graph encoding.
|
|
|
- gr_codec_init_fn_t gr_encode_init; // Graph encoder initialization.
|
|
|
+ gr_encode_init_fn_t gr_encode_init; // Graph encoder initialization.
|
|
|
gr_codec_iter_fn_t gr_encode_iter; // Graph encoder initialization.
|
|
|
gr_codec_done_fn_t gr_encode_done; // Graph encoder initialization.
|
|
|
|
|
|
// Graph decoding.
|
|
|
- gr_codec_init_fn_t gr_decode_init; // Graph decoder initialization.
|
|
|
+ gr_decode_init_fn_t gr_decode_init; // Graph decoder initialization.
|
|
|
gr_codec_iter_fn_t gr_decode_iter; // Graph decoder initialization.
|
|
|
gr_codec_done_fn_t gr_decode_done; // Graph decoder initialization.
|
|
|
} LSUP_Codec;
|