Triples 3 RASQAL Library
Triples Triple pattern or RDF triple.

## Synopsis

                rasqal_triple;
    enum        rasqal_triple_flags;
    rasqal_triple* rasqal_new_triple            (rasqal_literal *subject,
                                                 rasqal_literal *predicate,
                                                 rasqal_literal *object);
    rasqal_triple* rasqal_new_triple_from_triple
                                                (rasqal_triple *t);
    void        rasqal_free_triple              (rasqal_triple *t);
    rasqal_literal* rasqal_triple_get_origin    (rasqal_triple *t);
    enum        rasqal_triple_parts;
    void        rasqal_triple_print             (rasqal_triple *t,
                                                 FILE *fh);
    void        rasqal_triple_set_origin        (rasqal_triple *t,
                                                 rasqal_literal *l);

## Description

An object for a triple pattern or an RDF triple in a query. It contains the three parts of an RDF triple - subject, predicate, object as well as origin for matching triples in some graph (such as with the SPARQL `GRAPH`).

## Details

### rasqal_triple

    typedef struct {
      rasqal_literal* subject;
      rasqal_literal* predicate;
      rasqal_literal* object;
      rasqal_literal* origin;
      unsigned int flags;
    } rasqal_triple;

A triple pattern or RDF triple.

This is used as a triple pattern in queries and an RDF triple when generating RDF triples such as with SPARQL CONSTRUCT.

rasqal_literal *subject;

  Triple subject.

rasqal_literal *predicate;

  Triple predicate.

rasqal_literal *object;

  Triple object.

rasqal_literal *origin;

  Triple origin.

unsigned int flags;

  Or of enum rasqal_triple_flags bits.

rasqal_triple

### enum rasqal_triple_flags

    typedef enum {

      /* Not used - was only used internally in the execution engine */
      RASQAL_TRIPLE_FLAGS_EXACT=1,

      /* Not used - this is now a property of a graph pattern */
      RASQAL_TRIPLE_FLAGS_OPTIONAL=2,

      RASQAL_TRIPLE_FLAGS_LAST=RASQAL_TRIPLE_FLAGS_OPTIONAL
    } rasqal_triple_flags;

Flags for triple patterns.

`RASQAL_TRIPLE_FLAGS_EXACT`

  Not used.

`RASQAL_TRIPLE_FLAGS_OPTIONAL`

  Not used.

`RASQAL_TRIPLE_FLAGS_LAST`

  Internal.

rasqal_triple_flags

### rasqal_new_triple ()

    rasqal_triple* rasqal_new_triple            (rasqal_literal *subject,
                                                 rasqal_literal *predicate,
                                                 rasqal_literal *object);

Constructor - create a new rasqal_triple triple or triple pattern.

The triple origin can be set with `rasqal_triple_set_origin()`.

subject :

  Triple subject.

predicate :

  Triple predicate.

object :

  Triple object.

Returns :

  a new rasqal_triple or NULL on failure.

rasqal_new_triple

### rasqal_new_triple_from_triple ()

    rasqal_triple* rasqal_new_triple_from_triple
                                                (rasqal_triple *t);

Copy constructor - create a new rasqal_triple from an existing one.

t :

  Triple to copy.

Returns :

  a new rasqal_triple or NULL on failure.

rasqal_new_triple_from_triple

### rasqal_free_triple ()

    void        rasqal_free_triple              (rasqal_triple *t);

Destructor - destroy a rasqal_triple object.

t :

  rasqal_triple object.

rasqal_free_triple

### rasqal_triple_get_origin ()

    rasqal_literal* rasqal_triple_get_origin    (rasqal_triple *t);

Get the origin field of a rasqal_triple.

t :

  The triple object.

Returns :

  The triple origin or NULL.

rasqal_triple_get_origin

### enum rasqal_triple_parts

    typedef enum {
      RASQAL_TRIPLE_SUBJECT  = 1,
      RASQAL_TRIPLE_PREDICATE= 2,
      RASQAL_TRIPLE_OBJECT   = 4,
      RASQAL_TRIPLE_ORIGIN   = 8
    } rasqal_triple_parts;

Flags for parts of a triple.

`RASQAL_TRIPLE_SUBJECT`

  Subject present in a triple.

`RASQAL_TRIPLE_PREDICATE`

  Predicate present in a triple.

`RASQAL_TRIPLE_OBJECT`

  Object present in a triple.

`RASQAL_TRIPLE_ORIGIN`

  Origin present in a triple.

rasqal_triple_parts

### rasqal_triple_print ()

    void        rasqal_triple_print             (rasqal_triple *t,
                                                 FILE *fh);

Print a Rasqal triple in a debug format.

The print debug format may change in any release.

t :

  rasqal_triple object.

fh :

  The FILE* handle to print to.

rasqal_triple_print

### rasqal_triple_set_origin ()

    void        rasqal_triple_set_origin        (rasqal_triple *t,
                                                 rasqal_literal *l);

Set the origin field of a rasqal_triple.

t :

  The triple object.

l :

  The rasqal_literal object to set as origin.

rasqal_triple_set_origin