SordIter* sord_begin(const SordModel* sord) { if (sord_num_quads(sord) == 0) { return NULL; } else { ZixBTreeIter* cur = zix_btree_begin(sord->indices[DEFAULT_ORDER]); SordQuad pat = { 0, 0, 0, 0 }; return sord_iter_new(sord, cur, pat, DEFAULT_ORDER, ALL, 0); } }
int main(int argc, char** argv) { if (argc < 2) { return print_usage(argv[0], true); } FILE* in_fd = NULL; SerdSyntax input_syntax = SERD_TURTLE; SerdSyntax output_syntax = SERD_NTRIPLES; bool from_file = true; const uint8_t* in_name = NULL; int a = 1; for (; a < argc && argv[a][0] == '-'; ++a) { if (argv[a][1] == '\0') { in_name = (const uint8_t*)"(stdin)"; in_fd = stdin; break; } else if (argv[a][1] == 'h') { return print_usage(argv[0], false); } else if (argv[a][1] == 'v') { return print_version(); } else if (argv[a][1] == 's') { in_name = (const uint8_t*)"(string)"; from_file = false; ++a; break; } else if (argv[a][1] == 'i') { if (++a == argc) { fprintf(stderr, "Missing value for -i\n"); return 1; } if (!set_syntax(&input_syntax, argv[a])) { return 1; } } else if (argv[a][1] == 'o') { if (++a == argc) { fprintf(stderr, "Missing value for -o\n"); return 1; } if (!set_syntax(&output_syntax, argv[a])) { return 1; } } else { fprintf(stderr, "Unknown option `%s'\n", argv[a]); return print_usage(argv[0], true); } } if (a == argc) { fprintf(stderr, "Missing input\n"); return 1; } const uint8_t* input = (const uint8_t*)argv[a++]; uint8_t* in_path = NULL; if (from_file) { in_name = in_name ? in_name : input; if (!in_fd) { in_path = absolute_path(serd_uri_to_path(in_name)); if (!in_path || !(in_fd = fopen((const char*)in_path, "rb"))) { return 1; } } } SerdURI base_uri = SERD_URI_NULL; SerdNode base_uri_node = SERD_NODE_NULL; if (a < argc) { // Base URI given on command line base_uri_node = serd_node_new_uri_from_string( (const uint8_t*)argv[a], NULL, &base_uri); } else if (from_file) { // Use input file URI base_uri_node = serd_node_new_file_uri(in_path, NULL, &base_uri, false); } if (!base_uri_node.buf) { fprintf(stderr, "Missing base URI\n"); return 1; } SordWorld* world = sord_world_new(); SordModel* sord = sord_new(world, SORD_SPO|SORD_OPS, false); SerdEnv* env = serd_env_new(&base_uri_node); SerdReader* reader = sord_new_reader(sord, env, input_syntax, NULL); const SerdStatus status = (from_file) ? serd_reader_read_file_handle(reader, in_fd, in_name) : serd_reader_read_string(reader, input); serd_reader_free(reader); fprintf(stderr, "Loaded %lu statements\n", (unsigned long)sord_num_quads(sord)); SerdEnv* write_env = serd_env_new(&base_uri_node); int output_style = SERD_STYLE_RESOLVED; if (output_syntax == SERD_NTRIPLES) { output_style |= SERD_STYLE_ASCII; } else { output_style |= SERD_STYLE_CURIED | SERD_STYLE_ABBREVIATED; } SerdWriter* writer = serd_writer_new( output_syntax, (SerdStyle)output_style, write_env, &base_uri, serd_file_sink, stdout); // Write @prefix directives serd_env_foreach(env, (SerdPrefixSink)serd_writer_set_prefix, writer); // Write statements sord_write(sord, writer, NULL); serd_writer_finish(writer); serd_writer_free(writer); serd_env_free(env); serd_env_free(write_env); serd_node_free(&base_uri_node); sord_free(sord); sord_world_free(world); return (status > SERD_FAILURE) ? 1 : 0; }