diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/describe.c | 11 | ||||
-rw-r--r-- | src/n3.c | 6 | ||||
-rw-r--r-- | src/writer.c | 5 |
3 files changed, 15 insertions, 7 deletions
diff --git a/src/describe.c b/src/describe.c index 9bd9d3ae..718eaf1c 100644 --- a/src/describe.c +++ b/src/describe.c @@ -204,7 +204,7 @@ write_range_statement(const SerdSink* const sink, // First write inline list subject, which this statement will follow if (zix_hash_insert(list_subjects, subject) != ZIX_STATUS_EXISTS) { st = write_list( - sink, model, list_subjects, 2, SERD_LIST_S, subject, graph); + sink, model, list_subjects, 2, flags | SERD_LIST_S, subject, graph); } } } @@ -226,9 +226,12 @@ write_range_statement(const SerdSink* const sink, serd_cursor_free(iter); } else if (object_style == LIST_O) { // Write list object like "( ... )" - flags |= SERD_LIST_O; - if (!(st = serd_sink_write_statement(sink, flags, statement))) { - st = write_list(sink, model, list_subjects, depth + 1, 0, object, graph); + if (!(st = + serd_sink_write_statement(sink, flags | SERD_LIST_O, statement))) { + flags = flags & ~((unsigned)SERD_LIST_S); + + st = + write_list(sink, model, list_subjects, depth + 1, flags, object, graph); } } else { @@ -866,11 +866,11 @@ read_collection(SerdReader* const reader, return SERD_ERR_OVERFLOW; } - if (ctx.subject) { - // subject predicate _:head + if (ctx.subject) { // Reading a collection object *ctx.flags |= (end ? 0 : SERD_LIST_O); TRY(st, emit_statement(reader, ctx, *dest)); - } else { + *ctx.flags &= ~((unsigned)SERD_LIST_O); + } else { // Reading a collection subject *ctx.flags |= (end ? 0 : SERD_LIST_S); } diff --git a/src/writer.c b/src/writer.c index 5f9fdaab..452d3679 100644 --- a/src/writer.c +++ b/src/writer.c @@ -1064,6 +1064,11 @@ write_list_statement(SerdWriter* const writer, SerdStatus st = SERD_SUCCESS; bool is_end = false; + if (serd_node_equals(predicate, writer->world->rdf_first) && + serd_node_equals(object, writer->world->rdf_nil)) { + return esink("()", 2, writer); + } + TRY(st, write_list_obj(writer, flags, predicate, object, &is_end)); if (is_end) { pop_context(writer); |