rasqal.h | rasqal.h | |||
---|---|---|---|---|
/* -*- Mode: c; c-basic-offset: 2 -*- | /* -*- Mode: c; c-basic-offset: 2 -*- | |||
* | * | |||
* rdql.h - Rasqal RDF Query library interfaces and definition | * rdql.h - Rasqal RDF Query library interfaces and definition | |||
* | * | |||
* $Id: rasqal.h,v 1.1 2003/08/12 10:46:29 cmdjb Exp $ | * $Id: rasqal.h,v 1.52 2004/05/13 22:33:08 cmdjb Exp $ | |||
* | * | |||
* Copyright (C) 2003 David Beckett - http://purl.org/net/dajobe/ | * Copyright (C) 2003-2004 David Beckett - http://purl.org/net/dajobe/ | |||
* Institute for Learning and Research Technology - http://www.ilrt.org/ | * Institute for Learning and Research Technology - http://www.ilrt.bris.ac | |||
.uk/ | ||||
* University of Bristol - http://www.bristol.ac.uk/ | * University of Bristol - http://www.bristol.ac.uk/ | |||
* | * | |||
* This package is Free Software or Open Source available under the | * This package is Free Software or Open Source available under the | |||
* following licenses (these are alternatives): | * following licenses (these are alternatives): | |||
* 1. GNU Lesser General Public License (LGPL) | * 1. GNU Lesser General Public License (LGPL) | |||
* 2. GNU General Public License (GPL) | * 2. GNU General Public License (GPL) | |||
* 3. Mozilla Public License (MPL) | * 3. Mozilla Public License (MPL) | |||
* | * | |||
* See LICENSE.html or LICENSE.txt at the top of this package for the | * See LICENSE.html or LICENSE.txt at the top of this package for the | |||
* full license terms. | * full license terms. | |||
skipping to change at line 39 | skipping to change at line 39 | |||
#ifdef WIN32 | #ifdef WIN32 | |||
# ifdef RASQAL_INTERNAL | # ifdef RASQAL_INTERNAL | |||
# define RASQAL_API _declspec(dllexport) | # define RASQAL_API _declspec(dllexport) | |||
# else | # else | |||
# define RASQAL_API _declspec(dllimport) | # define RASQAL_API _declspec(dllimport) | |||
# endif | # endif | |||
#else | #else | |||
# define RASQAL_API | # define RASQAL_API | |||
#endif | #endif | |||
/* RASQAL_API */ | #include <raptor.h> | |||
/* Public statics */ | ||||
extern const char * const rasqal_short_copyright_string; | ||||
extern const char * const rasqal_copyright_string; | ||||
extern const char * const rasqal_version_string; | ||||
extern const unsigned int rasqal_version_major; | ||||
extern const unsigned int rasqal_version_minor; | ||||
extern const unsigned int rasqal_version_release; | ||||
extern const unsigned int rasqal_version_decimal; | ||||
/* Public structure */ | ||||
typedef struct rasqal_query_s rasqal_query; | ||||
typedef struct rasqal_literal_s rasqal_literal; | ||||
typedef enum { | ||||
RASQAL_FEATURE_LAST | ||||
} rasqal_feature; | ||||
typedef struct { | ||||
const char *prefix; | ||||
raptor_uri* uri; | ||||
} rasqal_prefix ; | ||||
/* variable binding */ | ||||
typedef struct { | ||||
const char *name; | ||||
struct rasqal_literal_s *value; | ||||
int offset; /* offset in the rasqal_query variables array */ | ||||
} rasqal_variable; | ||||
typedef enum { | ||||
RASQAL_LITERAL_UNKNOWN, | ||||
RASQAL_LITERAL_URI, | ||||
RASQAL_LITERAL_QNAME, | ||||
RASQAL_LITERAL_STRING, | ||||
RASQAL_LITERAL_BLANK, | ||||
RASQAL_LITERAL_PATTERN, | ||||
RASQAL_LITERAL_BOOLEAN, | ||||
RASQAL_LITERAL_INTEGER, | ||||
RASQAL_LITERAL_FLOATING, | ||||
RASQAL_LITERAL_VARIABLE, | ||||
RASQAL_LITERAL_LAST= RASQAL_LITERAL_VARIABLE | ||||
} rasqal_literal_type; | ||||
struct rasqal_literal_s { | ||||
int usage; | ||||
rasqal_literal_type type; | ||||
char *string; /* string, pattern, qname, blank, float types */ | ||||
union { | ||||
int integer; /* integer and boolean types */ | ||||
double floating; /* floating */ | ||||
raptor_uri* uri; /* uri */ | ||||
rasqal_variable* variable; /* variable */ | ||||
} value; | ||||
char *language; /* for string */ | ||||
raptor_uri *datatype; /* for string */ | ||||
char *flags; /* for pattern; used as datatype qname for string */ | ||||
}; | ||||
typedef enum { | ||||
RASQAL_EXPR_UNKNOWN, | ||||
RASQAL_EXPR_AND, | ||||
RASQAL_EXPR_OR, | ||||
RASQAL_EXPR_EQ, | ||||
RASQAL_EXPR_NEQ, | ||||
RASQAL_EXPR_LT, | ||||
RASQAL_EXPR_GT, | ||||
RASQAL_EXPR_LE, | ||||
RASQAL_EXPR_GE, | ||||
RASQAL_EXPR_PLUS, | ||||
RASQAL_EXPR_MINUS, | ||||
RASQAL_EXPR_STAR, | ||||
RASQAL_EXPR_SLASH, | ||||
RASQAL_EXPR_REM, | ||||
RASQAL_EXPR_STR_EQ, | ||||
RASQAL_EXPR_STR_NEQ, | ||||
RASQAL_EXPR_STR_MATCH, | ||||
RASQAL_EXPR_STR_NMATCH, | ||||
RASQAL_EXPR_TILDE, | ||||
RASQAL_EXPR_BANG, | ||||
RASQAL_EXPR_LITERAL, | ||||
RASQAL_EXPR_PATTERN, | ||||
RASQAL_EXPR_LAST= RASQAL_EXPR_PATTERN | ||||
} rasqal_op; | ||||
struct rasqal_variable_s; | ||||
/* expression (arg1), unary op (arg1), binary op (arg1,arg2), | ||||
* literal or variable | ||||
*/ | ||||
struct rasqal_expression_s { | ||||
rasqal_op op; | ||||
struct rasqal_expression_s* arg1; | ||||
struct rasqal_expression_s* arg2; | ||||
rasqal_literal* literal; | ||||
rasqal_variable* variable; | ||||
char *value; | ||||
}; | ||||
typedef struct rasqal_expression_s rasqal_expression; | ||||
/* three expressions */ | ||||
typedef struct { | ||||
rasqal_literal* subject; | ||||
rasqal_literal* predicate; | ||||
rasqal_literal* object; | ||||
} rasqal_triple ; | ||||
/* RASQAL API */ | ||||
/* Public functions */ | ||||
RASQAL_API void rasqal_init(void); | ||||
RASQAL_API void rasqal_finish(void); | ||||
RASQAL_API int rasqal_languages_enumerate(const unsigned int counter, const | ||||
char **name, const char **label, const unsigned char **uri_string); | ||||
RASQAL_API int rasqal_language_name_check(const char *name); | ||||
/* Query class */ | ||||
/* Create */ | ||||
RASQAL_API rasqal_query* rasqal_new_query(const char *name, const unsigned | ||||
char *uri); | ||||
/* Destroy */ | ||||
RASQAL_API void rasqal_free_query(rasqal_query* query); | ||||
/* Methods */ | ||||
RASQAL_API const char* rasqal_query_get_name(rasqal_query* query); | ||||
RASQAL_API const char* rasqal_query_get_label(rasqal_query* query); | ||||
RASQAL_API void rasqal_query_set_fatal_error_handler(rasqal_query* query, v | ||||
oid *user_data, raptor_message_handler handler); | ||||
RASQAL_API void rasqal_query_set_error_handler(rasqal_query* query, void *u | ||||
ser_data, raptor_message_handler handler); | ||||
RASQAL_API void rasqal_query_set_warning_handler(rasqal_query* query, void | ||||
*user_data, raptor_message_handler handler); | ||||
RASQAL_API void rasqal_query_set_feature(rasqal_query *query, rasqal_featur | ||||
e feature, int value); | ||||
RASQAL_API void rasqal_query_add_source(rasqal_query* query, raptor_uri* ur | ||||
i); | ||||
RASQAL_API raptor_sequence* rasqal_query_get_source_sequence(rasqal_query* | ||||
query); | ||||
RASQAL_API raptor_uri* rasqal_query_get_source(rasqal_query* query, int idx | ||||
); | ||||
RASQAL_API void rasqal_query_add_variable(rasqal_query* query, rasqal_varia | ||||
ble* var); | ||||
RASQAL_API raptor_sequence* rasqal_query_get_variable_sequence(rasqal_query | ||||
* query); | ||||
RASQAL_API rasqal_variable* rasqal_query_get_variable(rasqal_query* query, | ||||
int idx); | ||||
RASQAL_API int rasqal_query_has_variable(rasqal_query* query, const char *n | ||||
ame); | ||||
RASQAL_API int rasqal_query_set_variable(rasqal_query* query, const char *n | ||||
ame, rasqal_literal* value); | ||||
RASQAL_API void rasqal_query_add_triple(rasqal_query* query, rasqal_triple* | ||||
triple); | ||||
RASQAL_API raptor_sequence* rasqal_query_get_triple_sequence(rasqal_query* | ||||
query); | ||||
RASQAL_API rasqal_triple* rasqal_query_get_triple(rasqal_query* query, int | ||||
idx); | ||||
RASQAL_API void rasqal_query_add_constraint(rasqal_query* query, rasqal_exp | ||||
ression* expr); | ||||
RASQAL_API raptor_sequence* rasqal_query_get_constraint_sequence(rasqal_que | ||||
ry* query); | ||||
RASQAL_API rasqal_expression* rasqal_query_get_constraint(rasqal_query* que | ||||
ry, int idx); | ||||
RASQAL_API void rasqal_query_add_prefix(rasqal_query* query, rasqal_prefix* | ||||
prefix); | ||||
RASQAL_API raptor_sequence* rasqal_query_get_prefix_sequence(rasqal_query* | ||||
query); | ||||
RASQAL_API rasqal_prefix* rasqal_query_get_prefix(rasqal_query* query, int | ||||
idx); | ||||
/* Utility methods */ | ||||
RASQAL_API void rasqal_query_print(rasqal_query* query, FILE *stream); | ||||
/* Query */ | ||||
RASQAL_API int rasqal_query_prepare(rasqal_query* query, const unsigned cha | ||||
r *query_string, raptor_uri *base_uri); | ||||
RASQAL_API int rasqal_query_execute(rasqal_query* query); | ||||
RASQAL_API int rasqal_query_get_result_count(rasqal_query *query); | ||||
RASQAL_API int rasqal_query_results_finished(rasqal_query *query); | ||||
RASQAL_API int rasqal_query_get_result_bindings(rasqal_query *query, const | ||||
char ***names, rasqal_literal ***values); | ||||
RASQAL_API rasqal_literal* rasqal_query_get_result_binding_value(rasqal_que | ||||
ry *query, int offset); | ||||
RASQAL_API const char* rasqal_query_get_result_binding_name(rasqal_query *q | ||||
uery, int offset); | ||||
RASQAL_API rasqal_literal* rasqal_query_get_result_binding_by_name(rasqal_q | ||||
uery *query, const char *name); | ||||
RASQAL_API int rasqal_query_next_result(rasqal_query *query); | ||||
RASQAL_API int rasqal_query_get_bindings_count(rasqal_query *query); | ||||
RASQAL_API void* rasqal_query_get_user_data(rasqal_query *query); | ||||
RASQAL_API void rasqal_query_set_user_data(rasqal_query *query, void *user_ | ||||
data); | ||||
/* Expression class */ | ||||
RASQAL_API rasqal_expression* rasqal_new_1op_expression(rasqal_op op, rasqa | ||||
l_expression* arg); | ||||
RASQAL_API rasqal_expression* rasqal_new_2op_expression(rasqal_op op, rasqa | ||||
l_expression* arg1, rasqal_expression* arg2); | ||||
RASQAL_API rasqal_expression* rasqal_new_string_op_expression(rasqal_op op, | ||||
rasqal_expression* arg1, rasqal_literal* literal); | ||||
RASQAL_API rasqal_expression* rasqal_new_literal_expression(rasqal_literal* | ||||
literal); | ||||
RASQAL_API rasqal_expression* rasqal_new_variable_expression(rasqal_variabl | ||||
e *variable); | ||||
RASQAL_API void rasqal_free_expression(rasqal_expression* expr); | ||||
RASQAL_API void rasqal_expression_print_op(rasqal_expression* expr, FILE* f | ||||
h); | ||||
RASQAL_API void rasqal_expression_print(rasqal_expression* expr, FILE* fh); | ||||
RASQAL_API rasqal_literal* rasqal_expression_evaluate(rasqal_query *query, | ||||
rasqal_expression* expr); | ||||
typedef int (*rasqal_expression_foreach_fn)(void *user_data, rasqal_express | ||||
ion *e); | ||||
RASQAL_API int rasqal_expression_foreach(rasqal_expression* expr, rasqal_ex | ||||
pression_foreach_fn fn, void *user_data); | ||||
/* Literal class */ | ||||
RASQAL_API rasqal_literal* rasqal_new_integer_literal(rasqal_literal_type t | ||||
ype, int integer); | ||||
RASQAL_API rasqal_literal* rasqal_new_floating_literal(const char *string); | ||||
RASQAL_API rasqal_literal* rasqal_new_uri_literal(raptor_uri* uri); | ||||
RASQAL_API rasqal_literal* rasqal_new_pattern_literal(char *pattern, char * | ||||
flags); | ||||
RASQAL_API rasqal_literal* rasqal_new_string_literal(char *string, char *la | ||||
nguage, raptor_uri *datatype, char *datatype_qname); | ||||
RASQAL_API rasqal_literal* rasqal_new_simple_literal(rasqal_literal_type ty | ||||
pe, char *string); | ||||
RASQAL_API rasqal_literal* rasqal_new_boolean_literal(int value); | ||||
RASQAL_API rasqal_literal* rasqal_new_variable_literal(rasqal_variable *var | ||||
iable); | ||||
RASQAL_API rasqal_literal* rasqal_new_literal_from_literal(rasqal_literal* | ||||
literal); | ||||
RASQAL_API void rasqal_free_literal(rasqal_literal* literal); | ||||
RASQAL_API void rasqal_literal_print(rasqal_literal* literal, FILE* fh); | ||||
RASQAL_API rasqal_variable* rasqal_literal_as_variable(rasqal_literal* lite | ||||
ral); | ||||
RASQAL_API char* rasqal_literal_as_string(rasqal_literal* literal); | ||||
RASQAL_API rasqal_literal* rasqal_literal_as_node(rasqal_literal* literal); | ||||
#define RASQAL_COMPARE_NOCASE 1 | ||||
RASQAL_API int rasqal_literal_compare(rasqal_literal* l1, rasqal_literal* l | ||||
2, int flags, int *error); | ||||
RASQAL_API int rasqal_literal_equals(rasqal_literal* l1, rasqal_literal* l2 | ||||
); | ||||
RASQAL_API rasqal_prefix* rasqal_new_prefix(const char* prefix, raptor_uri* | ||||
uri); | ||||
RASQAL_API void rasqal_free_prefix(rasqal_prefix* prefix); | ||||
RASQAL_API void rasqal_prefix_print(rasqal_prefix* p, FILE* fh); | ||||
/* Triple class */ | ||||
RASQAL_API rasqal_triple* rasqal_new_triple(rasqal_literal* subject, rasqal | ||||
_literal* predicate, rasqal_literal* object); | ||||
RASQAL_API void rasqal_free_triple(rasqal_triple* t); | ||||
RASQAL_API void rasqal_triple_print(rasqal_triple* t, FILE* fh); | ||||
/* Variable class */ | ||||
RASQAL_API rasqal_variable* rasqal_new_variable(rasqal_query* query, const | ||||
char *name, rasqal_literal *value); | ||||
RASQAL_API void rasqal_free_variable(rasqal_variable* variable); | ||||
RASQAL_API void rasqal_variable_print(rasqal_variable* t, FILE* fh); | ||||
RASQAL_API void rasqal_variable_set_value(rasqal_variable* v, rasqal_litera | ||||
l *l); | ||||
/* rasqal_engine.c */ | ||||
struct rasqal_triples_match_s { | ||||
void *user_data; | ||||
int (*bind_match)(struct rasqal_triples_match_s*, void *user_data, rasqal | ||||
_variable *bindings[3]); | ||||
void (*next_match)(struct rasqal_triples_match_s*, void *user_data); | ||||
int (*is_end)(struct rasqal_triples_match_s*, void *user_data); | ||||
void (*finish)(struct rasqal_triples_match_s*, void *user_data); | ||||
}; | ||||
typedef struct rasqal_triples_match_s rasqal_triples_match; | ||||
typedef struct | ||||
{ | ||||
/* All the parts of this triple are nodes - no variables */ | ||||
int is_exact; | ||||
rasqal_variable* bindings[3]; | ||||
rasqal_triples_match *triples_match; | ||||
void *context; | ||||
} rasqal_triple_meta; | ||||
struct rasqal_triples_source_s { | ||||
/* A source for this query */ | ||||
rasqal_query *query; | ||||
void *user_data; | ||||
/* the triples_source_factory initialises these method */ | ||||
rasqal_triples_match* (*new_triples_match)(struct rasqal_triples_source_s | ||||
* rts, void *user_data, rasqal_triple_meta *m, rasqal_triple *t); | ||||
int (*triple_present)(struct rasqal_triples_source_s* rts, void *user_dat | ||||
a, rasqal_triple *t); | ||||
void (*free_triples_source)(void *user_data); | ||||
}; | ||||
typedef struct rasqal_triples_source_s rasqal_triples_source; | ||||
typedef struct { | ||||
void *user_data; /* user data for triples_source_factory */ | ||||
size_t user_data_size; /* size of user data for new_triples_source */ | ||||
int (*new_triples_source)(rasqal_query *query, void *factory_user_data, v | ||||
oid *user_data, rasqal_triples_source* rts); | ||||
} rasqal_triples_source_factory; | ||||
/* set the triples_source_factory */ | ||||
void rasqal_set_triples_source_factory(void (*register_fn)(rasqal_triples_s | ||||
ource_factory *factory), void* user_data); | ||||
#ifdef __cplusplus | #ifdef __cplusplus | |||
} | } | |||
#endif | #endif | |||
#endif | #endif | |||
End of changes. 3 change blocks. | ||||
4 lines changed or deleted | 326 lines changed or added | |||