RDF.ex v0.6.1 RDF.Graph View Source
A set of RDF triples with an optional name.
RDF.Graph
implements:
- Elixir's
Access
behaviour - Elixir's
Enumerable
protocol - Elixir's
Inspect
protocol - the
RDF.Data
protocol
Link to this section Summary
Functions
Adds triples to a RDF.Graph
.
Adds triples to a RDF.Graph
.
Adds prefixes
to the given graph
.
Clears all prefixes of the given graph
.
Deletes statements from a RDF.Graph
.
Deletes statements from a RDF.Graph
.
Deletes prefixes
from the given graph
.
Deletes all statements with the given subjects.
Checks if a RDF.Graph
contains statements about the given resource.
The RDF.Description
of the given subject.
All RDF.Description
s within a RDF.Graph
.
Checks if two RDF.Graph
s are equal.
Fetches the description of the given subject.
Gets the description of the given subject.
Gets and updates the description of the given subject, in a single pass.
Checks if the given statement exists within a RDF.Graph
.
Creates an RDF.Graph
.
Creates an RDF.Graph
initialized with data.
Creates an RDF.Graph
with initial triples.
The set of all resources used in the objects within a RDF.Graph
.
Pops an arbitrary triple from a RDF.Graph
.
Pops the description of the given subject.
The set of all properties used in the predicates of the statements within a RDF.Graph
.
Adds statements to a RDF.Graph
and overwrites all existing statements with the same subjects and predicates.
Add statements to a RDF.Graph
, overwriting all statements with the same subject and predicate.
Add statements to a RDF.Graph
, overwriting all statements with the same subject and predicate.
The set of all resources used within a RDF.Graph
.
The number of subjects within a RDF.Graph
.
The set of all subjects used in the statements within a RDF.Graph
.
The number of statements within a RDF.Graph
.
The list of all statements within a RDF.Graph
.
Returns a nested map of the native Elixir values of a RDF.Graph
.
Link to this section Types
t()
View Source
t() :: module()
t() :: module()
Link to this section Functions
add(graph, triples) View Source
Adds triples to a RDF.Graph
.
When the statements to be added are given as another RDF.Graph
,
the graph name must not match graph name of the graph to which the statements
are added. As opposed to that RDF.Data.merge/2
will produce a RDF.Dataset
containing both graphs.
Also when the statements to be added are given as another RDF.Graph
, the
prefixes of this graph will be added. In case of conflicting prefix mappings
the original prefix from graph
will be kept.
add(graph, subject, predicate, objects) View Source
Adds triples to a RDF.Graph
.
add_prefixes(graph, prefixes, conflict_resolver \\ nil) View Source
Adds prefixes
to the given graph
.
The prefixes
mappings can be given as any structure convertible to a
RDF.PrefixMap
.
When a prefix with another mapping already exists it will be overwritten with
the new one. This behaviour can be customized by providing a conflict_resolver
function. See RDF.PrefixMap.merge/3
for more on that.
clear_prefixes(graph) View Source
Clears all prefixes of the given graph
.
delete(graph, triples) View Source
Deletes statements from a RDF.Graph
.
Note: When the statements to be deleted are given as another RDF.Graph
,
the graph name must not match graph name of the graph from which the statements
are deleted. If you want to delete only graphs with matching names, you can
use RDF.Data.delete/2
.
delete(graph, subject, predicate, object) View Source
Deletes statements from a RDF.Graph
.
delete_prefixes(graph, prefixes) View Source
Deletes prefixes
from the given graph
.
The prefixes
can be a single prefix or a list of prefixes.
Prefixes not in prefixes of the graph are simply ignored.
delete_subjects(graph, subjects) View Source
Deletes all statements with the given subjects.
describes?(graph, subject) View Source
Checks if a RDF.Graph
contains statements about the given resource.
Examples
iex> RDF.Graph.new([{EX.S1, EX.p1, EX.O1}]) |> RDF.Graph.describes?(EX.S1)
true
iex> RDF.Graph.new([{EX.S1, EX.p1, EX.O1}]) |> RDF.Graph.describes?(EX.S2)
false
description(graph, subject) View Source
The RDF.Description
of the given subject.
descriptions(graph) View Source
All RDF.Description
s within a RDF.Graph
.
equal?(graph1, graph2) View Source
Checks if two RDF.Graph
s are equal.
Two RDF.Graph
s are considered to be equal if they contain the same triples
and have the same name. The prefixes of the graph are irrelevant for equality.
fetch(graph, subject) View Source
Fetches the description of the given subject.
When the subject can not be found :error
is returned.
Examples
iex> RDF.Graph.new([{EX.S1, EX.P1, EX.O1}, {EX.S2, EX.P2, EX.O2}]) |>
...> RDF.Graph.fetch(EX.S1)
{:ok, RDF.Description.new({EX.S1, EX.P1, EX.O1})}
iex> RDF.Graph.fetch(RDF.Graph.new, EX.foo)
:error
get(graph, subject, default \\ nil) View Source
Gets the description of the given subject.
When the subject can not be found the optionally given default value or nil
is returned.
Examples
iex> RDF.Graph.new([{EX.S1, EX.P1, EX.O1}, {EX.S2, EX.P2, EX.O2}]) |>
...> RDF.Graph.get(EX.S1)
RDF.Description.new({EX.S1, EX.P1, EX.O1})
iex> RDF.Graph.get(RDF.Graph.new, EX.Foo)
nil
iex> RDF.Graph.get(RDF.Graph.new, EX.Foo, :bar)
:bar
get_and_update(graph, subject, fun) View Source
Gets and updates the description of the given subject, in a single pass.
Invokes the passed function on the RDF.Description
of the given subject;
this function should return either {description_to_return, new_description}
or :pop
.
If the passed function returns {description_to_return, new_description}
, the
return value of get_and_update
is {description_to_return, new_graph}
where
new_graph
is the input Graph
updated with new_description
for
the given subject.
If the passed function returns :pop
the description for the given subject is
removed and a {removed_description, new_graph}
tuple gets returned.
Examples
iex> RDF.Graph.new({EX.S, EX.P, EX.O}) |>
...> RDF.Graph.get_and_update(EX.S, fn current_description ->
...> {current_description, {EX.P, EX.NEW}}
...> end)
{RDF.Description.new(EX.S, EX.P, EX.O), RDF.Graph.new(EX.S, EX.P, EX.NEW)}
include?(graph, triple) View Source
Checks if the given statement exists within a RDF.Graph
.
Creates an empty unnamed RDF.Graph
.
new(data_or_options) View Source
Creates an RDF.Graph
.
If a keyword list is given an empty graph is created. Otherwise an unnamed graph 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)
new(data, options) View Source
Creates an RDF.Graph
initialized with data.
The initial RDF triples can be provided
- as a single statement tuple
- an
RDF.Description
- an
RDF.Graph
- or a list with any combination of the former
Available options:
name
: the name of the graph to be createdprefixes
: some prefix mappings which should be stored alongside the graph and will be used for example when serializing in a format with prefix support
Examples
RDF.Graph.new({EX.S, EX.p, EX.O})
RDF.Graph.new({EX.S, EX.p, EX.O}, name: EX.GraphName)
RDF.Graph.new({EX.S, EX.p, [EX.O1, EX.O2]})
RDF.Graph.new([{EX.S1, EX.p1, EX.O1}, {EX.S2, EX.p2, EX.O2}])
RDF.Graph.new(RDF.Description.new(EX.S, EX.P, EX.O))
RDF.Graph.new([graph, description, triple])
new(subject, predicate, objects, options \\ []) View Source
Creates an RDF.Graph
with initial triples.
See new/2
for available arguments.
objects(graph) View Source
The set of all resources used in the objects within a RDF.Graph
.
Note: This function does collect only IRIs and BlankNodes, not Literals.
Examples
iex> RDF.Graph.new([
...> {EX.S1, EX.p1, EX.O1},
...> {EX.S2, EX.p2, EX.O2},
...> {EX.S3, EX.p1, EX.O2},
...> {EX.S4, EX.p2, RDF.bnode(:bnode)},
...> {EX.S5, EX.p3, "foo"}
...> ]) |> RDF.Graph.objects
MapSet.new([RDF.iri(EX.O1), RDF.iri(EX.O2), RDF.bnode(:bnode)])
pop(graph) View Source
Pops an arbitrary triple from a RDF.Graph
.
pop(graph, subject) View Source
Pops the description of the given subject.
When the subject can not be found the optionally given default value or nil
is returned.
Examples
iex> RDF.Graph.new([{EX.S1, EX.P1, EX.O1}, {EX.S2, EX.P2, EX.O2}]) |>
...> RDF.Graph.pop(EX.S1)
{RDF.Description.new({EX.S1, EX.P1, EX.O1}), RDF.Graph.new({EX.S2, EX.P2, EX.O2})}
iex> RDF.Graph.pop(RDF.Graph.new({EX.S, EX.P, EX.O}), EX.Missing)
{nil, RDF.Graph.new({EX.S, EX.P, EX.O})}
predicates(graph) View Source
The set of all properties used in the predicates of the statements within a RDF.Graph
.
Examples
iex> RDF.Graph.new([
...> {EX.S1, EX.p1, EX.O1},
...> {EX.S2, EX.p2, EX.O2},
...> {EX.S1, EX.p2, EX.O3}]) |>
...> RDF.Graph.predicates
MapSet.new([EX.p1, EX.p2])
put(graph, statements) View Source
Adds statements to a RDF.Graph
and overwrites all existing statements with the same subjects and predicates.
When the statements to be added are given as another RDF.Graph
, the prefixes
of this graph will be added. In case of conflicting prefix mappings the
original prefix from graph
will be kept.
Examples
iex> RDF.Graph.new([{EX.S1, EX.P1, EX.O1}, {EX.S2, EX.P2, EX.O2}]) |>
...> RDF.Graph.put([{EX.S1, EX.P2, EX.O3}, {EX.S2, EX.P2, EX.O3}])
RDF.Graph.new([{EX.S1, EX.P1, EX.O1}, {EX.S1, EX.P2, EX.O3}, {EX.S2, EX.P2, EX.O3}])
put(graph, subject, predications) View Source
Add statements to a RDF.Graph
, overwriting all statements with the same subject and predicate.
put(graph, subject, predicate, objects) View Source
Add statements to a RDF.Graph
, overwriting all statements with the same subject and predicate.
Examples
iex> RDF.Graph.new(EX.S, EX.P, EX.O1) |> RDF.Graph.put(EX.S, EX.P, EX.O2)
RDF.Graph.new(EX.S, EX.P, EX.O2)
iex> RDF.Graph.new(EX.S, EX.P1, EX.O1) |> RDF.Graph.put(EX.S, EX.P2, EX.O2)
RDF.Graph.new([{EX.S, EX.P1, EX.O1}, {EX.S, EX.P2, EX.O2}])
resources(graph) View Source
The set of all resources used within a RDF.Graph
.
Examples
iex> RDF.Graph.new([ ...> {EX.S1, EX.p1, EX.O1}, ...> {EX.S2, EX.p1, EX.O2}, ...> {EX.S2, EX.p2, RDF.bnode(:bnode)}, ...> {EX.S3, EX.p1, "foo"} ...> ]) |> RDF.Graph.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])
statements(graph) View Source
See RDF.Graph.triples/1
.
subject_count(graph) View Source
The number of subjects within a RDF.Graph
.
Examples
iex> RDF.Graph.new([
...> {EX.S1, EX.p1, EX.O1},
...> {EX.S2, EX.p2, EX.O2},
...> {EX.S1, EX.p2, EX.O3}]) |>
...> RDF.Graph.subject_count
2
subjects(graph) View Source
The set of all subjects used in the statements within a RDF.Graph
.
Examples
iex> RDF.Graph.new([
...> {EX.S1, EX.p1, EX.O1},
...> {EX.S2, EX.p2, EX.O2},
...> {EX.S1, EX.p2, EX.O3}]) |>
...> RDF.Graph.subjects
MapSet.new([RDF.iri(EX.S1), RDF.iri(EX.S2)])
triple_count(graph) View Source
The number of statements within a RDF.Graph
.
Examples
iex> RDF.Graph.new([
...> {EX.S1, EX.p1, EX.O1},
...> {EX.S2, EX.p2, EX.O2},
...> {EX.S1, EX.p2, EX.O3}]) |>
...> RDF.Graph.triple_count
3
triples(graph) View Source
The list of all statements within a RDF.Graph
.
Examples
iex> RDF.Graph.new([
...> {EX.S1, EX.p1, EX.O1},
...> {EX.S2, EX.p2, EX.O2},
...> {EX.S1, EX.p2, EX.O3}
...> ]) |> RDF.Graph.triples
[{RDF.iri(EX.S1), RDF.iri(EX.p1), RDF.iri(EX.O1)},
{RDF.iri(EX.S1), RDF.iri(EX.p2), RDF.iri(EX.O3)},
{RDF.iri(EX.S2), RDF.iri(EX.p2), RDF.iri(EX.O2)}]
values(graph, mapping \\ &RDF.Statement.default_term_mapping/1) View Source
Returns a nested map of the native Elixir values of a RDF.Graph
.
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
or :object
,
while rdf_term
is the RDF term to be mapped.
Examples
iex> [
...> {~I<http://example.com/S1>, ~I<http://example.com/p>, ~L"Foo"},
...> {~I<http://example.com/S2>, ~I<http://example.com/p>, RDF.integer(42)}
...> ]
...> |> RDF.Graph.new()
...> |> RDF.Graph.values()
%{
"http://example.com/S1" => %{"http://example.com/p" => ["Foo"]},
"http://example.com/S2" => %{"http://example.com/p" => [42]}
}
iex> [
...> {~I<http://example.com/S1>, ~I<http://example.com/p>, ~L"Foo"},
...> {~I<http://example.com/S2>, ~I<http://example.com/p>, RDF.integer(42)}
...> ]
...> |> RDF.Graph.new()
...> |> RDF.Graph.values(fn
...> {:predicate, predicate} ->
...> predicate
...> |> to_string()
...> |> String.split("/")
...> |> List.last()
...> |> String.to_atom()
...> {_, term} ->
...> RDF.Term.value(term)
...> end)
%{
"http://example.com/S1" => %{p: ["Foo"]},
"http://example.com/S2" => %{p: [42]}
}