RDF.Triple (RDF.ex v0.9.4) View Source

Helper functions for RDF triples.

An RDF Triple is represented as a plain Elixir tuple consisting of three valid RDF values for subject, predicate and object.

Link to this section Summary

Functions

Returns a triple where each element from a RDF.Triple is mapped with the given function.

Creates a RDF.Triple with proper RDF values.

Checks if the given tuple is a valid RDF triple.

Returns a tuple of native Elixir values from a RDF.Triple of RDF terms.

Link to this section Types

Link to this section Functions

Specs

map(t(), RDF.Statement.term_mapping()) :: t_values() | nil

Returns a triple where each element from a RDF.Triple is mapped with the given function.

Returns nil if one of the components of the given tuple is not convertible via RDF.Term.value/1.

The function fun will receive a tuple {statement_position, rdf_term} where statement_position is one of the atoms :subject, :predicate or :object, while rdf_term is the RDF term to be mapped. When the given function returns nil this will be interpreted as an error and will become the overhaul result of the map/2 call.

Examples

iex> {~I<http://example.com/S>, ~I<http://example.com/p>, RDF.literal(42)}
...> |> RDF.Triple.map(fn
...>      {:object, object} -> RDF.Term.value(object)
...>      {_, term}         -> term |> to_string() |> String.last()
...>    end)
{"S", "p", 42}
Link to this function

new(statement, property_map \\ nil)

View Source

Specs

Creates a RDF.Triple with proper RDF values.

An error is raised when the given elements are not coercible to RDF values.

Note: The RDF.triple function is a shortcut to this function.

Examples

iex> RDF.Triple.new {"http://example.com/S", "http://example.com/p", 42}
{~I<http://example.com/S>, ~I<http://example.com/p>, RDF.literal(42)}

iex> RDF.Triple.new {EX.S, EX.p, 42}
{RDF.iri("http://example.com/S"), RDF.iri("http://example.com/p"), RDF.literal(42)}

iex> RDF.Triple.new {EX.S, EX.p, 42, EX.Graph}
{RDF.iri("http://example.com/S"), RDF.iri("http://example.com/p"), RDF.literal(42)}

iex> RDF.Triple.new {EX.S, :p, 42}, RDF.PropertyMap.new(p: EX.p)
{RDF.iri("http://example.com/S"), RDF.iri("http://example.com/p"), RDF.literal(42)}
Link to this function

new(subject, predicate, object, property_map \\ nil)

View Source

Specs

Creates a RDF.Triple with proper RDF values.

An error is raised when the given elements are not coercible to RDF values.

Note: The RDF.triple function is a shortcut to this function.

Examples

iex> RDF.Triple.new("http://example.com/S", "http://example.com/p", 42)
{~I<http://example.com/S>, ~I<http://example.com/p>, RDF.literal(42)}

iex> RDF.Triple.new(EX.S, EX.p, 42)
{RDF.iri("http://example.com/S"), RDF.iri("http://example.com/p"), RDF.literal(42)}

iex> RDF.Triple.new(EX.S, :p, 42, RDF.PropertyMap.new(p: EX.p))
{RDF.iri("http://example.com/S"), RDF.iri("http://example.com/p"), RDF.literal(42)}

Specs

valid?(t() | any()) :: boolean()

Checks if the given tuple is a valid RDF triple.

The elements of a valid RDF triple must be RDF terms. On the subject position only IRIs and blank nodes allowed, while on the predicate position only IRIs allowed. The object position can be any RDF term.

Link to this function

values(triple, opts \\ [])

View Source

Specs

values(t(), keyword()) :: t_values() | nil

Returns a tuple of native Elixir values from a RDF.Triple of RDF terms.

When a :context option is given with a RDF.PropertyMap, predicates will be mapped to the terms defined in the RDF.PropertyMap, if present.

Returns nil if one of the components of the given tuple is not convertible via RDF.Term.value/1.

Examples

iex> RDF.Triple.values {~I<http://example.com/S>, ~I<http://example.com/p>, RDF.literal(42)}
{"http://example.com/S", "http://example.com/p", 42}

iex> {~I<http://example.com/S>, ~I<http://example.com/p>, RDF.literal(42)}
...> |> RDF.Triple.values(context: %{p: ~I<http://example.com/p>})
{"http://example.com/S", :p, 42}