From e3fd76d4e5beb8596be651b41be730f62cfdc9d0 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 3 Apr 2023 10:49:04 -0400 Subject: Make URI writing stricter by default --- src/serdi.c | 2 +- src/writer.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/serdi.c b/src/serdi.c index 97e9bc22..d82198ad 100644 --- a/src/serdi.c +++ b/src/serdi.c @@ -89,7 +89,7 @@ print_usage(const char* const name, const bool error) " -b Write output in blocks for performance.\n" " -c PREFIX Chop PREFIX from matching blank node IDs.\n" " -e Eat input one character at a time.\n" - " -f Keep full URIs in input (don't qualify).\n" + " -f Fast and loose URI pass-through.\n" " -h Display this help and exit.\n" " -i SYNTAX Input syntax: turtle/ntriples/trig/nquads.\n" " -l Lax (non-strict) parsing.\n" diff --git a/src/writer.c b/src/writer.c index fcd0e1dc..8fdca6f9 100644 --- a/src/writer.c +++ b/src/writer.c @@ -677,19 +677,22 @@ write_curie(SerdWriter* const writer, SerdChunk suffix = {NULL, 0}; SerdStatus st = SERD_SUCCESS; - switch (writer->syntax) { - case SERD_NTRIPLES: - case SERD_NQUADS: + // In fast-and-loose Turtle/TriG mode CURIEs are simply passed through + const bool fast = + !(writer->style & (SERD_STYLE_CURIED | SERD_STYLE_RESOLVED)); + + if (!supports_abbrev(writer) || !fast) { if ((st = serd_env_expand(writer->env, node, &prefix, &suffix))) { return w_err(writer, st, "undefined namespace prefix '%s'\n", node->buf); } + } + + if (!supports_abbrev(writer)) { TRY(st, esink("<", 1, writer)); write_uri(writer, prefix.buf, prefix.len); write_uri(writer, suffix.buf, suffix.len); TRY(st, esink(">", 1, writer)); - break; - case SERD_TURTLE: - case SERD_TRIG: + } else { if (is_inline_start(writer, field, flags)) { ++writer->indent; TRY(st, write_sep(writer, SEP_ANON_BEGIN)); @@ -702,7 +705,7 @@ write_curie(SerdWriter* const writer, } } - return SERD_SUCCESS; + return st; } SERD_NODISCARD static SerdStatus -- cgit v1.2.1