Skip to content

Commit ff8361e

Browse files
committed
Optimize relative URI resolution
1 parent ded576c commit ff8361e

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,18 @@ This project adheres to [Semantic Versioning](http://semver.org/) and
55
[Keep a CHANGELOG](http://keepachangelog.com).
66

77

8+
## Unreleased
9+
10+
### Added
11+
12+
- optimizations of relative URI resolution against the base URI
13+
(in non-`rdf:ID` cases)
14+
15+
16+
[Compare v1.1.0...HEAD](https://github.com/rdf-elixir/rdf-xml-ex/compare/v1.1.0...HEAD)
17+
18+
19+
820
## v1.1.0 - 2024-01-16
921

1022
Elixir versions < 1.12 are no longer supported

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.1.0
1+
1.1.1-pre

lib/rdf/xml/decoder/element_node.ex

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ defmodule RDF.XML.Decoder.ElementNode do
2121
uri: RDF.IRI.t(),
2222
rdf_attributes: %{atom => any},
2323
property_attributes: %{RDF.IRI.t() => any},
24-
base_uri: String.t() | nil,
24+
base_uri: URI.t() | nil,
2525
ns_declarations: PrefixMap.t(),
2626
language: String.t() | nil,
2727
li_counter: pos_integer
@@ -62,13 +62,16 @@ defmodule RDF.XML.Decoder.ElementNode do
6262
@doc false
6363
def normalize_base_uri("http" <> _ = base_uri) do
6464
case String.split(base_uri, "#") do
65-
[base_uri] -> {:ok, base_uri}
66-
[base_uri, _fragment] -> {:ok, base_uri}
65+
[base_uri] -> {:ok, IRI.parse(base_uri)}
66+
[base_uri, _fragment] -> {:ok, IRI.parse(base_uri)}
6767
_ -> {:error, %RDF.XML.ParseError{message: "invalid base URI: #{base_uri}"}}
6868
end
6969
end
7070

71-
def normalize_base_uri(base_uri), do: {:ok, base_uri}
71+
def normalize_base_uri(%URI{} = base_uri), do: {:ok, base_uri}
72+
def normalize_base_uri(%IRI{} = base_uri), do: {:ok, IRI.parse(base_uri)}
73+
def normalize_base_uri(base_uri) when is_binary(base_uri), do: {:ok, IRI.parse(base_uri)}
74+
def normalize_base_uri(nil), do: {:ok, nil}
7275

7376
defp extract_xml_namespaces(attributes, nil, graph) do
7477
extract_xml_namespaces(
@@ -218,7 +221,7 @@ defmodule RDF.XML.Decoder.ElementNode do
218221

219222
defp rdf_id(value, base) do
220223
with {:ok, name} <- nc_name(value) do
221-
base <> "#" <> name
224+
URI.to_string(base) <> "#" <> name
222225
end
223226
end
224227

0 commit comments

Comments
 (0)