Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
|
|
This is mainly for developer or power-user cases, where one wants to look at
some data for investigation or debugging. In such cases, it's common for the
set of prefixes to be implicitly known (because they are baked in to the
application, for example), so printing them just produces a large amount of
redundant noise.
That said, it can also be useful programmatically, because it allows several
snippets to be written independently and ultimately concatenated (with a header
to define the prefixes) without redundancy.
|
|
This makes the paging mechanism an internal detail once again. While it's
conceptually elegant to simply have a single write interface and have the block
dumper just be another implementation of that, unfortunately it is not
practical. The inlining of serd_block_dumper_write() is a significant
performance boost, because it avoids a non-inlinable function call of overhead
per character.
Compared to the SerdByteSink approach, this removes the burden and overhead of
needing to dynamically allocate the structure itself.
|
|
Essentially replaces serd_buffer_sink_finish() with serd_buffer_close(), which
makes writing to a buffer consistent with writing to a file or anything else.
|
|
This is a common convention in Turtle and TriG because the special "a" syntax
for rdf type as the first property looks nice, makes things easier to read, and
can be useful for streaming implementations because the type of the instance is
known before reading its properties.
Also significantly clean up the pretty-printing implementation in the process.
|
|
|
|
|
|
The earlier "test" was just hitting the code without actually checking the
output. This new suite is a set of pretty-printed documents which serd must
reproduce from a model exactly to pass. This should make it easy to add cases
in the future, since each case is just a document, as it should look.
|
|
Though potentially useful, I don't think the complexity cost of the old
interface (both to the implementation and to the user) is worth it. A special
tool to transform blank node labels (for example with regular expressions)
would be a better approach to this if it's ever needed in the future.
|
|
|
|
This is generally more convenient, and the node was just being copied anyway.
|
|
|
|
|
|
Clang issues warnings at build time based on the SERD_NONNULL annotations,
which is a much better approach in general. However, it does not cover cases
where the API is being used with another compiler, or without a compiler that
can statically check things at all (such as Python or other dynamic language
bindings).
In those situations, getting a clear assertion message is a lot less confusing
than a random crash somewhere in serd, and it makes it clear that the bug is in
the caller, so I think it's worth the tedious verbosity.
|
|
|
|
|
|
|
|
|
|
Writing having side-effects seems questionable in general, and this prepares
things for expanding URIs in the reader.
|
|
|
|
This adds a reader flag and serdi option for extending a syntax with support
for SPARQL-like variables, for storing things like patterns or simple queries.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This fixes alignment issues on ARM. Since this stack is just for WriteContext
which has a fixed size, using SerdStack here just made things more confusing
anyway.
|
|
The unset value for flags should represent the best default, which in this case
is strict parsing. Lax parsing is the riskier opt-in option.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This removes the obligation from the caller to correctly maintain flags to
describe the current anonymous context, instead making the writer handle this
itself as much as possible. Flags remain for the cases the writer can not
infer from context: the start of anonymous subject and object nodes.
|
|
|
|
|
|
|
|
|
|
This makes plumbing easier since everything goes through the same "stream" and
only one callback is required to handling everything. It's also more easily
extensible in case more event types need to be added in the future.
|
|
|
|
|
|
A statement field enum was previously only used by the writer internally, but
will be used in the public API (without a sentinel value) in following commits.
|