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),
|
||||
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 """
|
||||
Creates an empty named `RDF.Dataset`.
|
||||
|
@ -75,6 +80,11 @@ defmodule RDF.Dataset do
|
|||
def new(name, %RDF.Graph{} = graph),
|
||||
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 """
|
||||
|
@ -135,6 +145,12 @@ defmodule RDF.Dataset do
|
|||
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 """
|
||||
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
|
||||
|
||||
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)
|
||||
when is_map(statements) 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})
|
||||
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
|
||||
ds = Dataset.add(dataset(), [
|
||||
Description.new({EX.Subject1, EX.predicate1, EX.Object1}),
|
||||
|
|
Loading…
Reference in a new issue