diff --git a/lib/rdf/literal/datatypes/generic.ex b/lib/rdf/literal/datatypes/generic.ex index be40623..0603715 100644 --- a/lib/rdf/literal/datatypes/generic.ex +++ b/lib/rdf/literal/datatypes/generic.ex @@ -33,7 +33,8 @@ defmodule RDF.Literal.Generic do defp normalize_datatype(nil), do: nil defp normalize_datatype(""), do: nil - defp normalize_datatype(datatype), do: IRI.new(datatype) + defp normalize_datatype(%IRI{} = datatype), do: to_string(datatype) + defp normalize_datatype(datatype), do: datatype @impl Datatype @spec new!(any, String.t | IRI.t | keyword) :: Literal.t @@ -49,7 +50,7 @@ defmodule RDF.Literal.Generic do @impl Datatype def datatype_id(%Literal{literal: literal}), do: datatype_id(literal) - def datatype_id(%__MODULE__{} = literal), do: literal.datatype + def datatype_id(%__MODULE__{} = literal), do: RDF.iri(literal.datatype) @impl Datatype def value(%Literal{literal: literal}), do: value(literal) @@ -69,7 +70,7 @@ defmodule RDF.Literal.Generic do @impl Datatype def valid?(%Literal{literal: %__MODULE__{} = literal}), do: valid?(literal) - def valid?(%__MODULE__{datatype: %IRI{}}), do: true + def valid?(%__MODULE__{datatype: datatype}) when is_binary(datatype), do: true def valid?(_), do: false @doc """ diff --git a/test/unit/datatypes/generic_test.exs b/test/unit/datatypes/generic_test.exs index 6a70656..ba38959 100644 --- a/test/unit/datatypes/generic_test.exs +++ b/test/unit/datatypes/generic_test.exs @@ -12,11 +12,10 @@ defmodule RDF.Literal.GenericTest do describe "new" do test "with value and datatype" do Enum.each @valid, fn {input, {value, datatype}} -> - datatype_iri = RDF.iri(datatype) - assert %Literal{literal: %Generic{value: ^value, datatype: ^datatype_iri}} = - Generic.new(input, datatype: datatype_iri) - assert %Literal{literal: %Generic{value: ^value, datatype: ^datatype_iri}} = + assert %Literal{literal: %Generic{value: ^value, datatype: ^datatype}} = Generic.new(input, datatype: datatype) + assert %Literal{literal: %Generic{value: ^value, datatype: ^datatype}} = + Generic.new(input, datatype: RDF.iri(datatype)) end end @@ -30,8 +29,7 @@ defmodule RDF.Literal.GenericTest do test "with canonicalize opts" do Enum.each @valid, fn {input, {value, datatype}} -> - datatype_iri = RDF.iri(datatype) - assert %Literal{literal: %Generic{value: ^value, datatype: ^datatype_iri}} = + assert %Literal{literal: %Generic{value: ^value, datatype: ^datatype}} = Generic.new(input, datatype: datatype, canonicalize: true) end end