00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _XQUERY_C_API_H
00031 #define _XQUERY_C_API_H
00032
00033
00034 #include <stdio.h>
00035
00036 #ifdef __cplusplus
00037 extern "C" {
00038 #endif
00039
00041 #define XQC_VERSION_NUMBER 1
00042
00043 typedef struct XQC_Implementation_s XQC_Implementation;
00044 typedef struct XQC_StaticContext_s XQC_StaticContext;
00045 typedef struct XQC_Expression_s XQC_Expression;
00046 typedef struct XQC_DynamicContext_s XQC_DynamicContext;
00047 typedef struct XQC_Sequence_s XQC_Sequence;
00048 typedef struct XQC_InputStream_s XQC_InputStream;
00049 typedef struct XQC_ErrorHandler_s XQC_ErrorHandler;
00050
00055 typedef enum {
00056 XQC_NO_ERROR = 0,
00057 XQC_END_OF_SEQUENCE,
00058 XQC_NO_CURRENT_ITEM,
00059 XQC_PARSE_ERROR,
00060 XQC_INVALID_ARGUMENT,
00061 XQC_NOT_NODE,
00062
00063 XQC_INTERNAL_ERROR,
00064 XQC_NOT_IMPLEMENTED,
00065
00069 XQC_UNRECOGNIZED_ENCODING,
00070
00071 XQC_STATIC_ERROR,
00072 XQC_TYPE_ERROR,
00073 XQC_DYNAMIC_ERROR,
00074 XQC_SERIALIZATION_ERROR
00075 } XQC_Error;
00076
00081 struct XQC_InputStream_s {
00088 const char *encoding;
00089
00093 void *user_data;
00094
00108 unsigned int (*read)(XQC_InputStream *stream, void *buffer, unsigned int length);
00109
00116 void (*free)(XQC_InputStream *stream);
00117 };
00118
00131 struct XQC_ErrorHandler_s {
00132
00136 void *user_data;
00137
00156 void (*error)(XQC_ErrorHandler *handler, XQC_Error error, const char *error_uri,
00157 const char *error_localname, const char *description, XQC_Sequence *error_object);
00158 };
00159
00160 typedef enum {
00161 XQC_EMPTY_TYPE = 0,
00162
00163 XQC_DOCUMENT_TYPE,
00164 XQC_ELEMENT_TYPE,
00165 XQC_ATTRIBUTE_TYPE,
00166 XQC_TEXT_TYPE,
00167 XQC_PROCESSING_INSTRUCTION_TYPE,
00168 XQC_COMMENT_TYPE,
00169 XQC_NAMESPACE_TYPE,
00170
00171 XQC_ANY_SIMPLE_TYPE,
00172 XQC_ANY_URI_TYPE,
00173 XQC_BASE_64_BINARY_TYPE,
00174 XQC_BOOLEAN_TYPE,
00175 XQC_DATE_TYPE,
00176 XQC_DATE_TIME_TYPE,
00177 XQC_DAY_TIME_DURATION_TYPE,
00178 XQC_DECIMAL_TYPE,
00179 XQC_DOUBLE_TYPE,
00180 XQC_DURATION_TYPE,
00181 XQC_FLOAT_TYPE,
00182 XQC_G_DAY_TYPE,
00183 XQC_G_MONTH_TYPE,
00184 XQC_G_MONTH_DAY_TYPE,
00185 XQC_G_YEAR_TYPE,
00186 XQC_G_YEAR_MONTH_TYPE,
00187 XQC_HEX_BINARY_TYPE,
00188 XQC_NOTATION_TYPE,
00189 XQC_QNAME_TYPE,
00190 XQC_STRING_TYPE,
00191 XQC_TIME_TYPE,
00192 XQC_UNTYPED_ATOMIC_TYPE,
00193 XQC_YEAR_MONTH_DURATION_TYPE
00194
00195 } XQC_ItemType;
00196
00207 struct XQC_Implementation_s {
00208
00225 XQC_Error (*create_context)(XQC_Implementation *implementation, XQC_StaticContext **context);
00226
00244 XQC_Error (*prepare)(XQC_Implementation *implementation, const char *string,
00245 const XQC_StaticContext *context, XQC_Expression **expression);
00246
00266 XQC_Error (*prepare_file)(XQC_Implementation *implementation, FILE *file,
00267 const XQC_StaticContext *context, XQC_Expression **expression);
00268
00290 XQC_Error (*prepare_stream)(XQC_Implementation *implementation, XQC_InputStream *stream,
00291 const XQC_StaticContext *context, XQC_Expression **expression);
00292
00294
00300
00301 XQC_Error (*parse_document)(XQC_Implementation *implementation,
00302 const char *string, XQC_Sequence **sequence);
00304 XQC_Error (*parse_document_file)(XQC_Implementation *implementation,
00305 FILE *file, XQC_Sequence **sequence);
00307 XQC_Error (*parse_document_stream)(XQC_Implementation *implementation,
00308 XQC_InputStream *stream, XQC_Sequence **sequence);
00309
00311
00317 XQC_Error (*create_empty_sequence)(XQC_Implementation *implementation,
00318 XQC_Sequence **sequence);
00319 XQC_Error (*create_singleton_sequence)(XQC_Implementation *implementation,
00320 XQC_ItemType type, const char *value,
00321 XQC_Sequence **sequence);
00322 XQC_Error (*create_string_sequence)(XQC_Implementation *implementation,
00323 const char *values[], unsigned int count,
00324 XQC_Sequence **sequence);
00325 XQC_Error (*create_integer_sequence)(XQC_Implementation *implementation,
00326 int values[], unsigned int count,
00327 XQC_Sequence **sequence);
00328 XQC_Error (*create_double_sequence)(XQC_Implementation *implementation,
00329 double values[], unsigned int count,
00330 XQC_Sequence **sequence);
00331
00333
00343 void *(*get_interface)(const XQC_Implementation *implementation, const char *name);
00344
00351 void (*free)(XQC_Implementation *implementation);
00352 };
00353
00359 typedef enum { XQC_XPATH2_0, XQC_XPATH1_0 } XQC_XPath1Mode;
00360
00364 typedef enum { XQC_ORDERED, XQC_UNORDERED } XQC_OrderingMode;
00365
00370 typedef enum { XQC_EMPTY_GREATEST, XQC_EMPTY_LEAST } XQC_OrderEmptyMode;
00371
00376 typedef enum { XQC_INHERIT_NS, XQC_NO_INHERIT_NS } XQC_InheritMode;
00377
00382 typedef enum { XQC_PRESERVE_NS, XQC_NO_PRESERVE_NS } XQC_PreserveMode;
00383
00387 typedef enum { XQC_PRESERVE_SPACE, XQC_STRIP_SPACE } XQC_BoundarySpaceMode;
00388
00392 typedef enum { XQC_PRESERVE_CONS, XQC_STRIP_CONS } XQC_ConstructionMode;
00393
00404 struct XQC_StaticContext_s {
00405
00420 XQC_Error
00421 (*create_child_context)(XQC_StaticContext *context, XQC_StaticContext **child_context);
00422
00434 XQC_Error
00435 (*declare_ns)(XQC_StaticContext *context, const char *prefix, const char *uri);
00436
00448 XQC_Error
00449 (*get_ns_by_prefix)(XQC_StaticContext *context, const char *prefix, const char **result_ns);
00450
00460 XQC_Error
00461 (*set_default_element_and_type_ns)(XQC_StaticContext *context, const char *uri);
00462
00471 XQC_Error
00472 (*get_default_element_and_type_ns)(XQC_StaticContext *context, const char **uri);
00473
00483 XQC_Error
00484 (*set_default_function_ns)(XQC_StaticContext *context, const char *uri);
00485
00495 XQC_Error
00496 (*get_default_function_ns)(XQC_StaticContext *context, const char **uri);
00497
00507 XQC_Error
00508 (*set_xpath_compatib_mode)(XQC_StaticContext *context, XQC_XPath1Mode mode);
00509
00519 XQC_Error
00520 (*get_xpath_compatib_mode)(XQC_StaticContext *context, XQC_XPath1Mode* mode);
00521
00531 XQC_Error
00532 (*set_construction_mode)(XQC_StaticContext *context, XQC_ConstructionMode mode);
00533
00543 XQC_Error
00544 (*get_construction_mode)(XQC_StaticContext *context, XQC_ConstructionMode* mode);
00545
00555 XQC_Error
00556 (*set_ordering_mode)(XQC_StaticContext *context, XQC_OrderingMode mode);
00557
00567 XQC_Error
00568 (*get_ordering_mode)(XQC_StaticContext *context, XQC_OrderingMode* mode);
00569
00580 XQC_Error
00581 (*set_default_order_empty_sequences)(XQC_StaticContext *context, XQC_OrderEmptyMode mode);
00582
00593 XQC_Error
00594 (*get_default_order_empty_sequences)(XQC_StaticContext *context, XQC_OrderEmptyMode* mode);
00595
00605 XQC_Error
00606 (*set_boundary_space_policy)(XQC_StaticContext *context, XQC_BoundarySpaceMode mode);
00607
00617 XQC_Error
00618 (*get_boundary_space_policy)(XQC_StaticContext *context, XQC_BoundarySpaceMode* mode);
00619
00630 XQC_Error
00631 (*set_copy_ns_mode)(XQC_StaticContext *context, XQC_PreserveMode preserve, XQC_InheritMode inherit);
00632
00644 XQC_Error
00645 (*get_copy_ns_mode)(XQC_StaticContext *context, XQC_PreserveMode* preserve, XQC_InheritMode* inherit);
00646
00656 XQC_Error
00657 (*set_base_uri)(XQC_StaticContext *context, const char *base_uri);
00658
00668 XQC_Error
00669 (*get_base_uri)(XQC_StaticContext *context, const char **base_uri);
00670
00671 XQC_Error (*set_error_handler)(XQC_StaticContext *context, XQC_ErrorHandler *handler);
00672 XQC_Error (*get_error_handler)(const XQC_StaticContext *context, XQC_ErrorHandler **handler);
00673
00683 void *(*get_interface)(const XQC_StaticContext *context, const char *name);
00684
00691 void (*free)(XQC_StaticContext *context);
00692 };
00693
00707 struct XQC_Expression_s {
00708
00720 XQC_Error (*create_context)(const XQC_Expression *expression, XQC_DynamicContext **context);
00721
00738 XQC_Error (*execute)(const XQC_Expression *expression, const XQC_DynamicContext *context, XQC_Sequence **sequence);
00739
00749 void *(*get_interface)(const XQC_Expression *expression, const char *name);
00750
00757 void (*free)(XQC_Expression *expression);
00758 };
00759
00760 struct XQC_DynamicContext_s {
00779 XQC_Error (*set_variable)(XQC_DynamicContext *context, const char *uri, const char *name,
00780 XQC_Sequence *value);
00781
00782 XQC_Error (*get_variable)(const XQC_DynamicContext *context, const char *uri, const char *name,
00783 XQC_Sequence **value);
00784
00802 XQC_Error (*set_context_item)(XQC_DynamicContext *context, XQC_Sequence *value);
00803
00804 XQC_Error (*get_context_item)(const XQC_DynamicContext *context, XQC_Sequence **value);
00805
00811 XQC_Error (*set_implicit_timezone)(XQC_DynamicContext *context, int timezone);
00812 XQC_Error (*get_implicit_timezone)(const XQC_DynamicContext *context, int *timezone);
00813
00814 XQC_Error (*set_error_handler)(XQC_DynamicContext *context, XQC_ErrorHandler *handler);
00815 XQC_Error (*get_error_handler)(const XQC_DynamicContext *context, XQC_ErrorHandler **handler);
00816
00826 void *(*get_interface)(const XQC_DynamicContext *context, const char *name);
00827
00834 void (*free)(XQC_DynamicContext *context);
00835 };
00836
00843 struct XQC_Sequence_s {
00854 XQC_Error (*next)(XQC_Sequence *sequence);
00855
00871 XQC_Error (*item_type)(const XQC_Sequence *sequence, XQC_ItemType *type);
00872
00886 XQC_Error (*type_name)(const XQC_Sequence *sequence, const char **uri, const char **name);
00887
00901 XQC_Error (*string_value)(const XQC_Sequence *sequence, const char **value);
00902
00915 XQC_Error (*integer_value)(const XQC_Sequence *sequence, int *value);
00916
00929 XQC_Error (*double_value)(const XQC_Sequence *sequence, double *value);
00930
00945 XQC_Error (*node_name)(const XQC_Sequence *sequence, const char **uri, const char **name);
00946
00958 void *(*get_interface)(const XQC_Sequence *sequence, const char *name);
00959
00966 void (*free)(XQC_Sequence *sequence);
00967 };
00968
00969 #ifdef __cplusplus
00970 }
00971 #endif
00972
00973 #endif