# `RDF.Turtle.Decoder`
[🔗](https://github.com/rdf-elixir/rdf-ex/blob/v3.0.1/lib/rdf/serializations/turtle/decoder.ex#L1)

A decoder for Turtle serializations to `RDF.Graph`s.

As for all decoders of `RDF.Serialization.Format`s, you normally won't use these
functions directly, but via one of the `read_` functions on the `RDF.Turtle` format
module or the generic `RDF.Serialization` module.

## Blank Node Generation

When interpreting blank node descriptions, the decoder generates blank node
identifiers. By default, it uses `RDF.BlankNode.Generator.UUID` to create
random identifiers, ensuring uniqueness across multiple parsing operations.
This behavior prevents unintended merging of unrelated blank nodes,
which could occur with deterministic identifiers, e.g. from
`RDF.BlankNode.Generator.Increment`.

You can customize blank node generation using the `bnode_gen` option and
providing either a module implementing `RDF.BlankNode.Generator.Algorithm`
or an instantiated `RDF.BlankNode.Generator.Algorithm` struct in case you
want to customize the generator. See the respective
`RDF.BlankNode.Generator.Algorithm` implementation on what fields can be set.
You can also use `:uuid`, `:random` or `:increment` as short values for the
respective `RDF.BlankNode.Generator.Algorithm` implementations.

Example usage:

    RDF.Turtle.Decoder.decode!(turtle_string,
      bnode_gen: RDF.BlankNode.Generator.Increment.new(prefix: "x", counter: 42))

To set a global or environment-specific default, use the `turtle_trig_decoder_bnode_gen`
application config (e.g. the `RDF.BlankNode.Generator.Increment` implementation,
generating deterministic blank nodes, can make testing easier):

    config :rdf,
      turtle_trig_decoder_bnode_gen: :increment

## Other options

- `:base`: allows to specify the base URI to be used against relative URIs
  when no base URI is defined with a `@base` directive within the document

# `parse`

# `tokenize`

---

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