Fix RDF.Dataset.equal?/2 to ignore prefixes
This commit is contained in:
parent
731b168ef4
commit
95d5d01217
4 changed files with 29 additions and 33 deletions
|
@ -274,8 +274,8 @@ defimpl RDF.Data, for: RDF.Graph do
|
||||||
do: RDF.Data.equal?(description, graph)
|
do: RDF.Data.equal?(description, graph)
|
||||||
|
|
||||||
def equal?(graph, %RDF.Graph{} = other_graph),
|
def equal?(graph, %RDF.Graph{} = other_graph),
|
||||||
do: RDF.Graph.equal?(RDF.Data.Utils.normalize_graph(graph),
|
do: RDF.Graph.equal?(%RDF.Graph{graph | name: nil},
|
||||||
RDF.Data.Utils.normalize_graph(other_graph))
|
%RDF.Graph{other_graph | name: nil})
|
||||||
|
|
||||||
def equal?(graph, %RDF.Dataset{} = dataset),
|
def equal?(graph, %RDF.Dataset{} = dataset),
|
||||||
do: RDF.Data.equal?(dataset, graph)
|
do: RDF.Data.equal?(dataset, graph)
|
||||||
|
@ -354,25 +354,9 @@ defimpl RDF.Data, for: RDF.Dataset do
|
||||||
end
|
end
|
||||||
|
|
||||||
def equal?(dataset, %RDF.Dataset{} = other_dataset) do
|
def equal?(dataset, %RDF.Dataset{} = other_dataset) do
|
||||||
RDF.Dataset.equal?(RDF.Data.Utils.normalize_dataset(dataset),
|
RDF.Dataset.equal?(%RDF.Dataset{dataset | name: nil},
|
||||||
RDF.Data.Utils.normalize_dataset(other_dataset))
|
%RDF.Dataset{other_dataset | name: nil})
|
||||||
end
|
end
|
||||||
|
|
||||||
def equal?(_, _), do: false
|
def equal?(_, _), do: false
|
||||||
end
|
end
|
||||||
|
|
||||||
defmodule RDF.Data.Utils do
|
|
||||||
@moduledoc false
|
|
||||||
|
|
||||||
def normalize_graph(graph) do
|
|
||||||
%RDF.Graph{graph | name: nil}
|
|
||||||
end
|
|
||||||
|
|
||||||
def normalize_dataset(%RDF.Dataset{graphs: graphs}) do
|
|
||||||
%RDF.Dataset{name: nil, graphs:
|
|
||||||
Map.new(graphs, fn {name, graph} ->
|
|
||||||
{name, RDF.Graph.clear_prefixes(graph)}
|
|
||||||
end)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
|
@ -788,11 +788,20 @@ defmodule RDF.Dataset do
|
||||||
def equal?(dataset1, dataset2)
|
def equal?(dataset1, dataset2)
|
||||||
|
|
||||||
def equal?(%RDF.Dataset{} = dataset1, %RDF.Dataset{} = dataset2) do
|
def equal?(%RDF.Dataset{} = dataset1, %RDF.Dataset{} = dataset2) do
|
||||||
dataset1 == dataset2
|
clear_prefixes(dataset1) == clear_prefixes(dataset2)
|
||||||
end
|
end
|
||||||
|
|
||||||
def equal?(_, _), do: false
|
def equal?(_, _), do: false
|
||||||
|
|
||||||
|
defp clear_prefixes(%RDF.Dataset{graphs: graphs} = dataset) do
|
||||||
|
%RDF.Dataset{dataset |
|
||||||
|
graphs:
|
||||||
|
Map.new(graphs, fn {name, graph} ->
|
||||||
|
{name, RDF.Graph.clear_prefixes(graph)}
|
||||||
|
end)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
defimpl Enumerable do
|
defimpl Enumerable do
|
||||||
def member?(dataset, statement), do: {:ok, RDF.Dataset.include?(dataset, statement)}
|
def member?(dataset, statement), do: {:ok, RDF.Dataset.include?(dataset, statement)}
|
||||||
|
|
|
@ -740,13 +740,21 @@ defmodule RDF.DatasetTest do
|
||||||
|
|
||||||
|
|
||||||
test "equal/2" do
|
test "equal/2" do
|
||||||
assert Dataset.new({EX.S, EX.p, EX.O}) |> Dataset.equal?(Dataset.new({EX.S, EX.p, EX.O}))
|
triple = {EX.S, EX.p, EX.O}
|
||||||
assert Dataset.new({EX.S, EX.p, EX.O}, name: EX.Dataset1)
|
assert Dataset.equal?(Dataset.new(triple), Dataset.new(triple))
|
||||||
|> Dataset.equal?(Dataset.new({EX.S, EX.p, EX.O}, name: EX.Dataset1))
|
assert Dataset.equal?(Dataset.new(triple, name: EX.Dataset1),
|
||||||
|
Dataset.new(triple, name: EX.Dataset1))
|
||||||
refute Dataset.new({EX.S, EX.p, EX.O}) |> Dataset.equal?(Dataset.new({EX.S, EX.p, EX.O2}))
|
assert Dataset.equal?(
|
||||||
refute Dataset.new({EX.S, EX.p, EX.O}, name: EX.Dataset1)
|
Dataset.new(Graph.new(triple, name: EX.Graph1, prefixes: %{ex: EX})),
|
||||||
|> Dataset.equal?(Dataset.new({EX.S, EX.p, EX.O}, name: EX.Dataset2))
|
Dataset.new(Graph.new(triple, name: EX.Graph1, prefixes: %{ex: RDF}))
|
||||||
|
)
|
||||||
|
refute Dataset.equal?(Dataset.new(triple), Dataset.new({EX.S, EX.p, EX.O2}))
|
||||||
|
refute Dataset.equal?(Dataset.new(triple, name: EX.Dataset1),
|
||||||
|
Dataset.new(triple, name: EX.Dataset2))
|
||||||
|
refute Dataset.equal?(
|
||||||
|
Dataset.new(Graph.new(triple, name: EX.Graph1)),
|
||||||
|
Dataset.new(Graph.new(triple, name: EX.Graph2))
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -85,11 +85,6 @@ defmodule RDF.PrefixMapTest do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@tag skip: "TODO: "
|
|
||||||
test "when a default namespace is given" do
|
|
||||||
assert PrefixMap.add(@example1, :_, @ex_ns2) == {:ok, @example5}
|
|
||||||
end
|
|
||||||
|
|
||||||
test "when a mapping of the given prefix to the same namespace already exists" do
|
test "when a mapping of the given prefix to the same namespace already exists" do
|
||||||
assert PrefixMap.add(@example2, :ex2, "http://example.com/bar#") == {:ok, @example2}
|
assert PrefixMap.add(@example2, :ex2, "http://example.com/bar#") == {:ok, @example2}
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue