# `RDF.LangString`
[🔗](https://github.com/rdf-elixir/rdf-ex/blob/v3.0.1/lib/rdf/model/literal/datatypes/lang_string.ex#L1)

`RDF.Literal.Datatype` for `rdf:langString`s.

# `t`

```elixir
@type t() :: %RDF.LangString{language: String.t(), value: String.t()}
```

# `canonical_lexical`

Returns the canonical lexical form of a `RDF.Literal` of this datatype.

# `cast`

```elixir
@spec cast(RDF.Literal.Datatype.literal() | RDF.Term.t()) :: RDF.Literal.t() | nil
```

Casts a datatype literal of one type into a datatype literal of another type.

Returns `nil` when the given arguments are not castable into this datatype or when the given argument is an
invalid literal.

Implementations define the casting for a given value with the `c:RDF.Literal.Datatype.do_cast/1` callback.

# `compare`

```elixir
@spec compare(RDF.Literal.t() | any(), RDF.Literal.t() | any()) ::
  RDF.Literal.Datatype.comparison_result() | :indeterminate | nil
```

# `datatype?`

Checks if the given literal has this datatype.

# `equal_value?`

Checks if two datatype literals are equal in terms of the values of their value space.

Non-`RDF.Literal`s  are tried to be coerced via `RDF.Literal.coerce/1` before comparison.

Returns `nil` when the given arguments are not comparable as literals of this
datatype.

Invalid literals are only considered equal in this relation when both have the exact same
datatype and the same attributes (lexical form, language etc.).

Implementations can customize this equivalence relation via the `c:RDF.Literal.Datatype.do_equal_value_different_datatypes?/2`
and `c:RDF.Literal.Datatype.do_equal_value_different_datatypes?/2` callbacks.

# `match_language?`

```elixir
@spec match_language?(RDF.Literal.t() | t() | String.t(), String.t()) :: boolean()
```

Checks if a language tagged string literal or language tag matches a language range.

The check is performed per the basic filtering scheme defined in
[RFC4647](http://www.ietf.org/rfc/rfc4647.txt) section 3.3.1.
A language range is a basic language range per _Matching of Language Tags_ in
RFC4647 section 2.1.
A language range of `"*"` matches any non-empty language-tag string.

see <https://www.w3.org/TR/sparql11-query/#func-langMatches>

# `new`

```elixir
@spec new(any(), String.t() | atom() | keyword()) :: RDF.Literal.t()
```

Creates a new `RDF.Literal` with this datatype and the given `value` and `language`.

# `update`

Updates the value of a `RDF.Literal` without changing everything else.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
