@@ -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