## Triples Source Triples Source — Source of matches to a triple pattern. |

## Synopsis

                        rasqal_triple_meta;
                        rasqal_triples_match;
                        rasqal_triples_source;
                        rasqal_triples_source_factory;
    int                 (*rasqal_triples_source_factory_register_fn)
                                                            (rasqal_triples_source_factory *factory);
    enum                rasqal_triples_source_feature;
    void                (*rasqal_triples_error_handler)     (rasqal_query *query,
                                                             raptor_locator *locator,
                                                             const char *message);
    void                (*rasqal_triples_error_handler2)    (rasqal_world *world,
                                                             raptor_locator *locator,
                                                             const char *message);
    int                 rasqal_set_triples_source_factory   (rasqal_world *world,
                                                             rasqal_triples_source_factory_register_fn register_fn,
                                                             void *user_data);
    #define             RASQAL_TRIPLES_SOURCE_FACTORY_MIN_VERSION
    #define             RASQAL_TRIPLES_SOURCE_FACTORY_MAX_VERSION
    #define             RASQAL_TRIPLES_SOURCE_MIN_VERSION
    #define             RASQAL_TRIPLES_SOURCE_MAX_VERSION

## Description

A factory that provides the raw triple matches for a triple pattern against some RDF graph. The rasqal_triples_source_factory must create use a new rasqal_triples_source that can be used to initialise and build a rasqal_triples_match for some rasqal_triple (subject, predicate, object, origin URI).

## Details

### rasqal_triple_meta

    typedef struct {
      /* triple (subject, predicate, object) and origin */
      rasqal_variable* bindings[4];

      rasqal_triples_match *triples_match;

      void *context;

      rasqal_triple_parts parts;

      int is_exact;

      int executed;
    } rasqal_triple_meta;

Metadata for triple pattern matching for one triple pattern.

rasqal_variable *`bindings`[4]; | Variable bindings for this triple+origin to set.
rasqal_triples_match *`triples_match`; | The matcher that is setting these bindings.
void *`context`; | Context data used by the matcher.
rasqal_triple_parts `parts`; | Bitmask of rasqal_triple_parts flags describing the parts of the triple pattern that will bind to variables. There may also be variables mentioned that are bound in other triple patterns even if `parts` is 0.
int `is_exact`; | unused
int `executed`; | unused

### rasqal_triples_match

    typedef struct {
      void *user_data;

      rasqal_triple_parts (*bind_match)(struct rasqal_triples_match_s* rtm, void *user_data, rasqal_variable *bindings[4], rasqal_triple_parts parts);

      void (*next_match)(struct rasqal_triples_match_s* rtm, void *user_data);

      int (*is_end)(struct rasqal_triples_match_s* rtm, void *user_data);

      void (*finish)(struct rasqal_triples_match_s* rtm, void *user_data);

      rasqal_world *world;
    } rasqal_triples_match;

Triples match structure as initialised by rasqal_triples_source method init_triples_match.

void *`user_data`; | User data pointer for factory methods.
`bind_match` () | The [4]array (s,p,o,origin) bindings against the current triple match only touching triple parts given. Returns parts that were bound or 0 on failure.
`next_match` () | Move to next match.
`is_end` () | Check for end of triple match - return non-0 if is end.
`finish` () | Finish triples match and destroy any allocated memory.
rasqal_world *`world`; | rasqal_world object

### rasqal_triples_source

    typedef struct {
      rasqal_query* query;

      void *user_data;

      int (*init_triples_match)(rasqal_triples_match* rtm, 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_data, rasqal_triple *t);

      void (*free_triples_source)(void *user_data);
    } rasqal_triples_source;

Triples source as initialised by a rasqal_triples_source_factory.

rasqal_query *`query`; | Source for this query.
void *`user_data`; | Context user data passed into the factory methods.
`init_triples_match` () | Factory method to initalise a new rasqal_triples_match.
`triple_present` () | Factory method to return presence or absence of a complete triple.
`free_triples_source` () | Factory method to deallocate resources.

### rasqal_triples_source_factory

    typedef struct {
      int version;

      void *user_data;
      size_t user_data_size;

      /* API v1 */
      int (*new_triples_source)(rasqal_query* query, void *factory_user_data, void *user_data, rasqal_triples_source* rts);
      /* API v2 onwards */
      int (*init_triples_source)(rasqal_query* query, void *factory_user_data, void *user_data, rasqal_triples_source* rts, rasqal_triples_error_handler handler);
      /* API v3 onwards */
      int (*init_triples_source2)(rasqal_world* world, raptor_sequence* data_graphs, void *factory_user_data, void *user_data, rasqal_triples_source *rts, rasqal_triples_error_handler2 handler, unsigned int flags);
    } rasqal_triples_source_factory;

A factory that initialises rasqal_triples_source structures to returning matches to a triple pattern across the dataset formed from the data graphs recorded in the `query` object.

int `version`; | API factory version from 1 to 3
void *`user_data`; | User data for triples_source_factory.
size_t `user_data_size`; | Size of `user_data` for new_triples_source.
`new_triples_source` () | Create a new triples source - returns non-zero on failure < 0 is a 'no rdf data error', > 0 is an unspecified error. Error messages are generated by rasqal internally. (V1)
`init_triples_source` () | Initialise a new triples source V2 for a particular source URI/base URI and syntax. Returns non-zero on failure with errors reported via the handler callback by the implementation. (V2)
`init_triples_source2` () | Initialise a new triples source V3 for a particular source URI/base URI and syntax and given data graphs. Returns non-zero on failure with errors reported via the handler callback by the implementation. If bit 0 of flags is 1, enforce RAPTOR_FEATURE_NO_NET (V3)

### rasqal_triples_source_factory_register_fn ()

    int                 (*rasqal_triples_source_factory_register_fn)
                                                            (rasqal_triples_source_factory *factory);

Register a factory for generating triples sources rasqal_triples_source

`factory` : | factory to register
Returns : | non-0 on failure

### enum rasqal_triples_source_feature

    typedef enum {
      RASQAL_TRIPLES_SOURCE_FEATURE_NONE,
      RASQAL_TRIPLES_SOURCE_FEATURE_IOSTREAM_DATA_GRAPH
    } rasqal_triples_source_feature;

Optional features that may be supported by a triple source factory

`RASQAL_TRIPLES_SOURCE_FEATURE_NONE` | No feature
`RASQAL_TRIPLES_SOURCE_FEATURE_IOSTREAM_DATA_GRAPH` | Support raptor_iostream data graphs

### rasqal_triples_error_handler ()

    void                (*rasqal_triples_error_handler)     (rasqal_query *query,
                                                             raptor_locator *locator,
                                                             const char *message);

Triples source factory error handler callback.

`query` : | query object
`locator` : | error locator (or NULL)
`message` : | error message

### rasqal_triples_error_handler2 ()

    void                (*rasqal_triples_error_handler2)    (rasqal_world *world,
                                                             raptor_locator *locator,
                                                             const char *message);

Triples source factory error handler callback.

`world` : | world object
`locator` : | error locator (or NULL)
`message` : | error message

### rasqal_set_triples_source_factory ()

    int                 rasqal_set_triples_source_factory   (rasqal_world *world,
                                                             rasqal_triples_source_factory_register_fn register_fn,
                                                             void *user_data);

Register a factory to generate triple sources.

Registers the factory that returns triples sources. Note that there is only one of these per runtime.

The rasqal_triples_source_factory factory method new_triples_source is called with the user data for some query and rasqal_triples_source.

`world` : | rasqal_world object
`register_fn` : | registration function
`user_data` : | user data for registration
Returns : | non-zero on failure

### RASQAL_TRIPLES_SOURCE_FACTORY_MIN_VERSION

    #define RASQAL_TRIPLES_SOURCE_FACTORY_MIN_VERSION 1

Lowest accepted `rasqal_triples_source_factory` API version

### RASQAL_TRIPLES_SOURCE_FACTORY_MAX_VERSION

    #define RASQAL_TRIPLES_SOURCE_FACTORY_MAX_VERSION 3

Highest accepted `rasqal_triples_source_factory` API version

### RASQAL_TRIPLES_SOURCE_MIN_VERSION

    #define RASQAL_TRIPLES_SOURCE_MIN_VERSION 1

Lowest accepted `rasqal_triples_source` API version

### RASQAL_TRIPLES_SOURCE_MAX_VERSION

    #define RASQAL_TRIPLES_SOURCE_MAX_VERSION 2

Highest accepted `rasqal_triples_source` API version