1/* -*- Mode: c; c-basic-offset: 2 -*-
2 *
3 * rdf_storage.h - RDF Storage Factory and Storage interfaces and definitions
4 *
5 * Copyright (C) 2000-2008, David Beckett http://www.dajobe.org/
6 * Copyright (C) 2000-2005, University of Bristol, UK http://www.bristol.ac.uk/
7 *
8 * This package is Free Software and part of Redland http://librdf.org/
9 *
10 * It is licensed under the following three licenses as alternatives:
11 * 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
12 * 2. GNU General Public License (GPL) V2 or any newer version
13 * 3. Apache License, V2.0 or any newer version
14 *
15 * You may not use this file except in compliance with at least one of
16 * the above three licenses.
17 *
18 * See LICENSE.html or LICENSE.txt at the top of this package for the
19 * complete terms and further detail along with the license texts for
20 * the licenses in COPYING.LIB, COPYING and LICENSE-2.0.txt respectively.
21 *
22 *
23 */
24
25
26#ifndef LIBRDF_STORAGE_H
27#define LIBRDF_STORAGE_H
28
29#include <rdf_storage_module.h>
30
31#ifdef LIBRDF_INTERNAL
32#include <rdf_storage_internal.h>
33#endif
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39/* class methods */
40REDLAND_API
41int librdf_storage_register_factory(librdf_world *world, const char *name, const char *label, void (*factory) (librdf_storage_factory*));
42
43REDLAND_API
44int librdf_storage_enumerate(librdf_world* world, const unsigned int counter, const char **name, const char **label);
45
46
47/* constructor */
48REDLAND_API
49librdf_storage* librdf_new_storage(librdf_world *world, const char *storage_name, const char *name, const char *options_string);
50REDLAND_API
51librdf_storage* librdf_new_storage_with_options(librdf_world *world, const char *storage_name, const char *name, librdf_hash *options);
52REDLAND_API
53librdf_storage* librdf_new_storage_from_storage(librdf_storage* old_storage);
54REDLAND_API
55librdf_storage* librdf_new_storage_from_factory(librdf_world *world, librdf_storage_factory* factory, const char *name, librdf_hash* options);
56
57/* destructor */
58REDLAND_API
59void librdf_free_storage(librdf_storage *storage);
60
61
62/* methods */
63REDLAND_API
64void librdf_storage_add_reference(librdf_storage *storage);
65REDLAND_API
66void librdf_storage_remove_reference(librdf_storage *storage);
67
68REDLAND_API
69void librdf_storage_set_instance(librdf_storage *storage, librdf_storage_instance instance);
70REDLAND_API
71librdf_storage_instance librdf_storage_get_instance(librdf_storage *storage);
72
73REDLAND_API
74librdf_world *librdf_storage_get_world(librdf_storage *storage);
75
76REDLAND_API
77int librdf_storage_open(librdf_storage* storage, librdf_model *model);
78REDLAND_API
79int librdf_storage_close(librdf_storage* storage);
80
81REDLAND_API
82int librdf_storage_size(librdf_storage* storage);
83
84REDLAND_API
85int librdf_storage_add_statement(librdf_storage* storage, librdf_statement* statement);
86REDLAND_API
87int librdf_storage_add_statements(librdf_storage* storage, librdf_stream* statement_stream);
88REDLAND_API
89int librdf_storage_remove_statement(librdf_storage* storage, librdf_statement* statement);
90REDLAND_API
91int librdf_storage_contains_statement(librdf_storage* storage, librdf_statement* statement);
92REDLAND_API
93librdf_stream* librdf_storage_serialise(librdf_storage* storage);
94REDLAND_API
95librdf_stream* librdf_storage_find_statements(librdf_storage* storage, librdf_statement* statement);
96REDLAND_API
97librdf_stream* librdf_storage_find_statements_with_options(librdf_storage* storage, librdf_statement* statement, librdf_node* context_node, librdf_hash* options);
98REDLAND_API
99librdf_iterator* librdf_storage_get_sources(librdf_storage *storage, librdf_node *arc, librdf_node *target);
100REDLAND_API
101librdf_iterator* librdf_storage_get_arcs(librdf_storage *storage, librdf_node *source, librdf_node *target);
102REDLAND_API
103librdf_iterator* librdf_storage_get_targets(librdf_storage *storage, librdf_node *source, librdf_node *arc);
104
105
106/* return list of properties to/from a node */
107REDLAND_API
108librdf_iterator* librdf_storage_get_arcs_in(librdf_storage *storage, librdf_node *node);
109REDLAND_API
110librdf_iterator* librdf_storage_get_arcs_out(librdf_storage *storage, librdf_node *node);
111
112/* check for [node, property, ?] */
113REDLAND_API
114int librdf_storage_has_arc_in(librdf_storage *storage, librdf_node *node, librdf_node *property);
115/* check for [?, property, node] */
116REDLAND_API
117int librdf_storage_has_arc_out(librdf_storage *storage, librdf_node *node, librdf_node *property);
118
119/* context methods */
120REDLAND_API
121int librdf_storage_context_add_statement(librdf_storage* storage, librdf_node* context, librdf_statement* statement);
122REDLAND_API
123int librdf_storage_context_add_statements(librdf_storage* storage, librdf_node* context, librdf_stream* stream);
124REDLAND_API
125int librdf_storage_context_remove_statement(librdf_storage* storage, librdf_node* context, librdf_statement* statement);
126REDLAND_API
127int librdf_storage_context_remove_statements(librdf_storage* storage, librdf_node* context);
128REDLAND_API
129librdf_stream* librdf_storage_context_as_stream(librdf_storage* storage, librdf_node* context);
130REDLAND_API REDLAND_DEPRECATED
131librdf_stream* librdf_storage_context_serialise(librdf_storage* storage, librdf_node* context);
132
133/* querying methods */
134REDLAND_API
135int librdf_storage_supports_query(librdf_storage* storage, librdf_query *query);
136REDLAND_API
137librdf_query_results* librdf_storage_query_execute(librdf_storage* storage, librdf_query *query);
138
139/* synchronise a storage to the backing store */
140REDLAND_API
141int librdf_storage_sync(librdf_storage *storage);
142
143/* find statements in a given context */
144REDLAND_API
145librdf_stream* librdf_storage_find_statements_in_context(librdf_storage* storage, librdf_statement* statement, librdf_node* context_node);
146
147REDLAND_API
148librdf_iterator* librdf_storage_get_contexts(librdf_storage* storage);
149
150/* features */
151REDLAND_API
152librdf_node* librdf_storage_get_feature(librdf_storage* storage, librdf_uri* feature);
153REDLAND_API
154int librdf_storage_set_feature(librdf_storage* storage, librdf_uri* feature, librdf_node* value);
155
156REDLAND_API
157int librdf_storage_transaction_start(librdf_storage* storage);
158REDLAND_API
159int librdf_storage_transaction_start_with_handle(librdf_storage* storage, void* handle);
160REDLAND_API
161int librdf_storage_transaction_commit(librdf_storage* storage);
162REDLAND_API
163int librdf_storage_transaction_rollback(librdf_storage* storage);
164REDLAND_API
165void* librdf_storage_transaction_get_handle(librdf_storage* storage);
166
167#ifdef __cplusplus
168}
169#endif
170
171#endif
172