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

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/