2017-04-10 19:24:43 +00:00
|
|
|
defmodule RDF.Serialization.ParseHelper do
|
2016-10-30 18:36:46 +00:00
|
|
|
@moduledoc false
|
|
|
|
|
2017-07-05 21:27:55 +00:00
|
|
|
alias RDF.Datatype.NS.XSD
|
|
|
|
|
|
|
|
@rdf_type RDF.uri("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")
|
|
|
|
def rdf_type, do: @rdf_type
|
|
|
|
|
|
|
|
def to_uri_string({:iriref, line, value}), do: value
|
|
|
|
|
2016-10-30 18:36:46 +00:00
|
|
|
def to_uri({:iriref, line, value}) do
|
|
|
|
case URI.parse(value) do
|
|
|
|
%URI{scheme: nil} -> {:error, line, "#{value} is not a valid URI"}
|
|
|
|
parsed_uri -> {:ok, parsed_uri}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def to_bnode({:blank_node_label, _line, value}), do: RDF.bnode(value)
|
2017-07-05 21:27:55 +00:00
|
|
|
def to_bnode({:anon, _line}), do: RDF.bnode # TODO:
|
2016-10-30 18:36:46 +00:00
|
|
|
|
|
|
|
def to_literal({:string_literal_quote, _line, value}),
|
|
|
|
do: RDF.literal(value)
|
2017-07-05 21:27:55 +00:00
|
|
|
def to_literal({:integer, _line, value}), do: RDF.literal(value)
|
|
|
|
def to_literal({:decimal, _line, value}), do: RDF.literal(value)
|
|
|
|
def to_literal({:double, _line, value}), do: RDF.literal(value)
|
|
|
|
def to_literal({:boolean, _line, value}), do: RDF.literal(value)
|
2016-10-30 18:36:46 +00:00
|
|
|
def to_literal({:string_literal_quote, _line, value}, type),
|
|
|
|
do: RDF.literal(value, [type])
|
|
|
|
|
2017-07-05 21:27:55 +00:00
|
|
|
def integer(value), do: RDF.Integer.new(List.to_string(value))
|
|
|
|
def decimal(value), do: RDF.Literal.new(List.to_string(value), datatype: XSD.decimal)
|
|
|
|
def double(value), do: RDF.Double.new(List.to_string(value))
|
|
|
|
def boolean('true'), do: true
|
|
|
|
def boolean('false'), do: false
|
|
|
|
|
2016-10-30 18:36:46 +00:00
|
|
|
def to_langtag({:langtag, _line, value}), do: value
|
2017-07-05 21:27:55 +00:00
|
|
|
def to_langtag({:"@prefix", 1}), do: "prefix"
|
|
|
|
def to_langtag({:"@base", 1}), do: "base"
|
|
|
|
|
|
|
|
def bnode_str('_:' ++ value), do: List.to_string(value)
|
|
|
|
def langtag_str('@' ++ value), do: List.to_string(value)
|
|
|
|
def quoted_content_str(value), do: value |> List.to_string |> String.slice(1..-2)
|
|
|
|
def long_quoted_content_str(value), do: value |> List.to_string |> String.slice(3..-4)
|
2016-10-30 18:36:46 +00:00
|
|
|
|
2017-07-05 21:27:55 +00:00
|
|
|
def prefix_ns(value), do: value |> List.to_string |> String.slice(0..-2)
|
|
|
|
def prefix_ln(value), do: value |> List.to_string |> String.split(":", parts: 2) |> List.to_tuple
|
2016-10-30 18:36:46 +00:00
|
|
|
|
|
|
|
end
|