View Source RDF.Dataset (RDF.ex v1.0.0)

A set of RDF.Graphs.

It may have multiple named graphs and at most one unnamed ("default") graph.

RDF.Dataset implements:

Link to this section Summary

Functions

Adds triples and quads to a RDF.Dataset.

Changes the dataset name of dataset.

The default graph of a RDF.Dataset.

Deletes statements from a RDF.Dataset.

Deletes the default graph.

Deletes the given graph.

Checks if a graph of a RDF.Dataset contains statements about the given resource.

Returns if the given dataset is empty.

Checks if two RDF.Datasets are equal.

Fetches the RDF.Graph with the given name.

Fetches the RDF.Graph with the given name.

Gets and updates the graph with the given name, in a single pass.

The graph with given name.

The number of graphs within a RDF.Dataset.

The set of all graphs.

Checks if the given input statements exist within dataset.

Returns a nested map of a RDF.Dataset where each element from its quads is mapped with the given function.

Returns the dataset name IRI of dataset.

Creates an empty unnamed RDF.Dataset.

Creates an RDF.Dataset initialized with data.

The set of all resources used in the objects within a RDF.Dataset.

Pops an arbitrary statement from a RDF.Dataset.

Pops the graph with the given name.

The set of all properties used in the predicates within all graphs of a RDF.Dataset.

Returns the aggregated prefixes of all graphs of dataset as a RDF.PrefixMap.

Adds statements to a RDF.Dataset overwriting existing statements with the subjects given in the input data.

Adds statements to a RDF.Dataset and overwrites all existing statements with the same subject-predicate combinations given in the input data.

All statements within all graphs of a RDF.Dataset as quads.

The set of all resources used within a RDF.Dataset.

The number of statements within a RDF.Dataset.

All statements within all graphs of a RDF.Dataset.

The set of all subjects used in the statement within all graphs of a RDF.Dataset.

All statements within all graphs of a RDF.Dataset as triples.

Returns a nested map of the native Elixir values of a RDF.Dataset.

Returns the names of all graphs of a RDF.Dataset containing statements about the given subject.

Link to this section Types

@type graph_name() :: RDF.IRI.t() | nil
@type input() :: RDF.Graph.input() | t()
@type t() :: %RDF.Dataset{
  graphs: %{required(graph_name()) => RDF.Graph.t()},
  name: graph_name()
}
@type update_graph_fun() :: (RDF.Graph.t() -> {RDF.Graph.t(), input()} | :pop)

Link to this section Functions

Link to this function

add(dataset, input, opts \\ [])

View Source
@spec add(t(), input(), keyword()) :: t()

Adds triples and quads to a RDF.Dataset.

The triples can be provided in any form accepted by add/2.

The graph option allows to set a different destination graph to which the statements should be added, ignoring the graph context of given quads or the name of given graphs in input.

Note: When the statements to be added are given as another RDF.Dataset and a destination graph is set with the graph option, the descriptions of the subjects in the different graphs are aggregated.

Link to this function

change_name(dataset, new_name)

View Source
@spec change_name(t(), RDF.Statement.coercible_graph_name()) :: t()

Changes the dataset name of dataset.

@spec default_graph(t()) :: RDF.Graph.t()

The default graph of a RDF.Dataset.

Link to this function

delete(dataset, input, opts \\ [])

View Source
@spec delete(t(), input(), keyword()) :: t()

Deletes statements from a RDF.Dataset.

The graph option allows to set a different destination graph from which the statements should be deleted, ignoring the graph context of given quads or the name of given graphs.

Note: When the statements to be deleted are given as another RDF.Dataset, the dataset name must not match dataset name of the dataset from which the statements are deleted. If you want to delete only datasets with matching names, you can use RDF.Data.delete/2.

Link to this function

delete_default_graph(graph)

View Source
@spec delete_default_graph(t()) :: t()

Deletes the default graph.

Link to this function

delete_graph(graph, graph_names)

View Source
@spec delete_graph(
  t(),
  RDF.Statement.graph_name() | [RDF.Statement.graph_name()] | nil
) :: t()

Deletes the given graph.

Link to this function

describes?(dataset, subject, graph_context \\ nil)

View Source
@spec describes?(t(), RDF.Statement.t(), RDF.Statement.coercible_graph_name() | nil) ::
  boolean()

Checks if a graph of a RDF.Dataset contains statements about the given resource.

examples

Examples

  iex> RDF.Dataset.new([{EX.S1, EX.p1, EX.O1}]) |> RDF.Dataset.describes?(EX.S1)
  true
  iex> RDF.Dataset.new([{EX.S1, EX.p1, EX.O1}]) |> RDF.Dataset.describes?(EX.S2)
  false
@spec empty?(t()) :: boolean()

Returns if the given dataset is empty.

Note: You should always prefer this over the use of Enum.empty?/1 as it is significantly faster.

Link to this function

equal?(dataset1, dataset2)

View Source
@spec equal?(t() | any(), t() | any()) :: boolean()

Checks if two RDF.Datasets are equal.

Two RDF.Datasets are considered to be equal if they contain the same triples and have the same name.

Link to this function

fetch(dataset, graph_name)

View Source
@spec fetch(t(), RDF.Statement.graph_name() | nil) :: {:ok, RDF.Graph.t()} | :error

Fetches the RDF.Graph with the given name.

When a graph with the given name can not be found can not be found :error is returned.

examples

Examples

iex> dataset = RDF.Dataset.new([{EX.S1, EX.P1, EX.O1, EX.Graph}, {EX.S2, EX.P2, EX.O2}])
...> RDF.Dataset.fetch(dataset, EX.Graph)
{:ok, RDF.Graph.new({EX.S1, EX.P1, EX.O1}, name: EX.Graph)}
iex> RDF.Dataset.fetch(dataset, nil)
{:ok, RDF.Graph.new({EX.S2, EX.P2, EX.O2})}
iex> RDF.Dataset.fetch(dataset, EX.Foo)
:error
Link to this function

get(dataset, graph_name, default \\ nil)

View Source
@spec get(t(), RDF.Statement.graph_name() | nil, RDF.Graph.t() | nil) ::
  RDF.Graph.t() | nil

Fetches the RDF.Graph with the given name.

When a graph with the given name can not be found can not be found the optionally given default value or nil is returned

examples

Examples

iex> dataset = RDF.Dataset.new([{EX.S1, EX.P1, EX.O1, EX.Graph}, {EX.S2, EX.P2, EX.O2}])
...> RDF.Dataset.get(dataset, EX.Graph)
RDF.Graph.new({EX.S1, EX.P1, EX.O1}, name: EX.Graph)
iex> RDF.Dataset.get(dataset, nil)
RDF.Graph.new({EX.S2, EX.P2, EX.O2})
iex> RDF.Dataset.get(dataset, EX.Foo)
nil
iex> RDF.Dataset.get(dataset, EX.Foo, :bar)
:bar
Link to this function

get_and_update(dataset, graph_name, fun)

View Source
@spec get_and_update(t(), RDF.Statement.graph_name() | nil, update_graph_fun()) ::
  {RDF.Graph.t(), t()}

Gets and updates the graph with the given name, in a single pass.

Invokes the passed function on the RDF.Graph with the given name; this function should return either {graph_to_return, new_graph} or :pop.

If the passed function returns {graph_to_return, new_graph}, the return value of get_and_update is {graph_to_return, new_dataset} where new_dataset is the input Dataset updated with new_graph for the given name.

If the passed function returns :pop the graph with the given name is removed and a {removed_graph, new_dataset} tuple gets returned.

examples

Examples

iex> dataset = RDF.Dataset.new({EX.S, EX.P, EX.O, EX.Graph})
...> RDF.Dataset.get_and_update(dataset, EX.Graph, fn current_graph ->
...>     {current_graph, {EX.S, EX.P, EX.NEW}}
...>   end)
{RDF.Graph.new({EX.S, EX.P, EX.O}, name: EX.Graph), RDF.Dataset.new({EX.S, EX.P, EX.NEW, EX.Graph})}
Link to this function

graph(dataset, graph_name)

View Source
@spec graph(t(), RDF.Statement.graph_name() | nil) :: RDF.Graph.t()

The graph with given name.

@spec graph_count(t()) :: non_neg_integer()

The number of graphs within a RDF.Dataset.

examples

Examples

iex> RDF.Dataset.new([
...>   {EX.S1, EX.p1, EX.O1},
...>   {EX.S2, EX.p2, EX.O2},
...>   {EX.S1, EX.p2, EX.O3, EX.Graph}])
...> |> RDF.Dataset.graph_count()
2
@spec graphs(t()) :: [RDF.Graph.t()]

The set of all graphs.

Link to this function

include?(dataset, input, opts \\ [])

View Source
@spec include?(t(), input(), keyword()) :: boolean()

Checks if the given input statements exist within dataset.

The graph option allows to set a different destination graph in which the statements should be checked, ignoring the graph context of given quads or the name of given graphs.

examples

Examples

  iex> dataset = RDF.Dataset.new([
  ...>   {EX.S1, EX.p1, EX.O1, EX.Graph},
  ...>   {EX.S2, EX.p2, EX.O2},
  ...>   {EX.S1, EX.p2, EX.O3}])
  ...> RDF.Dataset.include?(dataset, {EX.S1, EX.p1, EX.O1, EX.Graph})
  true
@spec map(t(), RDF.Statement.term_mapping()) :: map()

Returns a nested map of a RDF.Dataset where each element from its quads is mapped with the given function.

The function fun will receive a tuple {statement_position, rdf_term} where statement_position is one of the atoms :subject, :predicate, :object or :graph_name 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

Examples

iex> [
...>   {~I<http://example.com/S>, ~I<http://example.com/p>, ~L"Foo", ~I<http://example.com/Graph>},
...>   {~I<http://example.com/S>, ~I<http://example.com/p>, RDF.XSD.integer(42), }
...> ]
...> |> RDF.Dataset.new()
...> |> RDF.Dataset.map(fn
...>      {:graph_name, graph_name} ->
...>        graph_name
...>      {:predicate, predicate} ->
...>        predicate
...>        |> to_string()
...>        |> String.split("/")
...>        |> List.last()
...>        |> String.to_atom()
...>    {_, term} ->
...>      RDF.Term.value(term)
...>    end)
%{
  ~I<http://example.com/Graph> => %{
    "http://example.com/S" => %{p: ["Foo"]}
  },
  nil => %{
    "http://example.com/S" => %{p: [42]}
  }
}
@spec name(t()) :: RDF.Statement.graph_name()

Returns the dataset name IRI of dataset.

@spec new() :: t()

Creates an empty unnamed RDF.Dataset.

@spec new(input() | keyword()) :: t()

Creates an RDF.Dataset.

If a keyword list is given an empty dataset is created. Otherwise an unnamed dataset initialized with the given data is created.

See new/2 for available arguments and the different ways to provide data.

examples

Examples

RDF.Dataset.new(name: EX.GraphName)

RDF.Dataset.new(init: {EX.S, EX.p, EX.O})

RDF.Dataset.new({EX.S, EX.p, EX.O})
@spec new(
  input(),
  keyword()
) :: t()

Creates an RDF.Dataset initialized with data.

The initial RDF triples can be provided in any form accepted by add/3.

Available options:

  • name: the name of the dataset to be created
  • init: some data with which the dataset should be initialized; the data can be provided in any form accepted by add/3 and above that also with a function returning the initialization data in any of these forms

The set of all resources used in the objects within a RDF.Dataset.

Note: This function does collect only IRIs and BlankNodes, not Literals.

examples

Examples

iex> RDF.Dataset.new([
...>   {EX.S1, EX.p1, EX.O1, EX.Graph},
...>   {EX.S2, EX.p2, EX.O2, EX.Graph},
...>   {EX.S3, EX.p1, EX.O2},
...>   {EX.S4, EX.p2, RDF.bnode(:bnode)},
...>   {EX.S5, EX.p3, "foo"}
...> ]) |> RDF.Dataset.objects()
MapSet.new([RDF.iri(EX.O1), RDF.iri(EX.O2), RDF.bnode(:bnode)])
@spec pop(t()) :: {RDF.Statement.t() | nil, t()}

Pops an arbitrary statement from a RDF.Dataset.

Link to this function

pop(dataset, graph_name)

View Source
@spec pop(t(), RDF.Statement.coercible_graph_name()) :: {RDF.Statement.t() | nil, t()}

Pops the graph with the given name.

When a graph with given name can not be found the optionally given default value or nil is returned.

examples

Examples

iex> dataset = RDF.Dataset.new([
...>   {EX.S1, EX.P1, EX.O1, EX.Graph},
...>   {EX.S2, EX.P2, EX.O2}])
...> RDF.Dataset.pop(dataset, EX.Graph)
{RDF.Graph.new({EX.S1, EX.P1, EX.O1}, name: EX.Graph), RDF.Dataset.new({EX.S2, EX.P2, EX.O2})}
iex> RDF.Dataset.pop(dataset, EX.Foo)
{nil, dataset}

The set of all properties used in the predicates within all graphs of a RDF.Dataset.

examples

Examples

iex> RDF.Dataset.new([
...>   {EX.S1, EX.p1, EX.O1, EX.Graph},
...>   {EX.S2, EX.p2, EX.O2},
...>   {EX.S1, EX.p2, EX.O3}]) |>
...>   RDF.Dataset.predicates()
MapSet.new([EX.p1, EX.p2])
@spec prefixes(t()) :: RDF.PrefixMap.t() | nil

Returns the aggregated prefixes of all graphs of dataset as a RDF.PrefixMap.

Link to this function

put(dataset, input, opts \\ [])

View Source
@spec put(t(), input(), keyword()) :: t()

Adds statements to a RDF.Dataset overwriting existing statements with the subjects given in the input data.

The graph option allows to set a different destination graph to which the statements should be added, ignoring the graph context of given quads or the name of given graphs in input.

Note: When the statements to be added are given as another RDF.Dataset and a destination graph is set with the graph option, the descriptions of the subjects in the different graphs are aggregated.

examples

Examples

iex> dataset = RDF.Dataset.new({EX.S, EX.P1, EX.O1})
...> RDF.Dataset.put(dataset, {EX.S, EX.P2, EX.O2})
RDF.Dataset.new({EX.S, EX.P2, EX.O2})
iex> RDF.Dataset.put(dataset, {EX.S2, EX.P2, EX.O2})
RDF.Dataset.new([{EX.S, EX.P1, EX.O1}, {EX.S2, EX.P2, EX.O2}])
Link to this function

put_properties(dataset, input, opts \\ [])

View Source
@spec put_properties(t(), input(), keyword()) :: t()

Adds statements to a RDF.Dataset and overwrites all existing statements with the same subject-predicate combinations given in the input data.

The graph option allows to set a different destination graph to which the statements should be added, ignoring the graph context of given quads or the name of given graphs in input.

Note: When the statements to be added are given as another RDF.Dataset and a destination graph is set with the graph option, the descriptions of the subjects in the different graphs are aggregated.

examples

Examples

iex> dataset = RDF.Dataset.new({EX.S, EX.P1, EX.O1})
...> RDF.Dataset.put_properties(dataset, {EX.S, EX.P1, EX.O2})
RDF.Dataset.new({EX.S, EX.P1, EX.O2})
iex> RDF.Dataset.put_properties(dataset, {EX.S, EX.P2, EX.O2})
RDF.Dataset.new([{EX.S, EX.P1, EX.O1}, {EX.S, EX.P2, EX.O2}])
iex> RDF.Dataset.new([{EX.S1, EX.P1, EX.O1}, {EX.S2, EX.P2, EX.O2}])
...> |> RDF.Dataset.put_properties([{EX.S1, EX.P2, EX.O3}, {EX.S2, EX.P2, EX.O3}])
RDF.Dataset.new([{EX.S1, EX.P1, EX.O1}, {EX.S1, EX.P2, EX.O3}, {EX.S2, EX.P2, EX.O3}])
Link to this function

quads(dataset, opts \\ [])

View Source
@spec quads(
  t(),
  keyword()
) :: [RDF.Quad.t()]

All statements within all graphs of a RDF.Dataset as quads.

When the optional :filter_star flag is set to true RDF-star statements with a triple as subject or object will be filtered. The default value is false.

examples

Examples

  iex> RDF.Dataset.new([
  ...>   {EX.S1, EX.p1, EX.O1, EX.Graph},
  ...>   {EX.S2, EX.p2, EX.O2},
  ...>   {EX.S1, EX.p2, EX.O3}])
  ...> |> RDF.Dataset.quads()
  [{RDF.iri(EX.S1), RDF.iri(EX.p2), RDF.iri(EX.O3), nil},
   {RDF.iri(EX.S2), RDF.iri(EX.p2), RDF.iri(EX.O2), nil},
   {RDF.iri(EX.S1), RDF.iri(EX.p1), RDF.iri(EX.O1), RDF.iri(EX.Graph)}]

The set of all resources used within a RDF.Dataset.

examples

Examples

iex> RDF.Dataset.new([ ...> {EX.S1, EX.p1, EX.O1, EX.Graph}, ...> {EX.S2, EX.p1, EX.O2, EX.Graph}, ...> {EX.S2, EX.p2, RDF.bnode(:bnode)}, ...> {EX.S3, EX.p1, "foo"} ...> ]) |> RDF.Dataset.resources() MapSet.new([RDF.iri(EX.S1), RDF.iri(EX.S2), RDF.iri(EX.S3),

RDF.iri(EX.O1), RDF.iri(EX.O2), RDF.bnode(:bnode), EX.p1, EX.p2])
Link to this function

statement_count(dataset)

View Source
@spec statement_count(t()) :: non_neg_integer()

The number of statements within a RDF.Dataset.

examples

Examples

iex> RDF.Dataset.new([
...>   {EX.S1, EX.p1, EX.O1, EX.Graph},
...>   {EX.S2, EX.p2, EX.O2},
...>   {EX.S1, EX.p2, EX.O3}]) |>
...>   RDF.Dataset.statement_count()
3
Link to this function

statements(dataset, opts \\ [])

View Source
@spec statements(
  t(),
  keyword()
) :: [RDF.Statement.t()]

All statements within all graphs of a RDF.Dataset.

While the statements of named graphs are returned as quad tuples, the statements of the default graph are returned as triples. If you want to get quads or triples uniformly, use the quads/2 resp. triples/2 functions instead.

When the optional :filter_star flag is set to true RDF-star statements with a triple as subject or object will be filtered. The default value is false.

examples

Examples

  iex> RDF.Dataset.new([
  ...>   {EX.S1, EX.p1, EX.O1, EX.Graph},
  ...>   {EX.S2, EX.p2, EX.O2},
  ...>   {EX.S1, EX.p2, EX.O3}])
  ...> |> RDF.Dataset.statements()
  [{RDF.iri(EX.S1), RDF.iri(EX.p2), RDF.iri(EX.O3)},
   {RDF.iri(EX.S2), RDF.iri(EX.p2), RDF.iri(EX.O2)},
   {RDF.iri(EX.S1), RDF.iri(EX.p1), RDF.iri(EX.O1), RDF.iri(EX.Graph)}]

The set of all subjects used in the statement within all graphs of a RDF.Dataset.

examples

Examples

iex> RDF.Dataset.new([
...>   {EX.S1, EX.p1, EX.O1, EX.Graph},
...>   {EX.S2, EX.p2, EX.O2},
...>   {EX.S1, EX.p2, EX.O3}]) |>
...>   RDF.Dataset.subjects()
MapSet.new([RDF.iri(EX.S1), RDF.iri(EX.S2)])
Link to this function

triples(dataset, opts \\ [])

View Source
@spec triples(
  t(),
  keyword()
) :: [RDF.Triple.t()]

All statements within all graphs of a RDF.Dataset as triples.

When the optional :filter_star flag is set to true RDF-star statements with a triple as subject or object will be filtered. The default value is false.

Note: When a triple is present in multiple graphs it will be present in the resulting list of triples multiple times for performance reasons. If you want to get a list with unique triples, you'll have to apply Enum.uniq/1 on the result.

examples

Examples

  iex> RDF.Dataset.new([
  ...>   {EX.S1, EX.p1, EX.O1, EX.Graph},
  ...>   {EX.S2, EX.p2, EX.O2},
  ...>   {EX.S1, EX.p2, EX.O3}])
  ...> |> RDF.Dataset.triples()
  [{RDF.iri(EX.S1), RDF.iri(EX.p2), RDF.iri(EX.O3)},
   {RDF.iri(EX.S2), RDF.iri(EX.p2), RDF.iri(EX.O2)},
   {RDF.iri(EX.S1), RDF.iri(EX.p1), RDF.iri(EX.O1)}]
Link to this function

values(dataset, opts \\ [])

View Source
@spec values(
  t(),
  keyword()
) :: map()

Returns a nested map of the native Elixir values of a RDF.Dataset.

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

examples

Examples

iex> [
...>   {~I<http://example.com/S>, ~I<http://example.com/p>, ~L"Foo", ~I<http://example.com/Graph>},
...>   {~I<http://example.com/S>, ~I<http://example.com/p>, RDF.XSD.integer(42), }
...> ]
...> |> RDF.Dataset.new()
...> |> RDF.Dataset.values()
%{
  "http://example.com/Graph" => %{
    "http://example.com/S" => %{"http://example.com/p" => ["Foo"]}
  },
  nil => %{
    "http://example.com/S" => %{"http://example.com/p" => [42]}
  }
}
Link to this function

who_describes(dataset, subject)

View Source
@spec who_describes(t(), RDF.Statement.coercible_subject()) :: [RDF.Graph.t()]

Returns the names of all graphs of a RDF.Dataset containing statements about the given subject.

examples

Examples

  iex> dataset = RDF.Dataset.new([
  ...>   {EX.S1, EX.p, EX.O},
  ...>   {EX.S2, EX.p, EX.O},
  ...>   {EX.S1, EX.p, EX.O, EX.Graph1},
  ...>   {EX.S2, EX.p, EX.O, EX.Graph2}])
  ...> RDF.Dataset.who_describes(dataset, EX.S1)
  [nil, RDF.iri(EX.Graph1)]