2.8 Reader¶
-
typedef struct SerdReaderImpl SerdReader¶
Streaming parser that reads a text stream and writes to a statement sink.
-
SerdReader *serd_reader_new(SerdSyntax syntax, void *handle, void (*free_handle)(void*), SerdBaseSink base_sink, SerdPrefixSink prefix_sink, SerdStatementSink statement_sink, SerdEndSink end_sink)¶
Create a new RDF reader.
-
void serd_reader_set_strict(SerdReader *reader, bool strict)¶
Enable or disable strict parsing.
The reader is non-strict (lax) by default, which will tolerate URIs with invalid characters. Setting strict will fail when parsing such files. An error is printed for invalid input in either case.
-
void serd_reader_set_error_sink(SerdReader *reader, SerdErrorSink error_sink, void *error_handle)¶
Set a function to be called when errors occur during reading.
The
error_sink
will be called withhandle
as its first argument. If no error function is set, errors are printed to stderr in GCC style.
-
void *serd_reader_get_handle(const SerdReader *reader)¶
Return the
handle
passed toserd_reader_new()
-
void serd_reader_add_blank_prefix(SerdReader *reader, const uint8_t *prefix)¶
Set a prefix to be added to all blank node identifiers.
This is useful when multiple files are to be parsed into the same output (a model or a file). Since Serd preserves blank node IDs, this could cause conflicts where two non-equivalent blank nodes are merged, resulting in corrupt data. By setting a unique blank node prefix for each parsed file, this can be avoided, while preserving blank node names.
-
void serd_reader_set_default_graph(SerdReader *reader, const SerdNode *graph)¶
Set the URI of the default graph.
If this is set, the reader will emit quads with the graph set to the given node for any statements that are not in a named graph (which is currently all of them since Serd currently does not support any graph syntaxes).
-
SerdStatus serd_reader_read_file(SerdReader *reader, const uint8_t *uri)¶
Read a file at a given
uri
-
SerdStatus serd_reader_start_stream(SerdReader *reader, FILE *file, const uint8_t *name, bool bulk)¶
Start an incremental read from a file handle.
Iff
bulk
is true,file
will be read a page at a time. This is more efficient, but uses a page of memory and means that an entire page of input must be ready before any callbacks will fire. To react as soon as input arrives, setbulk
to false.
-
SerdStatus serd_reader_start_source_stream(SerdReader *reader, SerdSource read_func, SerdStreamErrorFunc error_func, void *stream, const uint8_t *name, size_t page_size)¶
Start an incremental read from a user-specified source.
The
read_func
is guaranteed to only be called forpage_size
elements with size 1 (i.e.page_size
bytes).
-
SerdStatus serd_reader_read_chunk(SerdReader *reader)¶
Read a single “chunk” of data during an incremental read.
This function will read a single top level description, and return. This may be a directive, statement, or several statements; essentially it reads until a ‘.’ is encountered. This is particularly useful for reading directly from a pipe or socket.
-
SerdStatus serd_reader_end_stream(SerdReader *reader)¶
Finish an incremental read from a file handle.
-
SerdStatus serd_reader_read_file_handle(SerdReader *reader, FILE *file, const uint8_t *name)¶
Read
file
-
SerdStatus serd_reader_read_source(SerdReader *reader, SerdSource source, SerdStreamErrorFunc error, void *stream, const uint8_t *name, size_t page_size)¶
Read a user-specified byte source.
-
SerdStatus serd_reader_read_string(SerdReader *reader, const uint8_t *utf8)¶
Read
utf8
-
SerdStatus serd_reader_skip_until_byte(SerdReader *reader, uint8_t byte)¶
Skip over bytes in the input until a specific byte is encountered.
Typically used for recording from errors in a line-based syntax by skipping ahead to the next newline.
- Returns:
SerdStatus.SERD_SUCCESS
if the given byte was reached, orSerdStatus.SERD_FAILURE
if the end of input is reached.
-
void serd_reader_free(SerdReader *reader)¶
Free
reader