Sord  0.8.0
sord.h
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 */