View Source RDF.IRI (RDF.ex v2.0.0)
A structure for IRIs.
This structure just wraps a plain IRI string and doesn't bother with the
components of the IRI, since in the context of RDF there are usually very many
IRIs and parsing them isn't needed in most cases. For these reasons we don't
use Elixirs built-in URI
structure, because it would be unnecessary
expensive in terms of performance and memory.
The component parts can always be retrieved with the RDF.IRI.parse/1
function, which returns Elixirs built-in URI
structure. Note, that URI
doesn't escape Unicode characters by default, so it's a suitable structure for
IRIs.
Summary
Functions
Resolves a relative IRI against a base IRI.
Checks if the given value is an absolute IRI.
Appends a String to a RDF.IRI
.
Coerces an IRI serving as a base IRI.
The default base IRI to be used when reading a serialization and no base_iri
option is provided.
Checks whether iri
end with any of the given suffixes.
Tests for value equality of IRIs.
Checks whether iri
lies in namespace
.
Merges two IRIs.
Parses an IRI into its components and returns them as an URI
struct.
Returns the scheme of the given IRI
Checks whether iri
starts with any of the given prefixes.
Returns the given IRI as a string.
Returns the given value unchanged if it's a valid IRI, otherwise raises an exception.
Checks if the given IRI is valid.
Types
@type t() :: %RDF.IRI{value: String.t()}
Functions
Resolves a relative IRI against a base IRI.
as specified in section 5.1 Establishing a Base URI of RFC3986. Only the basic algorithm in section 5.2 of RFC3986 is used; neither Syntax-Based Normalization nor Scheme-Based Normalization are performed.
Characters additionally allowed in IRI references are treated in the same way that unreserved characters are treated in URI references, per section 6.5 of RFC3987
If the given base
is not an absolute IRI nil
is returned.
Checks if the given value is an absolute IRI.
An absolute IRI is defined in RFC3987 containing a scheme along with a path and optional query and fragment segments.
Appends a String to a RDF.IRI
.
Example
iex> ~I<http://example.com/> |> RDF.IRI.append("foo")
~I<http://example.com/foo>
iex> EX.foo |> RDF.IRI.append("bar")
EX.foobar
iex> EX.Foo |> RDF.IRI.append("bar")
RDF.iri(EX.Foobar)
Coerces an IRI serving as a base IRI.
As opposed to new/1
this also accepts bare RDF.Vocabulary.Namespace
modules
and uses the base IRI from their definition.
The default base IRI to be used when reading a serialization and no base_iri
option is provided.
The value can be set via the default_base_iri
configuration. For example:
config :rdf,
default_base_iri: "http://my_app.example/"
You can also set :default_base_iri
to a module-function tuple {mod, fun}
with a function which should be called to determine the default base IRI.
Checks whether iri
end with any of the given suffixes.
Examples
iex> RDF.IRI.ends_with?(~I<http://example.com/foo>, "foo")
true
iex> RDF.IRI.ends_with?(EX.Foo, "Foo")
true
iex> RDF.IRI.ends_with?(~I<http://example.com/foo>, ["foo", "bar"])
true
iex> RDF.IRI.ends_with?(~I<http://example.com/foo>, "bar")
false
@spec equal_value?( t() | RDF.Literal.t() | atom(), t() | RDF.Literal.t() | URI.t() | atom() ) :: boolean() | nil
Tests for value equality of IRIs.
Returns nil
when the given arguments are not comparable as IRIs.
see https://www.w3.org/TR/rdf-concepts/#section-Graph-URIref
Checks whether iri
lies in namespace
.
Examples
iex> RDF.IRI.in_namespace?(~I<http://example.com/foo>, ~I<http://example.com/>)
true
iex> RDF.IRI.in_namespace?(EX.Foo, ~I<http://example.com/>)
true
iex> RDF.IRI.in_namespace?(~I<http://example.com/foo/bar>, "http://example.com/")
true
iex> RDF.IRI.in_namespace?(~I<http://example.com/#foo>, EX)
true
Merges two IRIs.
This function merges two IRIs as per RFC 3986, section 5.2.
Creates a RDF.IRI
.
Creates a RDF.IRI
, but checks if the given IRI is valid.
If the given IRI is not valid a RDF.IRI.InvalidError
is raised.
see valid?/1
Parses an IRI into its components and returns them as an URI
struct.
Returns the scheme of the given IRI
If the given string is not a valid absolute IRI, nil
is returned.
Examples
iex> RDF.IRI.scheme("http://www.example.com/foo")
"http"
iex> RDF.IRI.scheme("not an iri")
nil
@spec starts_with?(t() | module(), String.pattern()) :: boolean()
Checks whether iri
starts with any of the given prefixes.
Examples
iex> RDF.IRI.starts_with?(~I<http://example.com/foo>, "http://example.com/")
true
iex> RDF.IRI.starts_with?(EX.Foo, "http://example.com/")
true
iex> RDF.IRI.starts_with?(~I<http://example.com/foo/bar>, ["http://example.com/", "http://example.org/"])
true
iex> RDF.IRI.starts_with?(~I<http://example.com/#foo>, "http://example.org/")
false
Returns the given IRI as a string.
Note that this function can also handle RDF.Vocabulary.Namespace
terms.
Examples
iex> RDF.IRI.to_string RDF.IRI.new("http://example.com/#foo")
"http://example.com/#foo"
iex> RDF.IRI.to_string EX.foo
"http://example.com/#foo"
iex> RDF.IRI.to_string EX.Foo
"http://example.com/#Foo"
Returns the given value unchanged if it's a valid IRI, otherwise raises an exception.
Examples
iex> RDF.IRI.valid!("http://www.example.com/foo")
"http://www.example.com/foo"
iex> RDF.IRI.valid!(RDF.IRI.new("http://www.example.com/foo"))
RDF.IRI.new("http://www.example.com/foo")
iex> RDF.IRI.valid!("not an iri")
** (RDF.IRI.InvalidError) Invalid IRI: "not an iri"
Checks if the given IRI is valid.
Note: This currently checks only if the given IRI is absolute.
Examples
iex> RDF.IRI.valid?("http://www.example.com/foo")
true
iex> RDF.IRI.valid?("not an iri")
false