RDF.ex v0.8.0 RDF.Dataset View Source
A set of RDF.Graphs.
It may have multiple named graphs and at most one unnamed ("default") graph.
RDF.Dataset implements:
- Elixir's
Accessbehaviour - Elixir's
Enumerableprotocol - Elixir's
Inspectprotocol - the
RDF.Dataprotocol
Link to this section Summary
Functions
Adds triples and quads to a RDF.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.
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 set of all graphs.
Returns if a given statement is in a RDF.Dataset.
Creates an empty unnamed RDF.Dataset.
Creates an 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.
Adds statements to a RDF.Dataset and overwrites all existing statements with the same subjects and predicates in the specified graph context.
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.
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
Specs
graph_name() :: RDF.IRI.t() | nil
Specs
input() :: RDF.Graph.input() | t()
Specs
t() :: %RDF.Dataset{
graphs: %{required(graph_name()) => RDF.Graph.t()},
name: graph_name()
}
Specs
update_graph_fun() :: (RDF.Graph.t() -> {RDF.Graph.t(), input()} | :pop)
Link to this section Functions
Specs
Adds triples and quads to a RDF.Dataset.
The optional third graph_context argument allows to set a different
destination graph to which the statements are added, ignoring the graph context
of given quads or the name of given graphs.
Specs
default_graph(t()) :: RDF.Graph.t()
The default graph of a RDF.Dataset.
Specs
Deletes statements from a RDF.Dataset.
The optional third graph_context argument allows to set a different
destination graph from which the statements are 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.
Specs
Deletes the default graph.
Specs
delete_graph( t(), RDF.Statement.graph_name() | [RDF.Statement.graph_name()] | nil ) :: t()
Deletes the given graph.
Specs
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
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 Specs
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.
Specs
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
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 Specs
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
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 Specs
get_and_update(t(), RDF.Statement.graph_name() | nil, update_graph_fun()) :: {RDF.Graph.t(), input()}
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
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})} Specs
graph(t(), RDF.Statement.graph_name() | nil) :: RDF.Graph.t()
The graph with given name.
Specs
graphs(t()) :: [RDF.Graph.t()]
The set of all graphs.
Specs
include?(t(), RDF.Statement.t(), RDF.Statement.coercible_graph_name() | nil) :: boolean()
Returns if a given statement is in a RDF.Dataset.
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 Specs
new() :: t()
Creates an empty unnamed RDF.Dataset.
Specs
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
RDF.Graph.new({EX.S, EX.p, EX.O})
RDF.Graph.new(name: EX.GraphName) Specs
Creates an RDF.Dataset initialized with data.
The initial RDF triples can be provided
- as a single statement tuple
- an
RDF.Description - an
RDF.Graph - an
RDF.Dataset - or a list with any combination of the former
Available options:
name: the name of the dataset to be created
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
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)]) Specs
pop(t()) :: {RDF.Statement.t() | nil, t()}
Pops an arbitrary statement from a RDF.Dataset.
Specs
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
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
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]) Specs
Adds statements to a RDF.Dataset and overwrites all existing statements with the same subjects and predicates in the specified graph context.
Examples
iex> dataset = RDF.Dataset.new({EX.S, EX.P1, EX.O1})
...> RDF.Dataset.put(dataset, {EX.S, EX.P1, EX.O2})
RDF.Dataset.new({EX.S, EX.P1, EX.O2})
iex> RDF.Dataset.put(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([{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}]) The set of all resources used within a RDF.Dataset.
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]) Specs
statement_count(t()) :: non_neg_integer()
The number of statements within a RDF.Dataset.
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 Specs
statements(t()) :: [RDF.Statement.t()]
All statements within all graphs of a RDF.Dataset.
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.p1), RDF.iri(EX.O1), RDF.iri(EX.Graph)},
{RDF.iri(EX.S1), RDF.iri(EX.p2), RDF.iri(EX.O3)},
{RDF.iri(EX.S2), RDF.iri(EX.p2), RDF.iri(EX.O2)}] The set of all subjects used in the statement within all graphs of a RDF.Dataset.
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)]) Specs
values(t(), RDF.Statement.term_mapping()) :: map()
Returns a nested map of the native Elixir values of a RDF.Dataset.
The optional second argument allows to specify a custom mapping with a function
which 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.
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]}
}
}
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(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]}
}
} Specs
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
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)]