Add :implicit_base option on the RDF.Turtle.Encoder
This commit is contained in:
parent
8e216c57a3
commit
2beee27eb5
3 changed files with 55 additions and 9 deletions
11
CHANGELOG.md
11
CHANGELOG.md
|
@ -5,6 +5,17 @@ This project adheres to [Semantic Versioning](http://semver.org/) and
|
||||||
[Keep a CHANGELOG](http://keepachangelog.com).
|
[Keep a CHANGELOG](http://keepachangelog.com).
|
||||||
|
|
||||||
|
|
||||||
|
## Unreleased
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- `:implicit_base` option on the `RDF.Turtle.Encoder`
|
||||||
|
|
||||||
|
|
||||||
|
[Compare v0.10.0...HEAD](https://github.com/rdf-elixir/rdf-ex/compare/v0.10.0...HEAD)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 0.10.0 - 2021-12-13
|
## 0.10.0 - 2021-12-13
|
||||||
|
|
||||||
This release adds RDF-star support on the RDF data structures, the N-Triples, N-Quads,
|
This release adds RDF-star support on the RDF data structures, the N-Triples, N-Quads,
|
||||||
|
|
|
@ -9,13 +9,17 @@ defmodule RDF.Turtle.Encoder do
|
||||||
|
|
||||||
## Options
|
## Options
|
||||||
|
|
||||||
- `:base`: : Allows to specify the base URI to be used for a `@base` directive.
|
|
||||||
If not specified the one from the given graph is used or if there is also none
|
|
||||||
specified for the graph the `RDF.default_base_iri/0`.
|
|
||||||
- `:prefixes`: Allows to specify the prefixes to be used as a `RDF.PrefixMap` or
|
- `:prefixes`: Allows to specify the prefixes to be used as a `RDF.PrefixMap` or
|
||||||
anything from which a `RDF.PrefixMap` can be created with `RDF.PrefixMap.new/1`.
|
anything from which a `RDF.PrefixMap` can be created with `RDF.PrefixMap.new/1`.
|
||||||
If not specified the ones from the given graph are used or if these are also not
|
If not specified the ones from the given graph are used or if these are also not
|
||||||
present the `RDF.default_prefixes/0`.
|
present the `RDF.default_prefixes/0`.
|
||||||
|
- `:base`: : Allows to specify the base URI to be used for a `@base` directive.
|
||||||
|
If not specified the one from the given graph is used or if there is also none
|
||||||
|
specified for the graph the `RDF.default_base_iri/0`.
|
||||||
|
- `:implicit_base`: This boolean flag allows to use a base URI to get relative IRIs
|
||||||
|
without embedding it explicitly in the content with a `@base` directive, so that
|
||||||
|
the URIs will be resolved according to the remaining strategy specified in
|
||||||
|
section 5.1 of [RFC3986](https://www.ietf.org/rfc/rfc3986.txt).
|
||||||
- `:only`: Allows to specify which parts of a Turtle document should be generated.
|
- `:only`: Allows to specify which parts of a Turtle document should be generated.
|
||||||
Possible values: `:base`, `:prefixes`, `:directives` (means the same as `[:base, :prefixes]`),
|
Possible values: `:base`, `:prefixes`, `:directives` (means the same as `[:base, :prefixes]`),
|
||||||
`:triples` or a list with any combination of these values.
|
`:triples` or a list with any combination of these values.
|
||||||
|
@ -119,11 +123,15 @@ defmodule RDF.Turtle.Encoder do
|
||||||
defp base_directive(nil, _), do: ""
|
defp base_directive(nil, _), do: ""
|
||||||
|
|
||||||
defp base_directive({_, base}, opts) do
|
defp base_directive({_, base}, opts) do
|
||||||
indent(opts) <>
|
if Keyword.get(opts, :implicit_base, false) do
|
||||||
case Keyword.get(opts, :directive_style) do
|
""
|
||||||
:sparql -> "BASE <#{base}>"
|
else
|
||||||
_ -> "@base <#{base}> ."
|
indent(opts) <>
|
||||||
end <> "\n\n"
|
case Keyword.get(opts, :directive_style) do
|
||||||
|
:sparql -> "BASE <#{base}>"
|
||||||
|
_ -> "@base <#{base}> ."
|
||||||
|
end <> "\n\n"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp prefix_directive({prefix, ns}, opts) do
|
defp prefix_directive({prefix, ns}, opts) do
|
||||||
|
|
|
@ -131,7 +131,7 @@ defmodule RDF.Turtle.EncoderTest do
|
||||||
"""
|
"""
|
||||||
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 is used instead of the base IRI of the given graph" do
|
||||||
assert Turtle.Encoder.encode!(
|
assert Turtle.Encoder.encode!(
|
||||||
Graph.new([{EX.S1, EX.p1(), EX.O1}],
|
Graph.new([{EX.S1, EX.p1(), EX.O1}],
|
||||||
prefixes: %{},
|
prefixes: %{},
|
||||||
|
@ -147,6 +147,33 @@ defmodule RDF.Turtle.EncoderTest do
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test ":implicit_base option" do
|
||||||
|
assert Turtle.Encoder.encode!(
|
||||||
|
Graph.new([{EX.S1, EX.p1(), EX.O1}],
|
||||||
|
prefixes: %{},
|
||||||
|
base_iri: EX.other()
|
||||||
|
),
|
||||||
|
base_iri: EX,
|
||||||
|
implicit_base: true
|
||||||
|
) ==
|
||||||
|
"""
|
||||||
|
<S1>
|
||||||
|
<p1> <O1> .
|
||||||
|
"""
|
||||||
|
|
||||||
|
assert Turtle.Encoder.encode!(
|
||||||
|
Graph.new([{EX.S1, EX.p1(), EX.O1}],
|
||||||
|
prefixes: %{},
|
||||||
|
base_iri: EX
|
||||||
|
),
|
||||||
|
implicit_base: true
|
||||||
|
) ==
|
||||||
|
"""
|
||||||
|
<S1>
|
||||||
|
<p1> <O1> .
|
||||||
|
"""
|
||||||
|
end
|
||||||
|
|
||||||
test "when no prefixes are given and no prefixes are in the given graph the default_prefixes are used" do
|
test "when no prefixes are given and no prefixes are in the given graph the default_prefixes are used" do
|
||||||
assert Turtle.Encoder.encode!(Graph.new({EX.S, EX.p(), NS.XSD.string()})) ==
|
assert Turtle.Encoder.encode!(Graph.new({EX.S, EX.p(), NS.XSD.string()})) ==
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue