From 5cc0728b13f643a27ab87506cf29586b6a46c45c Mon Sep 17 00:00:00 2001 From: Marcel Otto Date: Sat, 13 Jul 2024 21:49:56 +0200 Subject: [PATCH] Use uuid bnode generator on Turtle/TriG decoders by default --- lib/rdf/serializations/turtle_trig/decoder.ex | 12 +++++++----- lib/rdf/serializations/turtle_trig/decoder/state.ex | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/rdf/serializations/turtle_trig/decoder.ex b/lib/rdf/serializations/turtle_trig/decoder.ex index f2907a5d..e4eed151 100644 --- a/lib/rdf/serializations/turtle_trig/decoder.ex +++ b/lib/rdf/serializations/turtle_trig/decoder.ex @@ -5,7 +5,7 @@ defmodule RDF.TurtleTriG.Decoder do ## Blank Node Generation When interpreting blank node descriptions, the decoder generates blank node - identifiers. By default, it uses `RDF.BlankNode.Generator.Random` to create + 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 @@ -14,17 +14,19 @@ defmodule RDF.TurtleTriG.Decoder do 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 start with a non-default state. See the respective + want to customize the generator. See the respective `RDF.BlankNode.Generator.Algorithm` implementation on what fields can be set. - You can also use `:random` or `:increment` as short values for the respective - `RDF.BlankNode.Generator.Algorithm` implementations. + 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 default, use the `turtle_trig_decoder_bnode_gen` application config: + 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 diff --git a/lib/rdf/serializations/turtle_trig/decoder/state.ex b/lib/rdf/serializations/turtle_trig/decoder/state.ex index b4c417cc..2f45dc70 100644 --- a/lib/rdf/serializations/turtle_trig/decoder/state.ex +++ b/lib/rdf/serializations/turtle_trig/decoder/state.ex @@ -5,7 +5,7 @@ defmodule RDF.TurtleTriG.Decoder.State do alias RDF.BlankNode - @default_turtle_trig_decoder_bnode_gen :random + @default_turtle_trig_decoder_bnode_gen if Code.ensure_loaded?(UUID), do: :uuid, else: :random def default_bnode_gen do Application.get_env(