00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00021 #ifndef SORD_SORD_H
00022 #define SORD_SORD_H
00023
00024 #include <stddef.h>
00025 #include <stdint.h>
00026 #include <stdio.h>
00027
00028 #include "serd/serd.h"
00029
00030 #ifdef SORD_SHARED
00031 # ifdef _WIN32
00032 # define SORD_LIB_IMPORT __declspec(dllimport)
00033 # define SORD_LIB_EXPORT __declspec(dllexport)
00034 # else
00035 # define SORD_LIB_IMPORT __attribute__((visibility("default")))
00036 # define SORD_LIB_EXPORT __attribute__((visibility("default")))
00037 # endif
00038 # ifdef SORD_INTERNAL
00039 # define SORD_API SORD_LIB_EXPORT
00040 # else
00041 # define SORD_API SORD_LIB_IMPORT
00042 # endif
00043 #else
00044 # define SORD_API
00045 #endif
00046
00047 #ifdef __cplusplus
00048 extern "C" {
00049 #else
00050 # include <stdbool.h>
00051 #endif
00052
00066 typedef struct SordWorldImpl SordWorld;
00067
00075 typedef struct SordModelImpl SordModel;
00076
00084 typedef struct SordInserterImpl SordInserter;
00085
00089 typedef struct SordIterImpl SordIter;
00090
00097 typedef struct SordNodeImpl SordNode;
00098
00104 typedef const SordNode* SordQuad[4];
00105
00109 typedef enum {
00110 SORD_SUBJECT = 0,
00111 SORD_PREDICATE = 1,
00112 SORD_OBJECT = 2,
00113 SORD_GRAPH = 3
00114 } SordQuadIndex;
00115
00119 typedef enum {
00120 SORD_URI = 1,
00121 SORD_BLANK = 2,
00122 SORD_LITERAL = 3
00123 } SordNodeType;
00124
00128 typedef enum {
00129 SORD_SPO = 1,
00130 SORD_SOP = 1 << 1,
00131 SORD_OPS = 1 << 2,
00132 SORD_OSP = 1 << 3,
00133 SORD_PSO = 1 << 4,
00134 SORD_POS = 1 << 5
00135 } SordIndexOption;
00136
00148 SORD_API
00149 SordWorld*
00150 sord_world_new(void);
00151
00155 SORD_API
00156 void
00157 sord_world_free(SordWorld* world);
00158
00171 SORD_API
00172 SordNode*
00173 sord_new_uri(SordWorld* world, const uint8_t* uri);
00174
00178 SORD_API
00179 SordNode*
00180 sord_new_relative_uri(SordWorld* world,
00181 const uint8_t* str,
00182 const uint8_t* base_uri);
00183
00190 SORD_API
00191 SordNode*
00192 sord_new_blank(SordWorld* world, const uint8_t* str);
00193
00200 SORD_API
00201 SordNode*
00202 sord_new_literal(SordWorld* world,
00203 SordNode* datatype,
00204 const uint8_t* str,
00205 const char* lang);
00206
00213 SORD_API
00214 SordNode*
00215 sord_node_copy(const SordNode* node);
00216
00220 SORD_API
00221 void
00222 sord_node_free(SordWorld* world, SordNode* node);
00223
00227 SORD_API
00228 SordNodeType
00229 sord_node_get_type(const SordNode* node);
00230
00234 SORD_API
00235 const uint8_t*
00236 sord_node_get_string(const SordNode* node);
00237
00241 SORD_API
00242 const uint8_t*
00243 sord_node_get_string_counted(const SordNode* node, size_t* len);
00244
00248 SORD_API
00249 const char*
00250 sord_node_get_language(const SordNode* node);
00251
00255 SORD_API
00256 SordNode*
00257 sord_node_get_datatype(const SordNode* node);
00258
00262 SORD_API
00263 SerdNodeFlags
00264 sord_node_get_flags(const SordNode* node);
00265
00273 SORD_API
00274 bool
00275 sord_node_is_inline_object(const SordNode* node);
00276
00282 SORD_API
00283 bool
00284 sord_node_equals(const SordNode* a,
00285 const SordNode* b);
00286
00292 SORD_API
00293 const SerdNode*
00294 sord_node_to_serd_node(const SordNode* node);
00295
00301 SORD_API
00302 SordNode*
00303 sord_node_from_serd_node(SordWorld* world,
00304 SerdEnv* env,
00305 const SerdNode* node,
00306 const SerdNode* datatype,
00307 const SerdNode* lang);
00308
00326 SORD_API
00327 SordModel*
00328 sord_new(SordWorld* world,
00329 unsigned indices,
00330 bool graphs);
00331
00335 SORD_API
00336 void
00337 sord_free(SordModel* model);
00338
00342 SORD_API
00343 SordWorld*
00344 sord_get_world(SordModel* model);
00345
00351 SORD_API
00352 size_t
00353 sord_num_nodes(const SordWorld* world);
00354
00358 SORD_API
00359 size_t
00360 sord_num_quads(const SordModel* model);
00361
00365 SORD_API
00366 SordIter*
00367 sord_begin(const SordModel* model);
00368
00373 SORD_API
00374 SordIter*
00375 sord_find(SordModel* model, const SordQuad pat);
00376
00381 SORD_API
00382 SordIter*
00383 sord_search(SordModel* model,
00384 const SordNode* s,
00385 const SordNode* p,
00386 const SordNode* o,
00387 const SordNode* g);
00388
00392 SORD_API
00393 bool
00394 sord_ask(SordModel* model,
00395 const SordNode* s,
00396 const SordNode* p,
00397 const SordNode* o,
00398 const SordNode* g);
00399
00403 SORD_API
00404 uint64_t
00405 sord_count(SordModel* model,
00406 const SordNode* s,
00407 const SordNode* p,
00408 const SordNode* o,
00409 const SordNode* g);
00410
00414 SORD_API
00415 bool
00416 sord_contains(SordModel* model, const SordQuad pat);
00417
00421 SORD_API
00422 bool
00423 sord_add(SordModel* model, const SordQuad quad);
00424
00430 SORD_API
00431 void
00432 sord_remove(SordModel* model, const SordQuad quad);
00433
00443 SORD_API
00444 SordInserter*
00445 sord_inserter_new(SordModel* model,
00446 SerdEnv* env);
00447
00451 SORD_API
00452 void
00453 sord_inserter_free(SordInserter* inserter);
00454
00460 SORD_API
00461 SerdStatus
00462 sord_inserter_set_base_uri(SordInserter* inserter,
00463 const SerdNode* uri);
00464
00470 SORD_API
00471 SerdStatus
00472 sord_inserter_set_prefix(SordInserter* inserter,
00473 const SerdNode* name,
00474 const SerdNode* uri);
00475
00481 SORD_API
00482 SerdStatus
00483 sord_inserter_write_statement(SordInserter* inserter,
00484 SerdStatementFlags flags,
00485 const SerdNode* graph,
00486 const SerdNode* subject,
00487 const SerdNode* predicate,
00488 const SerdNode* object,
00489 const SerdNode* object_datatype,
00490 const SerdNode* object_lang);
00491
00501 SORD_API
00502 void
00503 sord_iter_get(const SordIter* iter, SordQuad quad);
00504
00508 SORD_API
00509 const SordNode*
00510 sord_iter_get_node(const SordIter* iter, SordQuadIndex index);
00511
00515 SORD_API
00516 const SordModel*
00517 sord_iter_get_model(SordIter* iter);
00518
00522 SORD_API
00523 bool
00524 sord_iter_next(SordIter* iter);
00525
00529 SORD_API
00530 bool
00531 sord_iter_end(const SordIter* iter);
00532
00536 SORD_API
00537 void
00538 sord_iter_free(SordIter* iter);
00539
00553 SORD_API
00554 bool
00555 sord_quad_match(const SordQuad x, const SordQuad y);
00556
00566 SORD_API
00567 SerdReader*
00568 sord_new_reader(SordModel* model,
00569 SerdEnv* env,
00570 SerdSyntax syntax,
00571 SordNode* graph);
00572
00576 SORD_API
00577 bool
00578 sord_write(SordModel* model,
00579 SerdWriter* writer,
00580 SordNode* graph);
00581
00587 SORD_API
00588 bool
00589 sord_write_iter(SordIter* iter,
00590 SerdWriter* writer);
00591
00597 #ifdef __cplusplus
00598 }
00599 #endif
00600
00601 #endif