File: rdf_mapping_jso.h

package info (click to toggle)
virtuoso-opensource 6.1.6+dfsg2-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid, stretch
  • size: 260,992 kB
  • ctags: 125,220
  • sloc: ansic: 652,748; sql: 458,419; xml: 282,834; java: 61,031; sh: 40,031; cpp: 36,890; cs: 25,240; php: 12,692; yacc: 9,523; lex: 7,018; makefile: 6,157; jsp: 4,484; awk: 1,643; perl: 1,013; ruby: 1,003; python: 326
file content (277 lines) | stat: -rw-r--r-- 20,456 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
#ifndef __RFD_MAPPING_JSO_H
#define __RFD_MAPPING_JSO_H
/*  */
/* $Id$ */
/*  */
/* This file is part of the OpenLink Software Virtuoso Open-Source (VOS) */
/* project. */
/*  */
/* Copyright (C) 1998-2012 OpenLink Software */
/*  */
/* This project is free software; you can redistribute it and/or modify it */
/* under the terms of the GNU General Public License as published by the */
/* Free Software Foundation; only version 2 of the License, dated June 1991. */
/*  */
/* This program is distributed in the hope that it will be useful, but */
/* WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */
/* General Public License for more details. */
/*  */
/* You should have received a copy of the GNU General Public License along */
/* with this program; if not, write to the Free Software Foundation, Inc., */
/* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
/*  */
/*  */
/* Flags that describe restrictions on possible values of the variable or the use of the var */
#include "jso.h"
#define SPART_VARR__ALL	0xFFFF	/*! OR of everything, do not forget to edit when new bits are added. */
#define SPART_VARR_SPRINTFF	0x0001	/*! The values of a variable is always made according to one of specified formats */
#define SPART_VARR_IS_REF	0x0002	/*! The value is a node reference, IRI or blank */
#define SPART_VARR_IS_IRI	0x0004	/*! The value is an IRI node reference */
#define SPART_VARR_IS_BLANK	0x0008	/*! The value is a blank node reference */
#define SPART_VARR_IRI_CALC	0x0010	/*! The variable an IRI calculated by other data, e_iri_classes of equiv class will contain known formats of possible values of the variable */
#define SPART_VARR_IS_LIT	0x0020	/*! The value is a literal */
#define SPART_VARR_TYPED	0x0040	/*! The value is a literal of a known type and the type is saved as e_datatype of equiv class */
#define SPART_VARR_FIXED	0x0080	/*! The value is known and e_fixedvalue contains either SQL representation of the literal or IRI string of the IRI node reference */
#define SPART_VARR_NOT_NULL	0x0100	/*! The variable is always bound, can't be NULL */
#define SPART_VARR_LONG_EQ_SQL	0x0200	/*! The value is a number of some sort or a datetime or NULL, not string or RDF box. */
/* Flags listed below this line are for temporary use, they never appear in databases sho they may be changed. */
#define SPART_VARR_ALWAYS_NULL	0x0400	/*! The variable is never bound, can't have value other than NULL */
#define SPART_VARR_GLOBAL	0x0800	/*! The variable is a global parameter */
#define SPART_VARR_EXTERNAL	0x1000	/*! The variable is in scalar subquery and is bound outside */
#define SPART_VARR_EXPORTED	0x2000	/*! The variable is exported to the final result-set */
#define SPART_VARR_CONFLICT	0x4000	/*! The variable should match conflicting requirements or should appear in the result set of an empty union, so it is never bound */
#define SPART_VARR_EQ_VAR	0x8000	/*! This is to indicate that the equivalence class saves some equalities that no longer exists as filters */
/* Flags of actions to be done in case of match of triple pattern to conditions of the quad map */
#define SPART_QM_EMPTY	0x0002	/*! The quad map does not contain real mapping but it's a root of tree of submaps and it can set a common 'exclusive' */
#define SPART_QM_EXCLUSIVE	0x0004	/*! The quad map is an almost-exclusive storage for triples whose fields match fixed fields of the map. Red cut in the pattern matching search. This takes precedence over SPART_QM_SOFT_EXCLUSIVE */
#define SPART_QM_OK_FOR_ANY_QUAD	0x0008	/*! The quad map may contain any quad so it can be used as a default qm of the storage */
#define SPART_QM_SOFT_EXCLUSIVE	0x0010	/*! The quad map is either exclusive or not, discretion is made by compiler */
#define SPART_QS_NO_IMPLICIT_USER_QM	0x0001	/*! The quad storage disables user quad maps for triple patterns with unbound graph */
#define SPART_QS_BLOCK_DEFAULT_QM	0x0002	/*! The quad storage disables the use of default quad map and signals an error if no other qm matches */
/* Flags that are responsible for various serialization features. */
/* Some features are labeled as "blocking", because if such a feature is required but flag is not set, an error is signaled. */
/* An occurrence of a non-blocking feature provides some hint to the optimizer of the SPARQL service endpoint; a blocking one alters semantics. */
#define SSG_SD_QUAD_MAP	0x0001	/*! Allows the use of QUAD MAP groups in the output */
#define SSG_SD_OPTION	0x0002	/*! Allows the use of OPTION keyword in the output */
#define SSG_SD_BREAKUP	0x0004	/*! Flags if BREAKUP hint options should be printed, this has no effect w/o SSG_SD_OPTION */
#define SSG_SD_PKSELFJOIN	0x0008	/*! Flags if PKSELFJOIN hint options should be printed, this has no effect w/o SSG_SD_OPTION */
#define SSG_SD_RVR	0x0010	/*! Flags if RVR hint options should be printed, this has no effect w/o SSG_SD_OPTION */
#define SSG_SD_IN	0x0020	/*! Allows the use of IN operator, non-blocking because can be replaced with '=' */
#define SSG_SD_LIKE	0x0040	/*! Allows the use of LIKE operator, blocking */
#define SSG_SD_GLOBALS	0x0080	/*! Allows the use of global variables (with colon at the front of the name), blocking in most of cases */
#define SSG_SD_BI	0x0100	/*! Allows the use of SPARQL-BI extensions, blocking in most of cases */
#define SSG_SD_VIRTSPECIFIC	0x0200	/*! Allows the use of Virtuoso-specific features not listed above, say DEFINE, blocking in most of cases */
#define SSG_SD_VOS_509	0x03FF	/*! Allows everything that is supported by Virtuoso Open Source 5.0.9 */
#define SSG_SD_SERVICE	0x0400	/*! Allows the use of SERVICE extension, blocking */
#define SSG_SD_VOS_5_LATEST	0x0FFF	/*! Allows everything that is supported by CVS head of Virtuoso Open Source 5.x.x */
#define SSG_SD_TRANSIT	0x1000	/*! Allows the use of transitivity extension, blocking */
#define SSG_SD_VOS_6	0x1FFF	/*! Allows everything that is supported by Virtuoso Open Source 6.0.0 */
#define SSG_SD_SPARQL11_DRAFT	0x2000	/*! Allows the use of SPARQL 1.1 aggregates, BINDINGS, new built-in functions, MINUS, EXISTS syntax */
#define SSG_SD_SPARQL11_MORE	0x4000	/*! Allows the use of SPARQL 1.1 BIND, path expressions, entilement */

#define JSO_IRI_OF_rdf_val_range_array  "http://www.openlinksw.com/schemas/virtrdf#array-of-ValRange"
typedef struct rdf_val_range_s * *rdf_val_range_array_t;

/*! Description of set of possible values of a variable or a format or an pattern item */
#define JSO_IRI_OF_rdf_val_range  "http://www.openlinksw.com/schemas/virtrdf#ValRange"
typedef struct rdf_val_range_s
{
  ptrlong	rvrRestrictions;	/*!< Natural restrictions on values stored at the field */
  ccaddr_t	rvrDatatype;	/*!< Datatype of stored values, if fixed */
  ccaddr_t	rvrLanguage;	/*!< Language, if fixed */
  ccaddr_t	rvrFixedValue;	/*!< Value of stored values, if fixed */
  ccaddr_t *	rvrSprintffs;	/*!< Sprintf formats that cover possible IRI values */
  ptrlong	rvrSprintffCount;	/*!< Number of used items of rvrSprintffs */
  ccaddr_t *	rvrIriClasses;	/*!< Possible types of the IRI, if the IRI is calculable */
  ptrlong	rvrIriClassCount;	/*!< Number of used items of rvrIRIClasses */
  ccaddr_t *	rvrRedCuts;	/*!< Impossible values, blocked by option (EXCLUSIVE) of earlier quad maps */
  ptrlong	rvrRedCutCount;	/*!< Number of used items of rvrRedCuts */
/* Don't forget to add NULLS to SPART_RVR_LIST_OF_NULLS when adding fields here */
} rdf_val_range_t;

#define JSO_IRI_OF_qm_format_array  "http://www.openlinksw.com/schemas/virtrdf#array-of-QuadMapFormat"
typedef struct qm_format_s * *qm_format_array_t;

/*! Description of single field where RDF data may come from */
#define JSO_IRI_OF_qm_format  "http://www.openlinksw.com/schemas/virtrdf#QuadMapFormat"
typedef struct qm_format_s
{
  ccaddr_t	qmfName;	/*!< Name used for error messages and debugging */
/* Templates that convert raw column into other types (can be applied to both field and not field expression) */
  ccaddr_t	qmfShortTmpl;	/*!< 'short' value template */
  ccaddr_t	qmfLongTmpl;	/*!< 'long' value template */
  ccaddr_t	qmfSqlvalTmpl;	/*!< 'sqlval' value template */
  ccaddr_t	qmfDatatypeTmpl;	/*!< datatype value template, compiler will use qmfDatatypeOfShortTmpl if this one is not set */
  ccaddr_t	qmfLanguageTmpl;	/*!< language value template, compiler will use qmfLanguageOfShortTmpl if this one is not set */
  ccaddr_t	qmfBoolTmpl;	/*!< Boolean value template */
/* Templates of booleans that tell whether the short is of some sort: */
  ccaddr_t	qmfIsrefOfShortTmpl;	/*!< ... whether the short is ref */
  ccaddr_t	qmfIsuriOfShortTmpl;	/*!< ... whether the short is uri */
  ccaddr_t	qmfIsblankOfShortTmpl;	/*!< ... whether the short is blank node ref */
  ccaddr_t	qmfIslitOfShortTmpl;	/*!< ... whether the short is literal */
  ccaddr_t	qmfIsnumericOfShortTmpl;	/*!< ... whether the short is number (unlike SSG_VALMODE_NUM, no DATE/TIME etc., only number) */
/* Templates of 0/1 integer expressions that tell whether the short is of some sort: */
  ccaddr_t	qmf01uriOfShortTmpl;	/*!< ... whether the short is uri, result is 1 or 0 */
  ccaddr_t	qmf01blankOfShortTmpl;	/*!< ... whether the short is blank node ref, result is 1 or 0 */
/* Templates that convert short value into other types (can be applied to both field and not field expression) */
  ccaddr_t	qmfLongOfShortTmpl;	/*!< ... long from short */
  ccaddr_t	qmfSqlvalOfShortTmpl;	/*!< ... SQL value from short */
  ccaddr_t	qmfDatatypeOfShortTmpl;	/*!< ... datatype IRI STRING from short */
  ccaddr_t	qmfLanguageOfShortTmpl;	/*!< ... language ID STRING from short */
  ccaddr_t	qmfBoolOfShortTmpl;	/*!< ... boolean value from short */
  ccaddr_t	qmfIidOfShortTmpl;	/*!< ... URI_ID from short */
  ccaddr_t	qmfUriOfShortTmpl;	/*!< ... URI STRING from short */
  ccaddr_t	qmfStrsqlvalOfShortTmpl;	/*!< ... SQL representation of the STRING value of short */
/* Templates of expressions that make short values from other representations */
  ccaddr_t	qmfShortOfTypedsqlvalTmpl;	/*!< ... makes short by SQL value with specified type and/or language */
  ccaddr_t	qmfShortOfSqlvalTmpl;	/*!< ... makes short by sqlvalue with no language and a datatype specified by SQL type */
  ccaddr_t	qmfShortOfLongTmpl;	/*!< ... makes short by long */
  ccaddr_t	qmfShortOfUriTmpl;	/*!< ... makes short by uri */
  ccaddr_t	qmfShortOfNiceSqlvalTmpl;	/*!< ... works like qmfShortOfSqlvalTmpl for values of one selected data type, not suitable for other types */
  ptrlong	qmfDtpOfNiceSqlval;	/*!< The 'nice' DTP that is an acceptable type of qmfShortOfNiceSqlvalTmpl, zero or unset if no nice type */
/* Templates of expressions that find existing short values from other representations */
  ccaddr_t	qmfExistingShortOfTypedsqlvalTmpl;	/*!< ... finds existing obj by SQL value with specified type and/or language */
  ccaddr_t	qmfExistingShortOfSqlvalTmpl;	/*!< ... finds existing obj by sqlvalue with no language and a datatype specified by SQL type */
  ccaddr_t	qmfExistingShortOfLongTmpl;	/*!< ... finds existing obj by long */
  ccaddr_t	qmfExistingShortOfUriTmpl;	/*!< ... finds existing obj by uri */
  ccaddr_t	qmfExistingShortOfNiceSqlvalTmpl;	/*!< ... works like qmfExistingShortOfSqlvalTmpl for values of one selected data type, not suitable for other types */
/* Misc */
  ptrlong	qmfIsBijection;	/*!< Nonzero if the format is bijection so long values are equal IFF short values of the type are equal */
  ptrlong	qmfDerefFlags;	/*!< Flags of IRI dereferencing */
  ptrlong	qmfIsStable;	/*!< Nonzero if sql values are in order IFF of short values are in order */
  ptrlong	qmfIsSubformatOfLong;	/*!< Nonzero if the format is subformat of LONG valmode */
  ptrlong	qmfIsSubformatOfLongWhenEqToSql;	/*!< Nonzero if the format is subformat of LONG valmode for values that have same representation in LONG and SQL valmodes */
  ptrlong	qmfIsSubformatOfLongWhenRef;	/*!< Nonzero if the format is subformat of LONG valmode for values that are IRIs or blank nodes */
  ccaddr_t	qmfCmpFuncName;	/*!< Name of comparison function that acts like strcmp but args are of this type */
  ccaddr_t	qmfTypeminTmpl;	/*!< Template of expn that returns the smallest value of the type of value of arg */
  ccaddr_t	qmfTypemaxTmpl;	/*!< Template of expn that returns the biggest possible value of the type of value of arg */
  ptrlong	qmfWrapDistinct;	/*!< Nonzero if SELECT DISTINCT requires RDF_DIST_SER_LONG/RDF_DIST_DESER_LONG wrapping. */
/* Metadata about values that can be stored in this field */
  ptrlong	qmfColumnCount;	/*!< Number of columns of the original data (usually 1, zero if variable and not yet set) */
  ptrlong	qmfOkForAnySqlvalue;	/*!< Nonzero if the field format can store any possible SQL value (even if the field itself can not) */
  ptrlong	qmfUriIdOffset;	/*!< The value that should be added to locally stored ref id in order to get portable ref id */
  ccaddr_t	qmfCustomString1;	/*!< The value that can be used as a value of ^{custom-string-1}^ in templates */
  ccaddr_t	qmfArgDtps;	/*!< String of dtp_t bytes, can be used as a value of ^{opt-comma-arg-dtps}^ in templates */
  qm_format_array_t	qmfSuperFormats;	/*!< Array of formats that can store any value that current format can store */
  rdf_val_range_t qmfValRange;	/*! Natural restrictions on values stored in the source column of format */
} qm_format_t;

#define JSO_IRI_OF_qm_atable_array  "http://www.openlinksw.com/schemas/virtrdf#array-of-QuadMapATable"
typedef struct qm_atable_s * *qm_atable_array_t;

/*! Description of single source RDBMS table alias */
#define JSO_IRI_OF_qm_atable  "http://www.openlinksw.com/schemas/virtrdf#QuadMapATable"
typedef struct qm_atable_s
{
  ccaddr_t	qmvaAlias;	/*!< Table alias where the column comes from */
  ccaddr_t	qmvaTableName;	/*!< Column name */
} qm_atable_t;

#define JSO_IRI_OF_qm_column_array  "http://www.openlinksw.com/schemas/virtrdf#array-of-QuadMapColumn"
typedef struct qm_column_s * *qm_column_array_t;

/*! Description of single source RDBMS column */
#define JSO_IRI_OF_qm_column  "http://www.openlinksw.com/schemas/virtrdf#QuadMapColumn"
typedef struct qm_column_s
{
  ccaddr_t	qmvcAlias;	/*!< Table alias where the column comes from */
  ccaddr_t	qmvcColumnName;	/*!< Column name */
  ccaddr_t	qmvcColumnFromIRI;	/*!<  */
} qm_column_t;

#define JSO_IRI_OF_qm_ftext_array  "http://www.openlinksw.com/schemas/virtrdf#array-of-QuadMapFText"
typedef struct qm_ftext_s * *qm_ftext_array_t;

/*! Free text or geo parameters of a quad map value */
#define JSO_IRI_OF_qm_ftext  "http://www.openlinksw.com/schemas/virtrdf#QuadMapFText"
typedef struct qm_ftext_s
{
  ccaddr_t	qmvftAlias;	/*!< Alias of a table with free-text data */
  ccaddr_t	qmvftAuxAlias;	/*!< Alias of a table that links free-text data back to object (if needed) */
  ccaddr_t	qmvftTableName;	/*!< Name of a table with free-text data */
  ccaddr_t	qmvftAuxTableName;	/*!< Name of a table that links free-text data back to object (if needed) */
  ccaddr_t	qmvftColumnName;	/*!< Name of a column with free-text data */
  ccaddr_t *	qmvftConds;	/*!< Templates of filters and join conditions related to the free-text indexing table */
  ptrlong	qmvftXmlIndex;	/*!< Flags if the free-text index is XML so can use xcontains (ditto xpath_contains) */
} qm_ftext_t;

#define JSO_IRI_OF_qm_value_array  "http://www.openlinksw.com/schemas/virtrdf#array-of-QuadMapValue"
typedef struct qm_value_s * *qm_value_array_t;

/*! Description of one of four column patterns of a mapping pattern */
#define JSO_IRI_OF_qm_value  "http://www.openlinksw.com/schemas/virtrdf#QuadMapValue"
typedef struct qm_value_s
{
  ccaddr_t	qmvTableName;	/*!< Table name that is used if no alias is used */
  qm_atable_array_t	qmvATables;	/*!< Aliased tables whose aliases are used in columns */
  qm_column_array_t	qmvColumns;	/*!< Relational columns used as a source for qmvFormat */
  ccaddr_t *	qmvConds;	/*!< Templates of filters and join conditions related to the value */
  struct qm_format_s *	qmvFormat;	/*!< Quad map format used to convert relational data into RDF nodes */
  struct qm_ftext_s *	qmvFText;	/*!< Free text parameters */
  struct qm_ftext_s *	qmvGeo;	/*!< Geo parameters */
  ptrlong	qmvColumnsFormKey;	/*!< Flags whether columns of qmvColumns form a unique key of the relational table */
  ccaddr_t	qmvColumnsToIRI;	/*!<  */
  ccaddr_t	qmvIriClass;	/*!< Known IRI class, if the IRI is calculable */
  rdf_val_range_t qmvRange;	/*! Natural restrictions on values stored in the source column of format */
} qm_value_t;

#define JSO_IRI_OF_quad_map_array  "http://www.openlinksw.com/schemas/virtrdf#array-of-QuadMap"
typedef struct quad_map_s * *quad_map_array_t;

/*! Description of single mapping pattern, including its subpatterns */
#define JSO_IRI_OF_quad_map  "http://www.openlinksw.com/schemas/virtrdf#QuadMap"
typedef struct quad_map_s
{
  rdf_val_range_t qmGraphRange;	/*! Restrictions on graph */
  rdf_val_range_t qmSubjectRange;	/*! Restrictions on subject */
  rdf_val_range_t qmPredicateRange;	/*! Restrictions on predicate */
  rdf_val_range_t qmObjectRange;	/*! Restrictions on object */
  struct qm_value_s *	qmGraphMap;	/*!< Graph map if triple has a variable in graph position */
  struct qm_value_s *	qmSubjectMap;	/*!< Subject map if triple has a variable in subject position */
  struct qm_value_s *	qmPredicateMap;	/*!< Predicate map if triple has a variable in predicate position */
  struct qm_value_s *	qmObjectMap;	/*!< Object map if triple has a variable in object position */
  ccaddr_t	qmTableName;	/*!< Table name where mapped rows are from, if this is the only table. Use only if there's no alias and hence no qmvATable */
  qm_atable_array_t	qmATables;	/*!< Aliased tables whose aliases are used in qmConds but not in qmvConds */
  ccaddr_t *	qmConds;	/*!< Join conditions and filters not included into qmvConds of columns */
  ccaddr_t	qmTableRowFilter;	/*!< DEPRECATED Filter expression that is true for rows that should be mapped, will appear in WHERE clauses */
  quad_map_array_t	qmUserSubMaps;	/*!< Array of user-defined submaps, should never appear in MJVs or default storage */
  ptrlong	qmMatchingFlags;	/*!< What should be done in case of match of triple pattern to conditions of the quad map */
  ptrlong	qmPriorityOrder;	/*!< Integer to specify default order in parent's qmUserSubMaps */
  ccaddr_t *	qmAliasesKeyrefdByQuad;	/*!< List of aliases such that any quad made by the quad map can be made from exactly one row from the alias, so quad identifies the row there */
  ptrlong *	qmAllATableUses;	/*!< Complete list of all qmatu made for qmATables and qmvATables, sorted alphabetically by qmatu_alias */
  ptrlong	qmAllATableUseCount;	/*!< Number of used elements in qmAllATableUseCount */
  ccaddr_t *	qmAllConds;	/*!< Complete list of all join conditions from qmConds and qmvConds, sorted alphabetically */
  ptrlong	qmAllCondCount;	/*!< Number of used elements in qmAllCondCount */
} quad_map_t;

#define JSO_IRI_OF_sparql_macro_library_array  "http://www.openlinksw.com/schemas/virtrdf#array-of-SparqlMacroLibrary"
typedef struct sparql_macro_library_s * *sparql_macro_library_array_t;

/*! Library of SPARQL macro definitions that are loaded automatically when the storage is used */
#define JSO_IRI_OF_sparql_macro_library  "http://www.openlinksw.com/schemas/virtrdf#SparqlMacroLibrary"
typedef struct sparql_macro_library_s
{
  ccaddr_t	smlSourceText;	/*!< Source text of the library */
  ptrlong	smlCompilationState;	/*!< 2 for completely (and successfull compilation, 1 for compilation in progress, 0 for not even started */
  ccaddr_t	smlIncludes;	/*!< IRIs of included macro libraries */
  ccaddr_t	smlList;	/*!< The compiled library */
} sparql_macro_library_t;

#define JSO_IRI_OF_quad_storage_array  "http://www.openlinksw.com/schemas/virtrdf#array-of-QuadStorage"
typedef struct quad_storage_s * *quad_storage_array_t;

/*! All mapping patterns plus tracking info */
#define JSO_IRI_OF_quad_storage  "http://www.openlinksw.com/schemas/virtrdf#QuadStorage"
typedef struct quad_storage_s
{
  quad_map_array_t	qsMjvMaps;	/*!<  */
  quad_map_array_t	qsUserMaps;	/*!<  */
  struct quad_map_s *	qsDefaultMap;	/*!<  */
  struct sparql_macro_library_s *	qsMacroLibrary;	/*!<  */
  ptrlong	qsMatchingFlags;	/*!<  */
  ccaddr_t	qsAlterInProgress;	/*!<  */
} quad_storage_t;

extern void rdf_mapping_jso_init (void);
#endif