1 /* -*- Mode: c; c-basic-offset: 2 -*-
2  *
3  * rdf_statement.h - RDF Statement definition
4  *
5  * Copyright (C) 2000-2008, David Beckett http://www.dajobe.org/
6  * Copyright (C) 2000-2004, 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 
27 #ifndef LIBRDF_STATEMENT_H
28 #define LIBRDF_STATEMENT_H
29 
30 #ifdef LIBRDF_INTERNAL
31 #include <rdf_statement_internal.h>
32 #endif
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 /**
39  * librdf_statement_part:
40  * @LIBRDF_STATEMENT_SUBJECT: Subject of a statement.
41  * @LIBRDF_STATEMENT_PREDICATE: Predicate of a statement.
42  * @LIBRDF_STATEMENT_OBJECT: Object of a statement.
43  * @LIBRDF_STATEMENT_ALL: All parts of a statement.
44  *
45  * Flags that are or-ed to indicate statement parts.
46  *
47  * Used in fields arguments to methods such as the public
48  * librdf_statement_encode_parts() librdf_statement_decode_parts()
49  * librdf_new_stream_from_node_iterator().
50  */
51 typedef enum {
52   LIBRDF_STATEMENT_SUBJECT   = 1 << 0,
53   LIBRDF_STATEMENT_PREDICATE = 1 << 1,
54   LIBRDF_STATEMENT_OBJECT    = 1 << 2,
55 
56   /* must be a combination of all of the above */
57   LIBRDF_STATEMENT_ALL       = (LIBRDF_STATEMENT_SUBJECT|
58                                 LIBRDF_STATEMENT_PREDICATE|
59                                 LIBRDF_STATEMENT_OBJECT)
60 } librdf_statement_part;
61 
62 
63 /* initialising functions / constructors */
64 
65 /* Create a new Statement. */
66 REDLAND_API
67 librdf_statement* librdf_new_statement(librdf_world* world);
68 
69 /* Create a new Statement from an existing Statement - DEEP CLONE */
70 REDLAND_API
71 librdf_statement* librdf_new_statement_from_statement(librdf_statement* statement);
72 /* Create a new Statement from an existing Statement - SHALLOW CLONE */
73 REDLAND_API
74 librdf_statement* librdf_new_statement_from_statement2(librdf_statement* statement);
75 /* Create a new Statement from existing Nodes */
76 REDLAND_API
77 librdf_statement* librdf_new_statement_from_nodes(librdf_world *world, librdf_node* subject, librdf_node* predicate, librdf_node* object);
78 
79 /* Init a statically allocated statement */
80 REDLAND_API
81 void librdf_statement_init(librdf_world *world, librdf_statement *statement);
82 
83 /* Clear a statically allocated statement */
84 REDLAND_API
85 void librdf_statement_clear(librdf_statement *statement);
86 
87 /* destructor */
88 REDLAND_API
89 void librdf_free_statement(librdf_statement* statement);
90 
91 
92 /* functions / methods */
93 
94 REDLAND_API
95 librdf_node* librdf_statement_get_subject(librdf_statement *statement);
96 REDLAND_API
97 void librdf_statement_set_subject(librdf_statement *statement, librdf_node *node);
98 
99 REDLAND_API
100 librdf_node* librdf_statement_get_predicate(librdf_statement *statement);
101 REDLAND_API
102 void librdf_statement_set_predicate(librdf_statement *statement, librdf_node *node);
103 
104 REDLAND_API
105 librdf_node* librdf_statement_get_object(librdf_statement *statement);
106 REDLAND_API
107 void librdf_statement_set_object(librdf_statement *statement, librdf_node *node);
108 
109 /* if statement has all fields */
110 REDLAND_API
111 int librdf_statement_is_complete(librdf_statement *statement);
112 
113 /* convert to a string */
114 REDLAND_API REDLAND_DEPRECATED
115 unsigned char *librdf_statement_to_string(librdf_statement *statement);
116 /* print it prettily */
117 REDLAND_API
118 int librdf_statement_write(librdf_statement *statement, raptor_iostream *iostr);
119 REDLAND_API
120 void librdf_statement_print(librdf_statement *statement, FILE *fh);
121 
122 /* compare two statements */
123 REDLAND_API
124 int librdf_statement_equals(librdf_statement* statement1, librdf_statement* statement2);
125 /* match statement against one with partial content */
126 REDLAND_API
127 int librdf_statement_match(librdf_statement* statement, librdf_statement* partial_statement);
128 
129 /* serialising/deserialising */
130 REDLAND_API REDLAND_DEPRECATED
131 size_t librdf_statement_encode(librdf_statement* statement, unsigned char *buffer, size_t length);
132 REDLAND_API
133 size_t librdf_statement_encode2(librdf_world* world, librdf_statement* statement, unsigned char *buffer, size_t length);
134 REDLAND_API REDLAND_DEPRECATED
135 size_t librdf_statement_encode_parts(librdf_statement* statement, librdf_node* context_node, unsigned char *buffer, size_t length, librdf_statement_part fields);
136 REDLAND_API
137 size_t librdf_statement_encode_parts2(librdf_world* world, librdf_statement* statement, librdf_node* context_node, unsigned char *buffer, size_t length, librdf_statement_part fields);
138 REDLAND_API REDLAND_DEPRECATED
139 size_t librdf_statement_decode(librdf_statement* statement, unsigned char *buffer, size_t length);
140 REDLAND_API
141 size_t librdf_statement_decode2(librdf_world* world, librdf_statement* statement, librdf_node** context_node, unsigned char *buffer, size_t length);
142 REDLAND_API REDLAND_DEPRECATED
143 size_t librdf_statement_decode_parts(librdf_statement* statement, librdf_node** context_node, unsigned char *buffer, size_t length);
144 
145 
146 #ifdef __cplusplus
147 }
148 #endif
149 
150 #endif
151