aboutsummaryrefslogtreecommitdiffstats
path: root/src/serdi.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-11-09 14:07:46 +0100
committerDavid Robillard <d@drobilla.net>2021-03-08 23:35:30 -0500
commit7efaf2431b9c1a96f6ed2e28626aff4886efc749 (patch)
treeba84dfdb11c4e952ff39621a9b8fcf834e9592a5 /src/serdi.c
parent1ba44998b0c5b8d76d574531d60b703ad56a2c8a (diff)
downloadserd-7efaf2431b9c1a96f6ed2e28626aff4886efc749.tar.gz
serd-7efaf2431b9c1a96f6ed2e28626aff4886efc749.tar.bz2
serd-7efaf2431b9c1a96f6ed2e28626aff4886efc749.zip
Add validation to command line interface
Diffstat (limited to 'src/serdi.c')
-rw-r--r--src/serdi.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/serdi.c b/src/serdi.c
index 0955079f..70c52682 100644
--- a/src/serdi.c
+++ b/src/serdi.c
@@ -56,6 +56,7 @@ print_usage(const char* name, bool error)
fprintf(os, "Read and write RDF syntax.\n");
fprintf(os, "Use - for INPUT to read from standard input.\n\n");
fprintf(os, " -I BASE_URI Input base URI.\n");
+ fprintf(os, " -V Validate inputs.\n");
fprintf(os, " -a Write ASCII output if possible.\n");
fprintf(os, " -b Fast bulk output for large serialisations.\n");
fprintf(os, " -c PREFIX Chop PREFIX from matching blank node IDs.\n");
@@ -147,6 +148,7 @@ main(int argc, char** argv)
bool bulk_write = false;
bool no_inline = false;
bool osyntax_set = false;
+ bool validate = false;
bool use_model = false;
bool quiet = false;
size_t stack_size = 4194304;
@@ -167,6 +169,8 @@ main(int argc, char** argv)
}
base = serd_new_uri(SERD_MEASURE_STRING(argv[a]));
+ } else if (argv[a][1] == 'V') {
+ validate = use_model = true;
} else if (argv[a][1] == 'a') {
writer_flags |= SERD_WRITE_ASCII;
} else if (argv[a][1] == 'b') {
@@ -314,9 +318,10 @@ main(int argc, char** argv)
SerdSink* inserter = NULL;
const SerdSink* sink = NULL;
if (use_model) {
- const SerdModelFlags flags = SERD_INDEX_SPO |
- (input_has_graphs ? SERD_INDEX_GRAPHS : 0u) |
- (no_inline ? 0u : SERD_INDEX_OPS);
+ const SerdModelFlags flags =
+ SERD_INDEX_SPO | (input_has_graphs ? SERD_INDEX_GRAPHS : 0u) |
+ (no_inline ? 0u : SERD_INDEX_OPS) | (validate ? SERD_STORE_CURSORS : 0u);
+
model = serd_model_new(world, flags);
inserter = serd_inserter_new(model, env, NULL);
sink = inserter;
@@ -391,6 +396,10 @@ main(int argc, char** argv)
}
free(prefix);
+ if (!st && validate) {
+ st = serd_validate(model);
+ }
+
if (st <= SERD_FAILURE && use_model) {
const SerdSink* writer_sink = serd_writer_sink(writer);
SerdRange* range = serd_model_all(model);