core: add statements of a Graph to a Dataset
This commit is contained in:
parent
7b659d5ddf
commit
186756bf81
2 changed files with 63 additions and 6 deletions
|
@ -65,6 +65,12 @@ defmodule RDF.Dataset do
|
|||
|
||||
@doc """
|
||||
Adds triples and quads to a `RDF.Dataset`.
|
||||
|
||||
The optional third argument `graph_context` defaulting to `nil` for the default
|
||||
graph, specifies the graph to which the statements are added.
|
||||
|
||||
Note: This also applies when adding a named graph. Its name is ignored over
|
||||
`graph_context` and its default value.
|
||||
"""
|
||||
def add(dataset, statements, graph_context \\ nil)
|
||||
|
||||
|
@ -103,6 +109,17 @@ defmodule RDF.Dataset do
|
|||
end
|
||||
end
|
||||
|
||||
def add(%RDF.Dataset{name: name, graphs: graphs}, %Graph{} = graph,
|
||||
graph_context) do
|
||||
with graph_context = Quad.convert_graph_context(graph_context) do
|
||||
%RDF.Dataset{name: name,
|
||||
graphs:
|
||||
Map.update(graphs, graph_context, Graph.new(graph_context, graph), fn current ->
|
||||
current |> Graph.add(graph)
|
||||
end)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Adds statements to a `RDF.Dataset` and overwrites all existing statements with the same subjects and predicates in the specified graph context.
|
||||
|
|
|
@ -172,23 +172,63 @@ defmodule RDF.DatasetTest do
|
|||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object2})
|
||||
|
||||
ds = Dataset.add(ds, Description.new({EX.Subject1, EX.predicate3, EX.Object3}), EX.Graph)
|
||||
assert Enum.count(ds) == 3
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate1, EX.Object1})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object2})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate3, EX.Object3, EX.Graph})
|
||||
end
|
||||
|
||||
@tag skip: "TODO"
|
||||
test "an unnamed Graph" do
|
||||
ds = Dataset.add(dataset(), Graph.new(%{EX.Subject1 => [
|
||||
{EX.predicate1, EX.Object1},
|
||||
{EX.predicate2, EX.Object2},
|
||||
]}))
|
||||
ds = Dataset.add(dataset(), Graph.new([
|
||||
{EX.Subject1, EX.predicate1, EX.Object1},
|
||||
{EX.Subject1, EX.predicate2, EX.Object2},
|
||||
]))
|
||||
assert unnamed_graph?(Dataset.default_graph(ds))
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate1, EX.Object1})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object2})
|
||||
|
||||
ds = Dataset.add(ds, Graph.new({EX.Subject1, EX.predicate2, EX.Object3}))
|
||||
assert unnamed_graph?(Dataset.default_graph(ds))
|
||||
assert Enum.count(ds) == 3
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate1, EX.Object1})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object2})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object3})
|
||||
|
||||
ds = Dataset.add(ds, Graph.new({EX.Subject1, EX.predicate2, EX.Object3}), EX.Graph)
|
||||
assert unnamed_graph?(Dataset.default_graph(ds))
|
||||
assert named_graph?(Dataset.graph(ds, EX.Graph), uri(EX.Graph))
|
||||
assert Enum.count(ds) == 4
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate1, EX.Object1})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object2})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object3})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object3, EX.Graph})
|
||||
end
|
||||
|
||||
@tag skip: "TODO"
|
||||
test "a named Graph" do
|
||||
ds = Dataset.add(dataset(), Graph.new(EX.Graph1, [
|
||||
{EX.Subject1, EX.predicate1, EX.Object1},
|
||||
{EX.Subject1, EX.predicate2, EX.Object2},
|
||||
]))
|
||||
refute Dataset.graph(ds, EX.Graph1)
|
||||
assert unnamed_graph?(Dataset.default_graph(ds))
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate1, EX.Object1})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object2})
|
||||
|
||||
ds = Dataset.add(ds, Graph.new(EX.Graph2, {EX.Subject1, EX.predicate2, EX.Object3}))
|
||||
refute Dataset.graph(ds, EX.Graph2)
|
||||
assert unnamed_graph?(Dataset.default_graph(ds))
|
||||
assert Enum.count(ds) == 3
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate1, EX.Object1})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object2})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object3})
|
||||
|
||||
ds = Dataset.add(ds, Graph.new(EX.Graph3, {EX.Subject1, EX.predicate2, EX.Object3}), EX.Graph)
|
||||
assert named_graph?(Dataset.graph(ds, EX.Graph), uri(EX.Graph))
|
||||
assert Enum.count(ds) == 4
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate1, EX.Object1})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object2})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object3})
|
||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object3, EX.Graph})
|
||||
end
|
||||
|
||||
test "a list of Descriptions" do
|
||||
|
|
Loading…
Reference in a new issue