All Versions
Latest Version
Avg Release Cycle
62 days
Latest Release
398 days ago

Changelog History
Page 1

  • v0.8.2 Changes

    September 21, 2020

    โž• Added

    • the Turtle encoder can now produce partial Turtle documents with the :only option and any combination of the following values: :triples, :directives, :base, :prefixes
    • ๐Ÿ’… the style of the Turtle directives produced by the Turtle encoder can be switched to SPARQL style with the option :directive_style and the value :sparql
    • ๐Ÿ”€ the most common conflict resolution strategies on RDF.PrefixMap.merge/3 can now be chosen directly with the atoms :ignore and :overwrite
    • ๐Ÿ›  RDF.PrefixMap.prefixed_name/2 to convert an IRI to a prefixed name
    • RDF.PrefixMap.prefixed_name_to_iri/2 to convert a prefixed name to an IRI

    ๐Ÿ”„ Changed

    • ๐Ÿ›  when serializing a RDF.Dataset with the Turtle encoder the prefixes of all of its graphs are used now

    ๐Ÿ›  Fixed

    • โž• adding an empty RDF.Description with a subject to an empty RDF.Graph resulted in an invalid non-empty graph (@pukkamustard)

    Compare v0.8.1...v0.8.2

  • v0.8.1 Changes

    June 16, 2020

    โž• Added

    • ๐Ÿ‘ query functions for basic graph pattern matching (incl. streaming-support)

    Compare v0.8.0...v0.8.1

  • v0.8.0 Changes

    June 01, 2020

    ๐Ÿ‘ RDF literals and their datatypes were completely redesigned to support derived XSD datatypes and ๐Ÿ‘ allow for defining custom datatypes. โšก๏ธ For an introduction on how literals work now read the updated page on literals in the guide. โฌ†๏ธ For more details on how to migrate from an earlier version read this wiki page.

    โž• Added

    • a lot of new datatypes like xsd:float, xsd:byte or xsd:anyURI -- all numeric XSD datatypes are now available; see this page of the API documentation for an up-to-date list of all supported and missing XSD datatypes
    • an implementation of XSD facet system now makes it easy to define own custom datatypes via restriction of the existing XSD datatypes
    • โšก๏ธ RDF.Literal.update/2 updates the value of a RDF.Literal without changing anything else, eg. the language or datatype

    ๐Ÿ”„ Changed

    • the RDF.Literal struct now consists entirely of a datatype-specific structs in the literal field, which besides being more memory-efficient (since literals no longer consist of all possible fields a literal might have), allows pattern matching now on the datatype of literals.
    • RDF XSD datatypes are now defined in the RDF.XSD namespace
    • alias constructor functions for the XSD datatypes are now defined on RDF.XSD
    • matches?, less_than?, greater_than as higher level functions were removed from the RDF.Literal.Datatype modules
    • less_than?, greater_than? now always return a boolean and no longer nil when incomparable; you can still determine if two terms are comparable by checking if compare/2 returns nil
    • ๐Ÿ‘ the language option is not supported on the constructor
    • the language option on is no longer ignored if it's empty (nil or ""), so this either produces an invalid RDF.LangString now or, if another datatype is provided will fail with an ArgumentError
    • canonical now performs implicit coercions when passed plain Elixir values
    • the inspect format for literals was changed and is now much more informative and uniform, since you now always see the value, the lexical form and if the literal is valid
    • RDF.Namespace.resolve_term/1 now returns ok or error tuples, but a new function RDF.Namespace.resolve_term!/1 with the old behaviour was added
    • ๐Ÿ‘ Elixir versions < 1.8 are no longer supported

    ๐Ÿ›  Fixed

    • numeric operations on invalid numeric literals no longer fail, but return nil instead
    • Datetimes preserve the original lexical form of the timezone when casting from a date
    • โš  BEAM error warnings when trying to use top-level modules as vocabulary terms

    Compare v0.7.1...v0.8.0

  • v0.7.1 Changes

    March 11, 2020

    โž• Added

    • โš  proper typespecs so that Dialyzer passes without warnings (@rustra)

    ๐Ÿ›  Fixed

    • RDF.XSD.Time didn't handle 24h overflows with an offset correctly

    Compare v0.7.0...v0.7.1

  • v0.7.0 Changes

    November 22, 2019

    โž• Added

    • RDF.Diff data structure for diffs between RDF graphs and descriptions
    • โšก๏ธ RDF.Description.update/4 updates the objects of a predicate in a description with a custom update function
    • โšก๏ธ RDF.Graph.update/4 updates the descriptions of a subject in a graph with a custom update function
    • RDF.Description.take/2 creates a description from another one by limiting its statements to a set of predicates
    • RDF.Graph.take/3 creates a graph from another one by limiting its statements to a set of subjects and optionally also a set of predicates
    • ๐Ÿšš RDF.Graph.clear/1 removes the triples from a graph
    • ๐Ÿ”ง Mix formatter configuration for using defvocab without parens

    ๐Ÿ”„ Changed

    • RDF.Serialization.Writer.write_file/4 which is the basis used by all the write_file/3 and write_file!/3 functions of all serialization format modules like RDF.NTriples, RDF.Turtle, JSON.LD etc. now opens file in a different mode: it no longer opens them with the :utf8 option. First, this by default slowed down the writing, but more importantly could lead to unexpected encoding issues. This is a breaking change: If your code relied on this file mode, you can get the old behaviour, by specifying the file_mode on these functions accordingly as [:utf8, :write, :exclusive]. For example, to write a Turtle file with the old behaviour, you can do it like this:
    RDF.Turtle.write_file!(some_data, some_path, file_mode: ~w[utf8 write exclusive]a)

    Compare v0.6.2...v0.7.0

  • v0.6.2 Changes

    September 08, 2019

    โž• Added

    • field base_iri on RDF.Graph structure which can be set via new base_iri option on or the new functions RDF.Graph.set_base_iri/2 and RDF.Graph.clear_base_iri/1
    • ๐Ÿ“‡ RDF.Graph.clear_metadata/1 which clears the base IRI and the prefixes
    • RDF.IRI.coerce_base/1 which coerces base IRIs; as opposed to it also accepts bare RDF.Vocabulary.Namespace modules

    ๐Ÿ”„ Changed

    • RDF.Turtle.Decoder saves the base IRI in the RDF.Graph now
    • RDF.Turtle.Encoder now takes the base IRI to be used during serialization in
      the following order of precedence:
      • from the base option or its new alias base_iri
      • from the base_iri field of the given graph
      • from the RDF.default_base_iri returning the one from the application configuration
    • and RDF.PrefixMap.add now also accepts terms from RDF.Vocabulary.Namespaces as namespaces

    ๐Ÿ›  Fixed

    • Vocabulary namespace modules weren't always detected properly

    Compare v0.6.1...v0.6.2

  • v0.6.1 Changes

    July 15, 2019

    โž• Added

    • RDF.IRI.to_string/1 returns the string representation of an RDF.IRI
      (implicitly resolving vocabulary namespace terms)
    • RDF.Literal.matches?/3 for XQuery regex pattern matching
    • RDF.Decimal.digit_count/1 and RDF.Decimal.fraction_digit_count/1 for
      determining the number of digits of decimal literals

    ๐Ÿ›  Fixed

    • ๐Ÿ“œ language literals were not properly unescaped during Turtle parsing
    • can take decimals and infers the datatype xsd:decimal correctly
    • true and false with capital letters are no longer valid RDF.Booleans following the XSD specification; the same applies for booleans in Turtle
    • +INF is no longer a valid RDF.Double (positive infinity doesn't expect a sign)
    • ๐Ÿ“œ slightly improve output of errors during parsing of Turtle, N-Triples and N-Quads

    Compare v0.6.0...v0.6.1

  • v0.6.0 Changes

    April 06, 2019

    โฌ†๏ธ see here for โฌ†๏ธ upgrading notes to RDF.ex 0.6

    โž• Added

    • RDF.PrefixMap
    • prefix management of RDF.Graphs:
      • the structure now has a prefixes field with an optional RDF.PrefixMap
      • new functions add_prefixes/2, delete_prefixes/2 and clear_prefixes/1
    • ๐Ÿ”ง configurable RDF.default_prefixes
    • RDF.Description.equal?/2, RDF.Graph.equal?/2, RDF.Dataset.equal?/2 and RDF.Data.equal?/2

    ๐Ÿ”„ Changed

    • the constructor functions for RDF.Graphs and RDF.Datasets now take the graph name resp. dataset name through a name option, instead of the first argument
    • ๐Ÿ› supports an additional prefixes argument to initialize the prefixes field
    • when RDF.Graph.add and RDF.Graph.put are called with another graph, its prefixes are merged
    • ๐Ÿ›  RDF.Turtle.Decoder saves the prefixes now
    • ๐Ÿ›  RDF.Turtle.Encoder now takes the prefixes to be serialized in the following order of precedence:
      • from the prefixes option (as before)
      • from the prefixes field of the given graph
      • from the RDF.default_prefixes
    • โฌ‡๏ธ drop support for OTP < 20, since prefixes can consist of UTF characters which are not supported in atoms on these versions

    Compare v0.5.4...v0.6.0

  • v0.5.4 Changes

    January 17, 2019

    ๐Ÿ›  Fixed

    • issue with Elixir 1.8
    • RDF.write_file and RDF.write_file! delegators had wrong signatures

    Compare v0.5.3...v0.5.4

  • v0.5.3 Changes

    November 11, 2018

    โž• Added

    • RDF.Triple.valid?/1, RDF.Quad.valid?/1 and RDF.Statement.valid?/1, which validate if a tuple is a valid RDF triple or RDF quad

    Compare v0.5.2...v0.5.3