Support triples via maps and nested lists in Graph build blocks
This commit is contained in:
parent
9e62b23a77
commit
3ff1186336
2 changed files with 44 additions and 13 deletions
|
@ -1,8 +1,6 @@
|
||||||
defmodule RDF.Graph.Builder do
|
defmodule RDF.Graph.Builder do
|
||||||
alias RDF.{Description, Graph, Dataset, PrefixMap}
|
alias RDF.{Description, Graph, Dataset, PrefixMap}
|
||||||
|
|
||||||
import RDF.Guards
|
|
||||||
|
|
||||||
defmodule Error do
|
defmodule Error do
|
||||||
defexception [:message]
|
defexception [:message]
|
||||||
end
|
end
|
||||||
|
@ -121,7 +119,8 @@ defmodule RDF.Graph.Builder do
|
||||||
defp rdf?(%Description{}), do: true
|
defp rdf?(%Description{}), do: true
|
||||||
defp rdf?(%Graph{}), do: true
|
defp rdf?(%Graph{}), do: true
|
||||||
defp rdf?(%Dataset{}), do: true
|
defp rdf?(%Dataset{}), do: true
|
||||||
defp rdf?(statement) when is_statement(statement), do: true
|
defp rdf?(statements) when is_map(statements), do: true
|
||||||
|
defp rdf?(statements) when is_tuple(statements), do: true
|
||||||
defp rdf?(list) when is_list(list), do: true
|
defp rdf?(list) when is_list(list), do: true
|
||||||
|
|
||||||
defp rdf?(invalid) do
|
defp rdf?(invalid) do
|
||||||
|
|
|
@ -90,6 +90,45 @@ defmodule RDF.Graph.BuilderTest do
|
||||||
])
|
])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "triples given as maps" do
|
||||||
|
graph =
|
||||||
|
RDF.Graph.build do
|
||||||
|
%{
|
||||||
|
EX.S => %{
|
||||||
|
EX.p1() => EX.O1,
|
||||||
|
EX.p2() => [EX.O2, EX.O3]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
assert graph ==
|
||||||
|
RDF.graph([
|
||||||
|
EX.S
|
||||||
|
|> EX.p1(EX.O1)
|
||||||
|
|> EX.p2(EX.O2, EX.O3)
|
||||||
|
])
|
||||||
|
end
|
||||||
|
|
||||||
|
test "triples given as nested list" do
|
||||||
|
graph =
|
||||||
|
RDF.Graph.build do
|
||||||
|
[
|
||||||
|
{EX.S,
|
||||||
|
[
|
||||||
|
{EX.p1(), EX.O1},
|
||||||
|
{EX.p2(), [EX.O2, EX.O3]}
|
||||||
|
]}
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
assert graph ==
|
||||||
|
RDF.graph([
|
||||||
|
EX.S
|
||||||
|
|> EX.p1(EX.O1)
|
||||||
|
|> EX.p2(EX.O2, EX.O3)
|
||||||
|
])
|
||||||
|
end
|
||||||
|
|
||||||
test "nested statements" do
|
test "nested statements" do
|
||||||
graph =
|
graph =
|
||||||
RDF.Graph.build do
|
RDF.Graph.build do
|
||||||
|
@ -150,13 +189,6 @@ defmodule RDF.Graph.BuilderTest do
|
||||||
"foo"
|
"foo"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_raise Builder.Error, "invalid RDF data: {:ok, \"foo\"}", fn ->
|
|
||||||
RDF.Graph.build do
|
|
||||||
EX.S |> EX.p(EX.O)
|
|
||||||
{:ok, "foo"}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
test "variable assignments" do
|
test "variable assignments" do
|
||||||
|
@ -324,7 +356,7 @@ defmodule RDF.Graph.BuilderTest do
|
||||||
(fn ->
|
(fn ->
|
||||||
RDF.Graph.build do
|
RDF.Graph.build do
|
||||||
# TODO: the following leads to a (RDF.Namespace.UndefinedTermError) Elixir.TestNS is not a RDF.Namespace
|
# TODO: the following leads to a (RDF.Namespace.UndefinedTermError) Elixir.TestNS is not a RDF.Namespace
|
||||||
# @prefix custom: TestNS.Custom
|
# @prefix cust: TestNS.Custom
|
||||||
@prefix cust: RDF.Graph.BuilderTest.TestNS.Custom
|
@prefix cust: RDF.Graph.BuilderTest.TestNS.Custom
|
||||||
|
|
||||||
Custom.S |> Custom.p(Custom.O)
|
Custom.S |> Custom.p(Custom.O)
|
||||||
|
@ -343,7 +375,7 @@ defmodule RDF.Graph.BuilderTest do
|
||||||
(fn ->
|
(fn ->
|
||||||
RDF.Graph.build do
|
RDF.Graph.build do
|
||||||
# TODO: the following leads to a (RDF.Namespace.UndefinedTermError) Elixir.TestNS is not a RDF.Namespace
|
# TODO: the following leads to a (RDF.Namespace.UndefinedTermError) Elixir.TestNS is not a RDF.Namespace
|
||||||
# @prefix custom: TestNS.Custom
|
# @prefix TestNS.Custom
|
||||||
@prefix RDF.Graph.BuilderTest.TestNS.Custom
|
@prefix RDF.Graph.BuilderTest.TestNS.Custom
|
||||||
|
|
||||||
Custom.S |> Custom.p(Custom.O)
|
Custom.S |> Custom.p(Custom.O)
|
||||||
|
@ -383,7 +415,7 @@ defmodule RDF.Graph.BuilderTest do
|
||||||
(fn ->
|
(fn ->
|
||||||
RDF.Graph.build do
|
RDF.Graph.build do
|
||||||
# TODO: the following leads to a (RDF.Namespace.UndefinedTermError) Elixir.TestNS is not a RDF.Namespace
|
# TODO: the following leads to a (RDF.Namespace.UndefinedTermError) Elixir.TestNS is not a RDF.Namespace
|
||||||
# @prefix custom: TestNS.Custom
|
# @base TestNS.Custom
|
||||||
@base RDF.Graph.BuilderTest.TestNS.Custom
|
@base RDF.Graph.BuilderTest.TestNS.Custom
|
||||||
|
|
||||||
Custom.S |> Custom.p(Custom.O)
|
Custom.S |> Custom.p(Custom.O)
|
||||||
|
|
Loading…
Reference in a new issue