core: add statements from one graph to another
This commit is contained in:
parent
daba9d9667
commit
f49828b76b
2 changed files with 32 additions and 4 deletions
|
@ -120,11 +120,18 @@ defmodule RDF.Graph do
|
|||
|
||||
def add(%RDF.Graph{name: name, descriptions: descriptions},
|
||||
%Description{subject: subject} = description) do
|
||||
description = if existing_description = descriptions[subject],
|
||||
do: Description.add(existing_description, description),
|
||||
else: description
|
||||
%RDF.Graph{name: name,
|
||||
descriptions: Map.put(descriptions, subject, description)}
|
||||
descriptions:
|
||||
Map.update(descriptions, subject, description, fn current ->
|
||||
current |> Description.add(description)
|
||||
end)
|
||||
}
|
||||
end
|
||||
|
||||
def add(graph, %RDF.Graph{descriptions: descriptions}) do
|
||||
Enum.reduce descriptions, graph, fn ({_, description}, graph) ->
|
||||
add(graph, description)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -143,6 +143,27 @@ defmodule RDF.GraphTest do
|
|||
assert Graph.add(g, {EX.Subject, EX.predicate, EX.Object}) == g
|
||||
end
|
||||
|
||||
test "a Graph" do
|
||||
g = Graph.add(graph(), Graph.new([
|
||||
{EX.Subject1, EX.predicate1, EX.Object1},
|
||||
{EX.Subject2, EX.predicate2, EX.Object2},
|
||||
{EX.Subject3, EX.predicate3, EX.Object3}
|
||||
]))
|
||||
assert graph_includes_statement?(g, {EX.Subject1, EX.predicate1, EX.Object1})
|
||||
assert graph_includes_statement?(g, {EX.Subject2, EX.predicate2, EX.Object2})
|
||||
assert graph_includes_statement?(g, {EX.Subject3, EX.predicate3, EX.Object3})
|
||||
|
||||
g = Graph.add(g, Graph.new([
|
||||
{EX.Subject1, EX.predicate1, EX.Object2},
|
||||
{EX.Subject2, EX.predicate4, EX.Object4},
|
||||
]))
|
||||
assert graph_includes_statement?(g, {EX.Subject1, EX.predicate1, EX.Object1})
|
||||
assert graph_includes_statement?(g, {EX.Subject1, EX.predicate1, EX.Object2})
|
||||
assert graph_includes_statement?(g, {EX.Subject2, EX.predicate2, EX.Object2})
|
||||
assert graph_includes_statement?(g, {EX.Subject2, EX.predicate4, EX.Object4})
|
||||
assert graph_includes_statement?(g, {EX.Subject3, EX.predicate3, EX.Object3})
|
||||
end
|
||||
|
||||
test "non-convertible Triple elements are causing an error" do
|
||||
assert_raise RDF.InvalidURIError, fn ->
|
||||
Graph.add(graph(), {"not a URI", EX.predicate, uri(EX.Object)})
|
||||
|
|
Loading…
Reference in a new issue