|  |  |  | Rasqal RDF Query Library Manual |  | 
|---|---|---|---|---|
typedef rasqal_expression; enum rasqal_op; enum rasqal_compare_flags; enum rasqal_pattern_flags; rasqal_expression* rasqal_new_1op_expression (rasqal_op op, rasqal_expression *arg); rasqal_expression* rasqal_new_2op_expression (rasqal_op op, rasqal_expression *arg1, rasqal_expression *arg2); rasqal_expression* rasqal_new_3op_expression (rasqal_op op, rasqal_expression *arg1, rasqal_expression *arg2, rasqal_expression *arg3); rasqal_expression* rasqal_new_cast_expression (raptor_uri *name, rasqal_expression *value); rasqal_expression* rasqal_new_function_expression (raptor_uri *name, raptor_sequence *args); rasqal_expression* rasqal_new_literal_expression (rasqal_literal *literal); rasqal_expression* rasqal_new_string_op_expression (rasqal_op op, rasqal_expression *arg1, rasqal_literal *literal); rasqal_expression* rasqal_new_expression_from_expression (rasqal_expression *e); void rasqal_free_expression (rasqal_expression *e); rasqal_literal* rasqal_expression_evaluate (rasqal_query *query, rasqal_expression *e, int flags); int (*rasqal_expression_foreach_fn) (void *user_data, rasqal_expression *e); int rasqal_expression_foreach (rasqal_expression *e, rasqal_expression_foreach_fn fn, void *user_data); void rasqal_expression_print (rasqal_expression *e, FILE *fh); void rasqal_expression_print_op (rasqal_expression *e, FILE *fh); int (*rasqal_expression_visit_fn) (void *user_data, rasqal_expression *e); int rasqal_expression_visit (rasqal_expression *e, rasqal_expression_visit_fn fn, void *user_data);
Expressions form an expression tree that can be evaluated using
rasqal_expression_evaluate() over rasqal_op operators, rasqal_literal
constants and rasqal_variable values bound in some
rasqal_query_result.  The result is a rasqal_literal value.
typedef struct rasqal_expression_s rasqal_expression;
expression (arg1), unary op (arg1), binary op (arg1,arg2), literal or variable
typedef enum {
  /* internal */
  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_UMINUS,
  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_FUNCTION,
  RASQAL_EXPR_BOUND,
  RASQAL_EXPR_STR,
  RASQAL_EXPR_LANG,
  RASQAL_EXPR_DATATYPE,
  RASQAL_EXPR_ISURI,
  RASQAL_EXPR_ISBLANK,
  RASQAL_EXPR_ISLITERAL,
  RASQAL_EXPR_CAST,
  RASQAL_EXPR_ORDER_COND_ASC,
  RASQAL_EXPR_ORDER_COND_DESC,
  RASQAL_EXPR_LANGMATCHES,
  RASQAL_EXPR_REGEX,
  /* internal */
  RASQAL_EXPR_LAST= RASQAL_EXPR_REGEX
} rasqal_op;
Rasqal expression operators. A mixture of unary, binary and tertiary operators (string matches). Also includes casting and two ordering operators from ORDER BY in SPARQL.
| RASQAL_EXPR_UNKNOWN | Internal | 
| RASQAL_EXPR_AND | Expression for AND(A, B) | 
| RASQAL_EXPR_OR | Expression for OR(A, B) | 
| RASQAL_EXPR_EQ | Expression for A equals B | 
| RASQAL_EXPR_NEQ | Expression for A not equals B. | 
| RASQAL_EXPR_LT | Expression for A less than B. | 
| RASQAL_EXPR_GT | Expression for A greather than B. | 
| RASQAL_EXPR_LE | Expression for A less than or equal to B. | 
| RASQAL_EXPR_GE | Expression for A greater than or equal to B. | 
| RASQAL_EXPR_UMINUS | Expression for -A. | 
| RASQAL_EXPR_PLUS | Expression for +A. | 
| RASQAL_EXPR_MINUS | Expression for A-B. | 
| RASQAL_EXPR_STAR | Expression for A*B. | 
| RASQAL_EXPR_SLASH | Expression for A/B. | 
| RASQAL_EXPR_REM | Expression for A/B remainder. | 
| RASQAL_EXPR_STR_EQ | Expression for A string equals B. | 
| RASQAL_EXPR_STR_NEQ | Expression for A string not-equals B. | 
| RASQAL_EXPR_STR_MATCH | Expression for string A matches literal regex B with flags. | 
| RASQAL_EXPR_STR_NMATCH | Expression for string A not-matches literal regex B with flags. | 
| RASQAL_EXPR_TILDE | Expression for binary not A. | 
| RASQAL_EXPR_BANG | Expression for logical not A. | 
| RASQAL_EXPR_LITERAL | Expression for a rasqal_literal. | 
| RASQAL_EXPR_FUNCTION | Expression for a function A with arguments (B...). | 
| RASQAL_EXPR_BOUND | Expression for SPARQL ISBOUND(A). | 
| RASQAL_EXPR_STR | Expression for SPARQL STR(A). | 
| RASQAL_EXPR_LANG | Expression for SPARQL LANG(A). | 
| RASQAL_EXPR_DATATYPE | Expression for SPARQL DATATYPE(A). | 
| RASQAL_EXPR_ISURI | Expression for SPARQL ISURI(A). | 
| RASQAL_EXPR_ISBLANK | Expression for SPARQL ISBLANK(A). | 
| RASQAL_EXPR_ISLITERAL | Expression for SPARQL ISLITERAL(A). | 
| RASQAL_EXPR_CAST | Expression for cast literal A to type B. | 
| RASQAL_EXPR_ORDER_COND_ASC | Expression for SPARQL order condition ascending. | 
| RASQAL_EXPR_ORDER_COND_DESC | Expression for SPARQL order condition descending. | 
| RASQAL_EXPR_LANGMATCHES | Expression for SPARQL LANGMATCHES(A, B). | 
| RASQAL_EXPR_REGEX | Expression for string A matches expression regex B with flags. | 
| RASQAL_EXPR_LAST | Internal | 
typedef enum {
  RASQAL_COMPARE_NOCASE = 1,
  RASQAL_COMPARE_XQUERY = 2
} rasqal_compare_flags;
Flags for rasqal_expression_evaluate() or rasqal_literal_compare().
typedef enum {
  RASQAL_PATTERN_FLAGS_OPTIONAL=1,
  RASQAL_PATTERN_FLAGS_LAST=RASQAL_PATTERN_FLAGS_OPTIONAL
} rasqal_pattern_flags;
Flags for rasqal_graph_pattern.
rasqal_expression* rasqal_new_1op_expression (rasqal_op op, rasqal_expression *arg);
Constructor - create a new 1-operand expression.
The operators are:
RASQAL_EXPR_TILDE RASQAL_EXPR_BANG RASQAL_EXPR_UMINUS
RASQAL_EXPR_BOUND RASQAL_EXPR_STR RASQAL_EXPR_LANG
RASQAL_EXPR_LANGMATCHES
RASQAL_EXPR_DATATYPE RASQAL_EXPR_ISURI RASQAL_EXPR_ISBLANK
RASQAL_EXPR_ISLITERAL RASQAL_EXPR_ORDER_COND_ASC
RASQAL_EXPR_ORDER_COND_DESC
RASQAL_EXPR_BANG and RASQAL_EXPR_UMINUS are used by RDQL and
SPARQL.  RASQAL_EXPR_TILDE by RDQL only.  The rest by SPARQL
only.
| op: | Expression operator | 
| arg: | Operand 1 | 
| Returns : | a new rasqal_expression object or NULL on failure | 
rasqal_expression* rasqal_new_2op_expression (rasqal_op op, rasqal_expression *arg1, rasqal_expression *arg2);
Constructor - create a new 2-operand expression.
The operators are:
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_REM RASQAL_EXPR_STR_EQ and RASQAL_EXPR_STR_NEQ are
not used by SPARQL. RASQAL_EXPR_REM is used by RDQL.
| op: | Expression operator | 
| arg1: | Operand 1 | 
| arg2: | Operand 2 | 
| Returns : | a new rasqal_expression object or NULL on failure | 
rasqal_expression* rasqal_new_3op_expression (rasqal_op op, rasqal_expression *arg1, rasqal_expression *arg2, rasqal_expression *arg3);
Constructor - create a new 3-operand expression.
The only operator is:
RASQAL_EXPR_REGEX
| op: | Expression operator | 
| arg1: | Operand 1 | 
| arg2: | Operand 2 | 
| arg3: | Operand 3 (may be NULL) | 
| Returns : | a new rasqal_expression object or NULL on failure | 
rasqal_expression* rasqal_new_cast_expression (raptor_uri *name, rasqal_expression *value);
Constructor - create a new expression for casting and expression to a datatype
| name: | cast datatype URI | 
| value: | expression value to cast to datatypetype | 
| Returns : | a new rasqal_expression object or NULL on failure | 
rasqal_expression* rasqal_new_function_expression (raptor_uri *name, raptor_sequence *args);
Constructor - create a new expression for a function with expression arguments
| name: | function name | 
| args: | sequence of rasqal_expression function arguments | 
| Returns : | a new rasqal_expression object or NULL on failure | 
rasqal_expression* rasqal_new_literal_expression (rasqal_literal *literal);
Constructor - create a new expression for a rasqal_literal
| literal: | Literal operand 1 | 
| Returns : | a new rasqal_expression object or NULL on failure | 
rasqal_expression* rasqal_new_string_op_expression (rasqal_op op, rasqal_expression *arg1, rasqal_literal *literal);
Constructor - create a new expression with one expression and one string operand.
The operators are:
RASQAL_EXPR_STR_MATCH (RDQL, SPARQL) and
RASQAL_EXPR_STR_NMATCH (RDQL)
| op: | Expression operator | 
| arg1: | Operand 1 | 
| literal: | Literal operand 2 | 
| Returns : | a new rasqal_expression object or NULL on failure | 
rasqal_expression* rasqal_new_expression_from_expression (rasqal_expression *e);
Copy Constructor - create a new rasqal_expression object from an existing rasqal_expression object.
| e: | rasqal_expression object to copy | 
| Returns : | a new rasqal_expression object or NULL on failure | 
void rasqal_free_expression (rasqal_expression *e);
Destructor - destroy a rasqal_expression object.
| e: | rasqal_expression object | 
rasqal_literal* rasqal_expression_evaluate (rasqal_query *query, rasqal_expression *e, int flags);
Evaluate a rasqal_expression tree to give a rasqal_literal result or error.
| query: | rasqal_query this expression belongs to | 
| e: | The expression to evaluate. | 
| flags: | Flags for rasqal_literal_compare()and RASQAL_COMPARE_NOCASE for string matches. | 
| Returns : | a rasqal_literal value or NULL on failure. | 
int         (*rasqal_expression_foreach_fn) (void *user_data,
                                             rasqal_expression *e);
User function to visit an expression and operate on it.
deprecated: Use rasqal_expression_visit_fn and rasqal_expression_visit()
| user_data: | user data passed in with rasqal_expression_foreach() | 
| e: | current expression | 
| Returns : | 0 to truncate the visit | 
int rasqal_expression_foreach (rasqal_expression *e, rasqal_expression_foreach_fn fn, void *user_data);
Visit a user function over a rasqal_expression
deprecated: Use rasqal_expression_visit() instead.
| e: | rasqal_expression to visit | 
| fn: | visit function | 
| user_data: | user data to pass to visit function | 
| Returns : | 0 if the visit was truncated. | 
void rasqal_expression_print (rasqal_expression *e, FILE *fh);
Print a Rasqal expression in a debug format.
The print debug format may change in any release.
| e: | rasqal_expression object. | 
| fh: | The FILE* handle to print to. | 
void rasqal_expression_print_op (rasqal_expression *e, FILE *fh);
Print a rasqal expression operator in a debug format.
The print debug format may change in any release.
| e: | the rasqal_expression object | 
| fh: | the FILE* handle to print to | 
int         (*rasqal_expression_visit_fn)   (void *user_data,
                                             rasqal_expression *e);
User function to visit an expression and operate on it with
rasqal_expression_visit()
| user_data: | user data passed in with rasqal_expression_visit() | 
| e: | current expression | 
| Returns : | 0 to truncate the visit | 
int rasqal_expression_visit (rasqal_expression *e, rasqal_expression_visit_fn fn, void *user_data);
Visit a user function over a rasqal_expression
If the user function fn returns 0, the visit is truncated.
| e: | rasqal_expression to visit | 
| fn: | visit function | 
| user_data: | user data to pass to visit function | 
| Returns : | 0 if the visit was truncated. |