Handle base URIs without trailing slash or hash in Turtle encoder properly
This commit is contained in:
parent
19ff9def6f
commit
f9bd3b9476
3 changed files with 27 additions and 13 deletions
|
@ -14,13 +14,15 @@ This project adheres to [Semantic Versioning](http://semver.org/) and
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- improvement of the Inspect forms RDF data structures: the content is now
|
- improvement of the Inspect forms of the RDF data structures: the content is
|
||||||
enclosed in angle brackets and indented
|
now enclosed in angle brackets and indented
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- strings of the form `".0"` and `"0."` weren't recognized as valid XSD float
|
- strings of the form `".0"` and `"0."` weren't recognized as valid XSD float
|
||||||
and double literals
|
and double literals
|
||||||
|
- the Turtle encoder handle base URIs without a trailing slash or hash properly
|
||||||
|
(no longer raising a warning and ignoring them)
|
||||||
|
|
||||||
|
|
||||||
[Compare v0.9.2...HEAD](https://github.com/rdf-elixir/rdf-ex/compare/v0.9.2...HEAD)
|
[Compare v0.9.2...HEAD](https://github.com/rdf-elixir/rdf-ex/compare/v0.9.2...HEAD)
|
||||||
|
|
|
@ -102,17 +102,7 @@ defmodule RDF.Turtle.Encoder do
|
||||||
defp base_iri(base_iri, _), do: IRI.coerce_base(base_iri)
|
defp base_iri(base_iri, _), do: IRI.coerce_base(base_iri)
|
||||||
|
|
||||||
defp init_base_iri(nil), do: nil
|
defp init_base_iri(nil), do: nil
|
||||||
|
defp init_base_iri(base_iri), do: {:ok, to_string(base_iri)}
|
||||||
defp init_base_iri(base_iri) do
|
|
||||||
base_iri = to_string(base_iri)
|
|
||||||
|
|
||||||
if String.ends_with?(base_iri, ~w[/ #]) do
|
|
||||||
{:ok, base_iri}
|
|
||||||
else
|
|
||||||
IO.warn("invalid base_iri: #{base_iri}")
|
|
||||||
{:bad, base_iri}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
defp prefixes(nil, %Graph{prefixes: prefixes}) when not is_nil(prefixes), do: prefixes
|
defp prefixes(nil, %Graph{prefixes: prefixes}) when not is_nil(prefixes), do: prefixes
|
||||||
|
|
||||||
|
|
|
@ -107,6 +107,28 @@ defmodule RDF.Turtle.EncoderTest do
|
||||||
<S1>
|
<S1>
|
||||||
<p1> <O1> .
|
<p1> <O1> .
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
base_without_hash = "http://example.com/foo"
|
||||||
|
|
||||||
|
assert Turtle.Encoder.encode!(
|
||||||
|
Graph.new(
|
||||||
|
[
|
||||||
|
{
|
||||||
|
RDF.iri(base_without_hash <> "#S1"),
|
||||||
|
RDF.iri(base_without_hash <> "#p1"),
|
||||||
|
RDF.iri(base_without_hash <> "#O1")
|
||||||
|
}
|
||||||
|
],
|
||||||
|
prefixes: %{},
|
||||||
|
base_iri: base_without_hash
|
||||||
|
)
|
||||||
|
) ==
|
||||||
|
"""
|
||||||
|
@base <#{base_without_hash}> .
|
||||||
|
|
||||||
|
<#S1>
|
||||||
|
<#p1> <#O1> .
|
||||||
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
test "when a base IRI is given, it has used instead of the base IRI of the given graph" do
|
test "when a base IRI is given, it has used instead of the base IRI of the given graph" do
|
||||||
|
|
Loading…
Reference in a new issue