XQC - XQuery C API  1.0
xqc.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2008, Matthias Brantner, John Snelson
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * * Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * * Neither the name of the developers nor the names of contributors may be
14  * used to endorse or promote products derived from this software without
15  * specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  * POSSIBILITY OF SUCH DAMAGE.
28  */
29 
30 #ifndef _XQUERY_C_API_H
31 #define _XQUERY_C_API_H
32 
33 /* Include stdio for FILE */
34 #include <stdio.h>
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
41 #define XQC_VERSION_NUMBER 1
42 
43 typedef struct XQC_Implementation_s XQC_Implementation;
44 typedef struct XQC_StaticContext_s XQC_StaticContext;
45 typedef struct XQC_Expression_s XQC_Expression;
46 typedef struct XQC_DynamicContext_s XQC_DynamicContext;
47 typedef struct XQC_Sequence_s XQC_Sequence;
48 typedef struct XQC_InputStream_s XQC_InputStream;
49 typedef struct XQC_ErrorHandler_s XQC_ErrorHandler;
50 
55 typedef enum {
62 
65 
70 
75 } XQC_Error;
76 
88  const char *encoding;
89 
93  void *user_data;
94 
108  unsigned int (*read)(XQC_InputStream *stream, void *buffer, unsigned int length);
109 
116  void (*free)(XQC_InputStream *stream);
117 };
118 
132 
136  void *user_data;
137 
156  void (*error)(XQC_ErrorHandler *handler, XQC_Error error, const char *error_uri,
157  const char *error_localname, const char *description, XQC_Sequence *error_object);
158 };
159 
160 typedef enum {
162 
170 
194 
195 } XQC_ItemType;
196 
208 
225  XQC_Error (*create_context)(XQC_Implementation *implementation, XQC_StaticContext **context);
226 
244  XQC_Error (*prepare)(XQC_Implementation *implementation, const char *string,
245  const XQC_StaticContext *context, XQC_Expression **expression);
246 
266  XQC_Error (*prepare_file)(XQC_Implementation *implementation, FILE *file,
267  const XQC_StaticContext *context, XQC_Expression **expression);
268 
290  XQC_Error (*prepare_stream)(XQC_Implementation *implementation, XQC_InputStream *stream,
291  const XQC_StaticContext *context, XQC_Expression **expression);
292 
294 
300  XQC_Error (*parse_document)(XQC_Implementation *implementation,
302  const char *string, XQC_Sequence **sequence);
304  XQC_Error (*parse_document_file)(XQC_Implementation *implementation,
305  FILE *file, XQC_Sequence **sequence);
307  XQC_Error (*parse_document_stream)(XQC_Implementation *implementation,
308  XQC_InputStream *stream, XQC_Sequence **sequence);
309 
311 
317  XQC_Error (*create_empty_sequence)(XQC_Implementation *implementation,
318  XQC_Sequence **sequence);
319  XQC_Error (*create_singleton_sequence)(XQC_Implementation *implementation,
320  XQC_ItemType type, const char *value,
321  XQC_Sequence **sequence);
322  XQC_Error (*create_string_sequence)(XQC_Implementation *implementation,
323  const char *values[], unsigned int count,
324  XQC_Sequence **sequence);
325  XQC_Error (*create_integer_sequence)(XQC_Implementation *implementation,
326  int values[], unsigned int count,
327  XQC_Sequence **sequence);
328  XQC_Error (*create_double_sequence)(XQC_Implementation *implementation,
329  double values[], unsigned int count,
330  XQC_Sequence **sequence);
331 
333 
343  void *(*get_interface)(const XQC_Implementation *implementation, const char *name);
344 
351  void (*free)(XQC_Implementation *implementation);
352 };
353 
360 
365 
371 
377 
383 
388 
393 
405 
420  XQC_Error
421  (*create_child_context)(XQC_StaticContext *context, XQC_StaticContext **child_context);
422 
434  XQC_Error
435  (*declare_ns)(XQC_StaticContext *context, const char *prefix, const char *uri);
436 
448  XQC_Error
449  (*get_ns_by_prefix)(XQC_StaticContext *context, const char *prefix, const char **result_ns);
450 
460  XQC_Error
461  (*set_default_element_and_type_ns)(XQC_StaticContext *context, const char *uri);
462 
471  XQC_Error
472  (*get_default_element_and_type_ns)(XQC_StaticContext *context, const char **uri);
473 
483  XQC_Error
484  (*set_default_function_ns)(XQC_StaticContext *context, const char *uri);
485 
495  XQC_Error
496  (*get_default_function_ns)(XQC_StaticContext *context, const char **uri);
497 
507  XQC_Error
508  (*set_xpath_compatib_mode)(XQC_StaticContext *context, XQC_XPath1Mode mode);
509 
519  XQC_Error
520  (*get_xpath_compatib_mode)(XQC_StaticContext *context, XQC_XPath1Mode* mode);
521 
531  XQC_Error
532  (*set_construction_mode)(XQC_StaticContext *context, XQC_ConstructionMode mode);
533 
543  XQC_Error
544  (*get_construction_mode)(XQC_StaticContext *context, XQC_ConstructionMode* mode);
545 
555  XQC_Error
556  (*set_ordering_mode)(XQC_StaticContext *context, XQC_OrderingMode mode);
557 
567  XQC_Error
568  (*get_ordering_mode)(XQC_StaticContext *context, XQC_OrderingMode* mode);
569 
580  XQC_Error
581  (*set_default_order_empty_sequences)(XQC_StaticContext *context, XQC_OrderEmptyMode mode);
582 
593  XQC_Error
594  (*get_default_order_empty_sequences)(XQC_StaticContext *context, XQC_OrderEmptyMode* mode);
595 
605  XQC_Error
606  (*set_boundary_space_policy)(XQC_StaticContext *context, XQC_BoundarySpaceMode mode);
607 
617  XQC_Error
618  (*get_boundary_space_policy)(XQC_StaticContext *context, XQC_BoundarySpaceMode* mode);
619 
630  XQC_Error
631  (*set_copy_ns_mode)(XQC_StaticContext *context, XQC_PreserveMode preserve, XQC_InheritMode inherit);
632 
644  XQC_Error
645  (*get_copy_ns_mode)(XQC_StaticContext *context, XQC_PreserveMode* preserve, XQC_InheritMode* inherit);
646 
656  XQC_Error
657  (*set_base_uri)(XQC_StaticContext *context, const char *base_uri);
658 
668  XQC_Error
669  (*get_base_uri)(XQC_StaticContext *context, const char **base_uri);
670 
671  XQC_Error (*set_error_handler)(XQC_StaticContext *context, XQC_ErrorHandler *handler);
672  XQC_Error (*get_error_handler)(const XQC_StaticContext *context, XQC_ErrorHandler **handler);
673 
683  void *(*get_interface)(const XQC_StaticContext *context, const char *name);
684 
691  void (*free)(XQC_StaticContext *context);
692 };
693 
708 
720  XQC_Error (*create_context)(const XQC_Expression *expression, XQC_DynamicContext **context);
721 
738  XQC_Error (*execute)(const XQC_Expression *expression, const XQC_DynamicContext *context, XQC_Sequence **sequence);
739 
749  void *(*get_interface)(const XQC_Expression *expression, const char *name);
750 
757  void (*free)(XQC_Expression *expression);
758 };
759 
779  XQC_Error (*set_variable)(XQC_DynamicContext *context, const char *uri, const char *name,
780  XQC_Sequence *value);
781 
782  XQC_Error (*get_variable)(const XQC_DynamicContext *context, const char *uri, const char *name,
783  XQC_Sequence **value);
784 
802  XQC_Error (*set_context_item)(XQC_DynamicContext *context, XQC_Sequence *value);
803 
804  XQC_Error (*get_context_item)(const XQC_DynamicContext *context, XQC_Sequence **value);
805 
811  XQC_Error (*set_implicit_timezone)(XQC_DynamicContext *context, int timezone);
812  XQC_Error (*get_implicit_timezone)(const XQC_DynamicContext *context, int *timezone);
813 
814  XQC_Error (*set_error_handler)(XQC_DynamicContext *context, XQC_ErrorHandler *handler);
815  XQC_Error (*get_error_handler)(const XQC_DynamicContext *context, XQC_ErrorHandler **handler);
816 
826  void *(*get_interface)(const XQC_DynamicContext *context, const char *name);
827 
834  void (*free)(XQC_DynamicContext *context);
835 };
836 
854  XQC_Error (*next)(XQC_Sequence *sequence);
855 
871  XQC_Error (*item_type)(const XQC_Sequence *sequence, XQC_ItemType *type);
872 
886  XQC_Error (*type_name)(const XQC_Sequence *sequence, const char **uri, const char **name);
887 
901  XQC_Error (*string_value)(const XQC_Sequence *sequence, const char **value);
902 
915  XQC_Error (*integer_value)(const XQC_Sequence *sequence, int *value);
916 
929  XQC_Error (*double_value)(const XQC_Sequence *sequence, double *value);
930 
945  XQC_Error (*node_name)(const XQC_Sequence *sequence, const char **uri, const char **name);
946 
958  void *(*get_interface)(const XQC_Sequence *sequence, const char *name);
959 
966  void (*free)(XQC_Sequence *sequence);
967 };
968 
969 #ifdef __cplusplus
970 }
971 #endif
972 
973 #endif
Definition: xqc.h:174
Definition: xqc.h:165
The ::XQC_InputStream struct is designed to be populated by users for the purpose of streaming data i...
Definition: xqc.h:81
Definition: xqc.h:60
Definition: xqc.h:364
XQC_ItemType
Definition: xqc.h:160
Definition: xqc.h:760
Definition: xqc.h:172
The implementation does not implement that function.
Definition: xqc.h:64
The encoding of the query has not been recognized, or is not supported by the implementation.
Definition: xqc.h:69
Definition: xqc.h:185
Definition: xqc.h:58
Definition: xqc.h:190
Definition: xqc.h:171
XQC_ConstructionMode
Construction mode as defined in http://www.w3.org/TR/xquery/#static_context.
Definition: xqc.h:392
No error.
Definition: xqc.h:56
XQC_XPath1Mode
XPath 1.0 compatibility mode as defined in http://www.w3.org/TR/xquery/#static_context.
Definition: xqc.h:359
Definition: xqc.h:189
A dynamic error has occured while preparing or executing the query.
Definition: xqc.h:73
Definition: xqc.h:376
The ::XQC_StaticContext struct provides a way to specify values for the static context of the query t...
Definition: xqc.h:404
Definition: xqc.h:175
Definition: xqc.h:168
XQC_Error
The error enumeration used by all XQC functions to designate error condition.
Definition: xqc.h:55
void(* free)(XQC_InputStream *stream)
Called to free the resources associated with the XQC_InputStream.
Definition: xqc.h:116
Definition: xqc.h:182
XQC_PreserveMode
Preserve part of the Copy-namespace mode as defined in http://www.w3.org/TR/xquery/#static_context.
Definition: xqc.h:382
Definition: xqc.h:392
XQC_OrderEmptyMode
Default order for empty sequences as defined in http://www.w3.org/TR/xquery/#static_context.
Definition: xqc.h:370
Definition: xqc.h:392
Definition: xqc.h:181
Definition: xqc.h:191
An implementation specific error has occurred.
Definition: xqc.h:63
Definition: xqc.h:183
Definition: xqc.h:382
Definition: xqc.h:173
Definition: xqc.h:184
XQC_OrderingMode
Ordering mode as defined in http://www.w3.org/TR/xquery/#static_context.
Definition: xqc.h:364
Definition: xqc.h:178
Definition: xqc.h:843
unsigned int(* read)(XQC_InputStream *stream, void *buffer, unsigned int length)
The function called to read more of the input query.
Definition: xqc.h:108
Definition: xqc.h:169
Definition: xqc.h:61
The ::XQC_ErrorHandler struct is designed to be populated by users for the purpose of collecting more...
Definition: xqc.h:131
Definition: xqc.h:163
Definition: xqc.h:188
Definition: xqc.h:187
Definition: xqc.h:176
Definition: xqc.h:359
The ::XQC_Implementation struct provides factory functions for preparing queries. ...
Definition: xqc.h:207
const char * encoding
The text encoding of the input data as a UTF-8 string, or 0 if unknown.
Definition: xqc.h:88
Definition: xqc.h:370
void * user_data
Can be used for user specific purposes.
Definition: xqc.h:136
Definition: xqc.h:177
Definition: xqc.h:180
Definition: xqc.h:364
Definition: xqc.h:164
Definition: xqc.h:359
Definition: xqc.h:370
void(* error)(XQC_ErrorHandler *handler, XQC_Error error, const char *error_uri, const char *error_localname, const char *description, XQC_Sequence *error_object)
The function called when an error occurs.
Definition: xqc.h:156
Definition: xqc.h:193
Definition: xqc.h:186
Definition: xqc.h:387
A type error has occured while preparing or executing the query.
Definition: xqc.h:72
XQC_BoundarySpaceMode
Boundary-space policy as defined in http://www.w3.org/TR/xquery/#static_context.
Definition: xqc.h:387
Definition: xqc.h:376
A static error has occured while preparing the query.
Definition: xqc.h:71
XQC_InheritMode
Inherit part of the Copy-namespace mode as defined in http://www.w3.org/TR/xquery/#static_context.
Definition: xqc.h:376
The end of the XQC_Sequence has been reached.
Definition: xqc.h:57
Definition: xqc.h:387
Definition: xqc.h:161
Definition: xqc.h:166
Definition: xqc.h:382
Definition: xqc.h:179
Definition: xqc.h:59
void * user_data
Can be used for user specific purposes.
Definition: xqc.h:93
The ::XQC_Expression struct represents a prepared query, and allows the user to execute that query an...
Definition: xqc.h:707
Definition: xqc.h:192
A serialization error has occured while serializing the output of a query.
Definition: xqc.h:74
Definition: xqc.h:167