Sord
0.8.0
|
00001 /* 00002 Copyright 2011-2012 David Robillard <http://drobilla.net> 00003 00004 Permission to use, copy, modify, and/or distribute this software for any 00005 purpose with or without fee is hereby granted, provided that the above 00006 copyright notice and this permission notice appear in all copies. 00007 00008 THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 00009 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 00010 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 00011 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 00012 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 00013 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 00014 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 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 } /* extern "C" */ 00599 #endif 00600 00601 #endif /* SORD_SORD_H */