core: RDF.Dataset.add, .put and .new support another dataset as input
This commit is contained in:
parent
232e2ac765
commit
cd5636528f
2 changed files with 60 additions and 0 deletions
|
@ -44,6 +44,11 @@ defmodule RDF.Dataset do
|
||||||
def new(%RDF.Graph{} = graph),
|
def new(%RDF.Graph{} = graph),
|
||||||
do: new() |> add(graph, graph.name)
|
do: new() |> add(graph, graph.name)
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Creates an unnamed `RDF.Dataset` from another `RDF.Dataset`.
|
||||||
|
"""
|
||||||
|
def new(%RDF.Dataset{graphs: graphs}),
|
||||||
|
do: %RDF.Dataset{graphs: graphs}
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Creates an empty named `RDF.Dataset`.
|
Creates an empty named `RDF.Dataset`.
|
||||||
|
@ -75,6 +80,11 @@ defmodule RDF.Dataset do
|
||||||
def new(name, %RDF.Graph{} = graph),
|
def new(name, %RDF.Graph{} = graph),
|
||||||
do: new(name) |> add(graph, graph.name)
|
do: new(name) |> add(graph, graph.name)
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Creates a named `RDF.Dataset` from another `RDF.Dataset`.
|
||||||
|
"""
|
||||||
|
def new(name, %RDF.Dataset{graphs: graphs}),
|
||||||
|
do: %RDF.Dataset{new(name) | graphs: graphs}
|
||||||
|
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
@ -135,6 +145,12 @@ defmodule RDF.Dataset do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def add(%RDF.Dataset{} = dataset, %RDF.Dataset{} = other_dataset, _) do
|
||||||
|
Enum.reduce graphs(other_dataset), dataset, fn (graph, dataset) ->
|
||||||
|
add(dataset, graph)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Adds statements to a `RDF.Dataset` and overwrites all existing statements with the same subjects and predicates in the specified graph context.
|
Adds statements to a `RDF.Dataset` and overwrites all existing statements with the same subjects and predicates in the specified graph context.
|
||||||
|
@ -228,6 +244,12 @@ defmodule RDF.Dataset do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def put(%RDF.Dataset{} = dataset, %RDF.Dataset{} = other_dataset, _) do
|
||||||
|
Enum.reduce graphs(other_dataset), dataset, fn (graph, dataset) ->
|
||||||
|
put(dataset, graph)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def put(%RDF.Dataset{} = dataset, statements, graph_context)
|
def put(%RDF.Dataset{} = dataset, statements, graph_context)
|
||||||
when is_map(statements) do
|
when is_map(statements) do
|
||||||
with graph_context = convert_graph_name(graph_context) do
|
with graph_context = convert_graph_name(graph_context) do
|
||||||
|
|
|
@ -257,6 +257,44 @@ defmodule RDF.DatasetTest do
|
||||||
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object3, EX.Graph})
|
assert dataset_includes_statement?(ds, {EX.Subject1, EX.predicate2, EX.Object3, EX.Graph})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "an unnamed Dataset" do
|
||||||
|
ds = Dataset.add(dataset(), Dataset.new([
|
||||||
|
{EX.Subject1, EX.predicate1, EX.Object1},
|
||||||
|
{EX.Subject1, EX.predicate2, EX.Object2},
|
||||||
|
]))
|
||||||
|
assert ds.name == nil
|
||||||
|
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, Dataset.new({EX.Subject1, EX.predicate2, EX.Object3}))
|
||||||
|
ds = Dataset.add(ds, Dataset.new({EX.Subject1, EX.predicate2, EX.Object3, EX.Graph}))
|
||||||
|
assert ds.name == nil
|
||||||
|
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 named Dataset" do
|
||||||
|
ds = Dataset.add(named_dataset(), Dataset.new(EX.DS1, [
|
||||||
|
{EX.Subject1, EX.predicate1, EX.Object1},
|
||||||
|
{EX.Subject1, EX.predicate2, EX.Object2},
|
||||||
|
]))
|
||||||
|
assert ds.name == uri(EX.DatasetName)
|
||||||
|
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, Dataset.new(EX.DS2, {EX.Subject1, EX.predicate2, EX.Object3}))
|
||||||
|
ds = Dataset.add(ds, Dataset.new(EX.DS2, {EX.Subject1, EX.predicate2, EX.Object3, EX.Graph}))
|
||||||
|
assert ds.name == uri(EX.DatasetName)
|
||||||
|
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
|
test "a list of Descriptions" do
|
||||||
ds = Dataset.add(dataset(), [
|
ds = Dataset.add(dataset(), [
|
||||||
Description.new({EX.Subject1, EX.predicate1, EX.Object1}),
|
Description.new({EX.Subject1, EX.predicate1, EX.Object1}),
|
||||||
|
|
Loading…
Reference in a new issue