core: add, put and delete of Description and Graph can handle quads
by just ignoring the graph context
This commit is contained in:
parent
e1e8769fb2
commit
232e2ac765
2 changed files with 34 additions and 17 deletions
|
@ -92,6 +92,9 @@ defmodule RDF.Description do
|
|||
else: description
|
||||
end
|
||||
|
||||
def add(description, {subject, predicate, object, _}),
|
||||
do: add(description, {subject, predicate, object})
|
||||
|
||||
def add(description, statements) when is_list(statements) do
|
||||
Enum.reduce statements, description, fn (statement, description) ->
|
||||
add(description, statement)
|
||||
|
@ -133,8 +136,8 @@ defmodule RDF.Description do
|
|||
predications: Map.put(predications, triple_predicate, triple_objects)}
|
||||
end
|
||||
|
||||
def put(desc = %RDF.Description{}, predicate, object),
|
||||
do: put(desc, predicate, [object])
|
||||
def put(%RDF.Description{} = description, predicate, object),
|
||||
do: put(description, predicate, [object])
|
||||
|
||||
@doc """
|
||||
Adds statements to a `RDF.Description` and overwrites all existing statements with already used predicates.
|
||||
|
@ -155,16 +158,19 @@ defmodule RDF.Description do
|
|||
"""
|
||||
def put(description, statements)
|
||||
|
||||
def put(desc = %RDF.Description{}, {predicate, object}),
|
||||
do: put(desc, predicate, object)
|
||||
def put(%RDF.Description{} = description, {predicate, object}),
|
||||
do: put(description, predicate, object)
|
||||
|
||||
def put(desc = %RDF.Description{}, {subject, predicate, object}) do
|
||||
if convert_subject(subject) == desc.subject,
|
||||
do: put(desc, predicate, object),
|
||||
else: desc
|
||||
def put(%RDF.Description{} = description, {subject, predicate, object}) do
|
||||
if convert_subject(subject) == description.subject,
|
||||
do: put(description, predicate, object),
|
||||
else: description
|
||||
end
|
||||
|
||||
def put(desc = %RDF.Description{subject: subject}, statements) when is_list(statements) do
|
||||
def put(description, {subject, predicate, object, _}),
|
||||
do: put(description, {subject, predicate, object})
|
||||
|
||||
def put(%RDF.Description{subject: subject} = description, statements) when is_list(statements) do
|
||||
statements
|
||||
|> Stream.map(fn
|
||||
{p, o} -> {convert_predicate(p), o}
|
||||
|
@ -176,8 +182,9 @@ defmodule RDF.Description do
|
|||
end)
|
||||
|> Stream.filter(&(&1)) # filter nil values
|
||||
|> Enum.group_by(&(elem(&1, 0)), &(elem(&1, 1)))
|
||||
|> Enum.reduce(desc, fn ({predicate, objects}, desc) ->
|
||||
put(desc, predicate, objects) end)
|
||||
|> Enum.reduce(description, fn ({predicate, objects}, description) ->
|
||||
put(description, predicate, objects)
|
||||
end)
|
||||
end
|
||||
|
||||
def put(%RDF.Description{subject: subject, predications: predications},
|
||||
|
@ -245,6 +252,9 @@ defmodule RDF.Description do
|
|||
else: description
|
||||
end
|
||||
|
||||
def delete(description, {subject, predicate, object, _}),
|
||||
do: delete(description, {subject, predicate, object})
|
||||
|
||||
def delete(description, statements) when is_list(statements) do
|
||||
Enum.reduce statements, description, fn (statement, description) ->
|
||||
delete(description, statement)
|
||||
|
|
|
@ -114,6 +114,9 @@ defmodule RDF.Graph do
|
|||
def add(%RDF.Graph{} = graph, {subject, _, _} = statement),
|
||||
do: do_add(graph, convert_subject(subject), statement)
|
||||
|
||||
def add(graph, {subject, predicate, object, _}),
|
||||
do: add(graph, {subject, predicate, object})
|
||||
|
||||
def add(graph, triples) when is_list(triples) do
|
||||
Enum.reduce triples, graph, fn (triple, graph) ->
|
||||
add(graph, triple)
|
||||
|
@ -168,6 +171,9 @@ defmodule RDF.Graph do
|
|||
def put(%RDF.Graph{} = graph, {subject, _, _} = statement),
|
||||
do: do_put(graph, convert_subject(subject), statement)
|
||||
|
||||
def put(graph, {subject, predicate, object, _}),
|
||||
do: put(graph, {subject, predicate, object})
|
||||
|
||||
def put(%RDF.Graph{} = graph, %Description{subject: subject} = description),
|
||||
do: do_put(graph, subject, description)
|
||||
|
||||
|
@ -232,9 +238,11 @@ defmodule RDF.Graph do
|
|||
"""
|
||||
def delete(graph, triples)
|
||||
|
||||
def delete(%RDF.Graph{} = graph, {subject, _, _} = triple) do
|
||||
do_delete(graph, convert_subject(subject), triple)
|
||||
end
|
||||
def delete(%RDF.Graph{} = graph, {subject, _, _} = triple),
|
||||
do: do_delete(graph, convert_subject(subject), triple)
|
||||
|
||||
def delete(graph, {subject, predicate, object, _}),
|
||||
do: delete(graph, {subject, predicate, object})
|
||||
|
||||
def delete(%RDF.Graph{} = graph, triples) when is_list(triples) do
|
||||
Enum.reduce triples, graph, fn (triple, graph) ->
|
||||
|
@ -242,9 +250,8 @@ defmodule RDF.Graph do
|
|||
end
|
||||
end
|
||||
|
||||
def delete(%RDF.Graph{} = graph, %Description{subject: subject} = description) do
|
||||
do_delete(graph, subject, description)
|
||||
end
|
||||
def delete(%RDF.Graph{} = graph, %Description{subject: subject} = description),
|
||||
do: do_delete(graph, subject, description)
|
||||
|
||||
def delete(%RDF.Graph{} = graph, %RDF.Graph{descriptions: descriptions}) do
|
||||
Enum.reduce descriptions, graph, fn ({_, description}, graph) ->
|
||||
|
|
Loading…
Reference in a new issue