|
LMMS
|
Topics | |
| String Utilities | |
| Byte Streams | |
| URI | |
| Node | |
| Event Handlers | |
| Environment | |
| Reader | |
| Writer | |
Classes | |
| struct | SerdNode |
| A syntactic RDF node. More... | |
| struct | SerdChunk |
| An unterminated string fragment. More... | |
| struct | SerdError |
| An error description. More... | |
| struct | SerdURI |
Typedefs | |
| typedef struct SerdEnvImpl | SerdEnv |
| Lexical environment for relative URIs or CURIEs (base URI and namespaces). | |
| typedef struct SerdReaderImpl | SerdReader |
| Streaming parser that reads a text stream and writes to a statement sink. | |
| typedef struct SerdWriterImpl | SerdWriter |
| Streaming serialiser that writes a text stream as statements are pushed. | |
| typedef uint32_t | SerdStatementFlags |
| Bitwise OR of SerdStatementFlag values. | |
| typedef uint32_t | SerdNodeFlags |
| Bitwise OR of SerdNodeFlag values. | |
| typedef struct SerdEnvImpl | SerdEnv |
| typedef struct SerdReaderImpl | SerdReader |
| typedef struct SerdWriterImpl | SerdWriter |
| typedef uint32_t | SerdStatementFlags |
| typedef uint32_t | SerdNodeFlags |
Functions | |
| SERD_API void | serd_free (void *SERD_NULLABLE ptr) |
URI | |
| typedef size_t(* | SerdSink) (const void *buf, size_t len, void *stream) |
| static const SerdURI | SERD_URI_NULL |
| SERD_API const uint8_t * | serd_uri_to_path (const uint8_t *uri) |
| SERD_API uint8_t * | serd_file_uri_parse (const uint8_t *uri, uint8_t **hostname) |
| SERD_API bool | serd_uri_string_has_scheme (const uint8_t *utf8) |
| SERD_API SerdStatus | serd_uri_parse (const uint8_t *utf8, SerdURI *out) |
| SERD_API void | serd_uri_resolve (const SerdURI *uri, const SerdURI *base, SerdURI *out) |
| See http://tools.ietf.org/html/rfc3986#section-5.2.2. | |
| SERD_API size_t | serd_uri_serialise (const SerdURI *uri, SerdSink sink, void *stream) |
| See http://tools.ietf.org/html/rfc3986#section-5.3. | |
| SERD_API size_t | serd_uri_serialise_relative (const SerdURI *uri, const SerdURI *base, const SerdURI *root, SerdSink sink, void *stream) |
| See http://tools.ietf.org/html/rfc3986#section-5.3. | |
Event Handlers | |
| typedef SerdStatus(* | SerdErrorSink) (void *handle, const SerdError *error) |
| typedef SerdStatus(* | SerdBaseSink) (void *handle, const SerdNode *uri) |
| typedef SerdStatus(* | SerdPrefixSink) (void *handle, const SerdNode *name, const SerdNode *uri) |
| typedef SerdStatus(* | SerdStatementSink) (void *handle, SerdStatementFlags flags, const SerdNode *graph, const SerdNode *subject, const SerdNode *predicate, const SerdNode *object, const SerdNode *object_datatype, const SerdNode *object_lang) |
| typedef SerdStatus(* | SerdEndSink) (void *handle, const SerdNode *node) |
String Utilities | |
| SERD_API const uint8_t * | serd_strerror (SerdStatus status) |
| Return a string describing a status code. | |
| SERD_API size_t | serd_strlen (const uint8_t *str, size_t *n_bytes, SerdNodeFlags *flags) |
| SERD_API double | serd_strtod (const char *str, char **endptr) |
| SERD_API void * | serd_base64_decode (const uint8_t *str, size_t len, size_t *size) |
Environment | |
| SERD_API SerdEnv * | serd_env_new (const SerdNode *base_uri) |
| SERD_API void | serd_env_free (SerdEnv *env) |
| SERD_API const SerdNode * | serd_env_get_base_uri (const SerdEnv *env, SerdURI *out) |
| SERD_API SerdStatus | serd_env_set_base_uri (SerdEnv *env, const SerdNode *uri) |
| SERD_API SerdStatus | serd_env_set_prefix (SerdEnv *env, const SerdNode *name, const SerdNode *uri) |
| SERD_API SerdStatus | serd_env_set_prefix_from_strings (SerdEnv *env, const uint8_t *name, const uint8_t *uri) |
| SERD_API bool | serd_env_qualify (const SerdEnv *env, const SerdNode *uri, SerdNode *prefix, SerdChunk *suffix) |
| SERD_API SerdStatus | serd_env_expand (const SerdEnv *env, const SerdNode *curie, SerdChunk *uri_prefix, SerdChunk *uri_suffix) |
| SERD_API SerdNode | serd_env_expand_node (const SerdEnv *env, const SerdNode *node) |
| SERD_API void | serd_env_foreach (const SerdEnv *env, SerdPrefixSink func, void *handle) |
This is the complete public C API of serd.
A lightweight RDF syntax library.
| typedef SerdStatus(* SerdBaseSink) (void *handle, const SerdNode *uri) |
Sink (callback) for base URI changes.
Called whenever the base URI of the serialisation changes.
| typedef SerdStatus(* SerdEndSink) (void *handle, const SerdNode *node) |
Sink (callback) for anonymous node end markers.
This is called to indicate that the anonymous node with the given value will no longer be referred to by any future statements (i.e. the anonymous serialisation of the node is finished).
| typedef struct SerdEnvImpl SerdEnv |
Lexical environment for relative URIs or CURIEs (base URI and namespaces).
| typedef struct SerdEnvImpl SerdEnv |
Environment.
Represents the state required to resolve a CURIE or relative URI, e.g. the base URI and set of namespace prefixes at a particular point.
| typedef SerdStatus(* SerdErrorSink) (void *handle, const SerdError *error) |
Sink (callback) for errors.
| handle | Handle for user data. |
| error | Error description. |
| typedef uint32_t SerdNodeFlags |
Bitwise OR of SerdNodeFlag values.
| typedef uint32_t SerdNodeFlags |
Bitwise OR of SerdNodeFlag values.
Sink (callback) for namespace definitions.
Called whenever a prefix is defined in the serialisation.
| typedef struct SerdReaderImpl SerdReader |
Streaming parser that reads a text stream and writes to a statement sink.
| typedef struct SerdReaderImpl SerdReader |
RDF reader.
Parses RDF by calling user-provided sink functions as input is consumed (much like an XML SAX parser).
Sink function for raw string output.
| typedef uint32_t SerdStatementFlags |
Bitwise OR of SerdStatementFlag values.
| typedef uint32_t SerdStatementFlags |
Bitwise OR of SerdNodeFlag values.
| typedef SerdStatus(* SerdStatementSink) (void *handle, SerdStatementFlags flags, const SerdNode *graph, const SerdNode *subject, const SerdNode *predicate, const SerdNode *object, const SerdNode *object_datatype, const SerdNode *object_lang) |
Sink (callback) for statements.
Called for every RDF statement in the serialisation.
| typedef struct SerdWriterImpl SerdWriter |
Streaming serialiser that writes a text stream as statements are pushed.
| typedef struct SerdWriterImpl SerdWriter |
RDF writer.
Provides a number of functions to allow writing RDF syntax out to some stream. These functions are deliberately compatible with the sink functions used by SerdReader, so a reader can be directly connected to a writer to re-serialise a document with minimal overhead.
| enum SerdNodeFlag |
| enum SerdNodeFlag |
| enum SerdStatementFlag |
Flags indicating inline abbreviation information for a statement.
| enum SerdStatementFlag |
Flags indication inline abbreviation information for a statement.
| enum SerdStatus |
Return status code.
| enum SerdStatus |
Return status code.
| enum SerdStyle |
Syntax style options.
These flags allow more precise control of writer output style. Note that some options are only supported for some syntaxes, for example, NTriples does not support abbreviation and is always ASCII.
| Enumerator | |
|---|---|
| SERD_STYLE_ABBREVIATED | Abbreviate triples when possible. |
| SERD_STYLE_ASCII | Escape all non-ASCII characters. |
| SERD_STYLE_RESOLVED | Resolve URIs against base URI. |
| SERD_STYLE_CURIED | Shorten URIs into CURIEs. |
| SERD_STYLE_BULK | Write output in pages. |
| enum SerdStyle |
Syntax style options.
The style of the writer output can be controlled by ORing together values from this enumeration. Note that some options are only supported for some syntaxes (e.g. NTriples does not support abbreviation and is always ASCII).
| Enumerator | |
|---|---|
| SERD_STYLE_ABBREVIATED | Abbreviate triples when possible. |
| SERD_STYLE_ASCII | Escape all non-ASCII characters. |
| SERD_STYLE_RESOLVED | Resolve URIs against base URI. |
| SERD_STYLE_CURIED | Shorten URIs into CURIEs. |
| SERD_STYLE_BULK | Write output in pages. |
| enum SerdSyntax |
RDF syntax type.
| Enumerator | |
|---|---|
| SERD_TURTLE | Terse triples http://www.w3.org/TR/turtle. |
| SERD_NTRIPLES | Line-based triples http://www.w3.org/TR/n-triples/. |
| SERD_NQUADS | Line-based quads http://www.w3.org/TR/n-quads/. |
| SERD_TRIG | Terse quads http://www.w3.org/TR/trig/. |
| enum SerdSyntax |
| enum SerdType |
Type of a node.
An RDF node, in the abstract sense, can be either a resource, literal, or a blank. This type is more precise, because syntactically there are two ways to refer to a resource (by URI or CURIE).
There are also two ways to refer to a blank node in syntax (by ID or anonymously), but this is handled by statement flags rather than distinct node types.
| Enumerator | |
|---|---|
| SERD_NOTHING | The type of a nonexistent node. This type is useful as a sentinel, but is never emitted by the reader. |
| SERD_LITERAL | Literal value. A literal optionally has either a language, or a datatype (not both). |
| SERD_URI | URI (absolute or relative). Value is an unquoted URI string, which is either a relative reference with respect to the current base URI (e.g. "foo/bar"), or an absolute URI (e.g. "http://example.org/foo").
|
| SERD_CURIE | CURIE, a shortened URI. Value is an unquoted CURIE string relative to the current environment, e.g. "rdf:type".
|
| SERD_BLANK | A blank node. Value is a blank node ID without any syntactic prefix, like "id3", which is meaningful only within this serialisation.
|
| enum SerdType |
Type of a syntactic RDF node.
This is more precise than the type of an abstract RDF node. An abstract node is either a resource, literal, or blank. In syntax there are two ways to refer to a resource (by URI or CURIE) and two ways to refer to a blank (by ID or anonymously). Anonymous (inline) blank nodes are expressed using SerdStatementFlags rather than this type.
| Enumerator | |
|---|---|
| SERD_NOTHING | The type of a nonexistent node. This type is useful as a sentinel, but is never emitted by the reader. |
| SERD_LITERAL | Literal value. A literal optionally has either a language, or a datatype (not both). |
| SERD_URI | URI (absolute or relative). Value is an unquoted URI string, which is either a relative reference with respect to the current base URI (e.g. "foo/bar"), or an absolute URI (e.g. "http://example.org/foo").
|
| SERD_CURIE | CURIE, a shortened URI. Value is an unquoted CURIE string relative to the current environment, e.g. "rdf:type".
|
| SERD_BLANK | A blank node. Value is a blank node ID, e.g. "id3", which is meaningful only within this serialisation.
|
Decode a base64 string. This function can be used to deserialise a blob node created with serd_node_new_blob().
| str | Base64 string to decode. |
| len | The length of str. |
| size | Set to the size of the returned blob in bytes. |
A convenience sink function for writing to a string.
This function can be used as a SerdSink to write to a SerdChunk which is resized as necessary with realloc(). The stream parameter must point to an initialized SerdChunk. When the write is finished, the string should be retrieved with serd_chunk_sink_finish().
Finish a serialisation to a chunk with serd_chunk_sink().
The returned string is the result of the serialisation, which is NULL terminated (by this function) and owned by the caller.
| SERD_API SerdStatus serd_env_expand | ( | const SerdEnv * | env, |
| const SerdNode * | curie, | ||
| SerdChunk * | uri_prefix, | ||
| SerdChunk * | uri_suffix ) |
Expand curie.
Expand node, which must be a CURIE or URI, to a full URI.
Call func for each prefix defined in env.
Get the current base URI.
| SERD_API bool serd_env_qualify | ( | const SerdEnv * | env, |
| const SerdNode * | uri, | ||
| SerdNode * | prefix, | ||
| SerdChunk * | suffix ) |
Qualify uri into a CURIE if possible.
| SERD_API SerdStatus serd_env_set_base_uri | ( | SerdEnv * | env, |
| const SerdNode * | uri ) |
Set the current base URI.
| SERD_API SerdStatus serd_env_set_prefix | ( | SerdEnv * | env, |
| const SerdNode * | name, | ||
| const SerdNode * | uri ) |
Set a namespace prefix.
| SERD_API SerdStatus serd_env_set_prefix_from_strings | ( | SerdEnv * | env, |
| const uint8_t * | name, | ||
| const uint8_t * | uri ) |
Set a namespace prefix.
A convenience sink function for writing to a FILE*.
This function can be used as a SerdSink when writing to a FILE*. The stream parameter must be a FILE* opened for writing.
Get the unescaped path and hostname from a file URI.
| uri | A file URI. |
| hostname | If non-NULL, set to the hostname, if present. |
The returned path and *hostname must be freed with free().
| SERD_API void serd_free | ( | void *SERD_NULLABLE | ptr | ) |
Free memory allocated by Serd
This function exists because some systems require memory allocated by a library to be freed by code in the same library. It is otherwise equivalent to the standard C free() function.
Make a deep copy of node.
Free any data owned by node.
Note that if node is itself dynamically allocated (which is not the case for nodes created internally by serd), it will not be freed.
Make a (shallow) node from str.
This measures, but does not copy, str. No memory is allocated.
Create a node by serialising buf into an xsd:base64Binary string. This function can be used to make a serialisable node out of arbitrary binary data, which can be decoded using serd_base64_decode().
| buf | Raw binary input data. |
| size | Size of buf. |
| wrap_lines | Wrap lines at 76 characters to conform to RFC 2045. |
Create a new node by serialising d into an xsd:decimal string.
The resulting node will always contain a .', start with a digit, and end with a digit (i.e. will have a leading and/or trailing 0' if necessary). It will never be in scientific notation. A maximum of frac_digits digits will be written after the decimal point, but trailing zeros will automatically be omitted (except one if d is a round integer).
Note that about 16 and 8 fractional digits are required to precisely represent a double and float, respectively.
| d | The value for the new node. |
| frac_digits | The maximum number of digits after the decimal place. |
Create a new node by serialising d into an xsd:decimal string
The resulting node will always contain a .', start with a digit, and end with a digit (i.e. will have a leading and/or trailing 0' if necessary). It will never be in scientific notation. A maximum of frac_digits digits will be written after the decimal point, but trailing zeros will automatically be omitted (except one if d is a round integer).
Note that about 16 and 8 fractional digits are required to precisely represent a double and float, respectively.
| d | The value for the new node. |
| frac_digits | The maximum number of digits after the decimal place. |
| SERD_API SerdNode serd_node_new_file_uri | ( | const uint8_t * | path, |
| const uint8_t * | hostname, | ||
| SerdURI * | out, | ||
| bool | escape ) |
Create a new file URI node from a file system path and optional hostname.
Backslashes in Windows paths will be converted and '' will always be percent encoded. If escape is true, all other invalid characters will be percent encoded as well.
If path is relative, hostname is ignored. If out is not NULL, it will be set to the parsed URI.
| SERD_API SerdNode serd_node_new_relative_uri | ( | const SerdURI * | uri, |
| const SerdURI * | base, | ||
| const SerdURI * | root, | ||
| SerdURI * | out ) |
Create a new node by serialising uri into a new relative URI.
| uri | The URI to serialise. |
| base | Base URI to make uri relative to, if possible. |
| root | Root URI for resolution (see serd_uri_serialise_relative()). |
| out | Set to the parsing of the new URI (i.e. points only to memory owned by the new returned node). |
| SERD_API SerdNode serd_node_new_uri_from_node | ( | const SerdNode * | uri_node, |
| const SerdURI * | base, | ||
| SerdURI * | out ) |
Simple wrapper for serd_node_new_uri() to resolve a URI node.
| SERD_API SerdNode serd_node_new_uri_from_string | ( | const uint8_t * | str, |
| const SerdURI * | base, | ||
| SerdURI * | out ) |
Simple wrapper for serd_node_new_uri() to resolve a URI string.
| SERD_API 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 (e.g. a store, or other files). 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.
| SERD_API SerdStatus serd_reader_end_stream | ( | SerdReader * | me | ) |
Finish an incremental read from a file handle.
| SERD_API void serd_reader_free | ( | SerdReader * | reader | ) |
Free reader.
| SERD_API void * serd_reader_get_handle | ( | const SerdReader * | reader | ) |
Return the handle passed to serd_reader_new().
| SERD_API 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.
| SERD_API SerdStatus serd_reader_read_chunk | ( | SerdReader * | me | ) |
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.
| SERD_API SerdStatus serd_reader_read_file | ( | SerdReader * | reader, |
| const uint8_t * | uri ) |
Read a file at a given uri.
| SERD_API SerdStatus serd_reader_read_file_handle | ( | SerdReader * | reader, |
| FILE * | file, | ||
| const uint8_t * | name ) |
Read file.
| SERD_API SerdStatus serd_reader_read_string | ( | SerdReader * | me, |
| const uint8_t * | utf8 ) |
Read utf8.
| SERD_API 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).
| SERD_API void serd_reader_set_error_sink | ( | SerdReader * | reader, |
| SerdErrorSink | error_sink, | ||
| void * | handle ) |
Set a function to be called when errors occur during reading.
The error_sink will be called with handle as its first argument. If no error function is set, errors are printed to stderr in GCC style.
| SERD_API 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.
| SERD_API SerdStatus serd_reader_start_stream | ( | SerdReader * | me, |
| 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, set bulk to false.
| SERD_API const uint8_t * serd_strerror | ( | SerdStatus | status | ) |
Return a string describing a status code.
Return a string describing a status code.
| SERD_API size_t serd_strlen | ( | const uint8_t * | str, |
| size_t * | n_bytes, | ||
| SerdNodeFlags * | flags ) |
Measure a UTF-8 string.
| str | A null-terminated UTF-8 string. |
| n_bytes | (Output) Set to the size of str in bytes (except NULL). |
| flags | (Output) Set to the applicable flags. |
Parse a string to a double.
The API of this function is identical to the standard C strtod function, except this function is locale-independent and always matches the lexical format used in the Turtle grammar (the decimal point is always ".").
| SERD_API SerdStatus serd_uri_parse | ( | const uint8_t * | utf8, |
| SerdURI * | out ) |
Parse utf8, writing result to out.
| SERD_API size_t serd_uri_serialise_relative | ( | const SerdURI * | uri, |
| const SerdURI * | base, | ||
| const SerdURI * | root, | ||
| SerdSink | sink, | ||
| void * | stream ) |
See http://tools.ietf.org/html/rfc3986#section-5.3.
Serialise uri relative to base with a series of calls to sink.
The uri is written as a relative URI iff if it a child of base and root. The optional root parameter must be a prefix of base and can be used keep up-references ("../") within a certain namespace.
Return true iff utf8 starts with a valid URI scheme.
Return the local path for uri, or NULL if uri is not a file URI. Note this (inappropriately named) function only removes the file scheme if necessary, and returns uri unmodified if it is an absolute path. Percent encoding and other issues are not handled, to properly convert a file URI to a path, use serd_file_uri_parse().
| SERD_API void serd_writer_chop_blank_prefix | ( | SerdWriter * | writer, |
| const uint8_t * | prefix ) |
Set a prefix to be removed from matching blank node identifiers.
| SERD_API SerdStatus serd_writer_end_anon | ( | SerdWriter * | writer, |
| const SerdNode * | node ) |
Mark the end of an anonymous node's description.
Note this function can be safely casted to SerdEndSink.
| SERD_API SerdStatus serd_writer_finish | ( | SerdWriter * | writer | ) |
Finish a write.
| SERD_API void serd_writer_free | ( | SerdWriter * | writer | ) |
Free writer.
| SERD_API SerdEnv * serd_writer_get_env | ( | SerdWriter * | writer | ) |
Return the env used by writer.
| SERD_API SerdWriter * serd_writer_new | ( | SerdSyntax | syntax, |
| SerdStyle | style, | ||
| SerdEnv * | env, | ||
| const SerdURI * | base_uri, | ||
| SerdSink | sink, | ||
| void * | stream ) |
Create a new RDF writer.
| SERD_API SerdStatus serd_writer_set_base_uri | ( | SerdWriter * | writer, |
| const SerdNode * | uri ) |
Set the current output base URI (and emit directive if applicable).
Note this function can be safely casted to SerdBaseSink.
| SERD_API void serd_writer_set_error_sink | ( | SerdWriter * | writer, |
| SerdErrorSink | error_sink, | ||
| void * | handle ) |
Set a function to be called when errors occur during writing.
The error_sink will be called with handle as its first argument. If no error function is set, errors are printed to stderr.
| SERD_API SerdStatus serd_writer_set_prefix | ( | SerdWriter * | writer, |
| const SerdNode * | name, | ||
| const SerdNode * | uri ) |
Set a namespace prefix (and emit directive if applicable).
Note this function can be safely casted to SerdPrefixSink.
| SERD_API SerdStatus serd_writer_set_root_uri | ( | SerdWriter * | writer, |
| const SerdNode * | uri ) |
Set the current root URI.
The root URI should be a prefix of the base URI. The path of the root URI is the highest path any relative up-reference can refer to. For example, with root file:///foo/root and base file:///foo/root/base, file:///foo/root will be written as <../>, but file:///foo will be written non-relatively as file:///foo. If the root is not explicitly set, it defaults to the base URI, so no up-references will be created at all.
| SERD_API SerdStatus serd_writer_write_statement | ( | SerdWriter * | writer, |
| SerdStatementFlags | flags, | ||
| const SerdNode * | graph, | ||
| const SerdNode * | subject, | ||
| const SerdNode * | predicate, | ||
| const SerdNode * | object, | ||
| const SerdNode * | object_datatype, | ||
| const SerdNode * | object_lang ) |
Write a statement.
Note this function can be safely casted to SerdStatementSink.
|
static |