rdf-ex/CHANGELOG.md

7.2 KiB

Change Log

All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning and Keep a CHANGELOG.

Unreleased

Added

  • top-level alias functions for constructors of the basic datatypes
  • top-level constant functions RDF.true and RDF.false for the two boolean RDF.Literal values
  • RDF.Decimal datatype for xsd:decimal literals and support for decimal literals in Turtle encoder
  • RDF.Numeric with a list of all numeric datatypes and shared functions for all numeric literals, eg. arithmetic functions
  • RDF.Datatype.cast/1 for casting between RDF.Literals as specified in the XSD spec
  • the logical operators and the Effective Boolean Value (EBV) coercion algorithm from the XPath and SPARQL specs on RDF.Boolean
  • various functions on the RDF.DateTime and RDF.Time datatypes
  • RDF.term?/1
  • RDF.Term.coerce/1 which converts native Elixir values to a proper RDF term
  • RDF.Term.equal?/2 and RDF.Term.equal_value?/2
  • RDF.LangString.match_language?/2
  • possibility to configure an application-specific default base IRI; for now it is used only on reading of RDF serializations (when no base specified)
  • RDF.Literal.Guards which allow pattern matching of common literal datatypes

Changed

  • Elixir versions < 1.6 are no longer supported
  • RDF.resource?/1 does not fail anymore when called with unresolvable atoms but returns false instead
  • RDF.String.new/2 and RDF.String.new!/2 produce a rdf:langString when given a language tag
  • RDF.IRI.absolute/2 returns nil if the given base is not absolute, instead of failing with a FunctionClauseError
  • Some of the defined structs now enforce keys on compile-time (via Elixirs @enforce_keys feature) when not setting the corresponding fields would lead
    to invalid structs, namely the following fields:
    • RDF.IRI.value
    • RDF.BlankNode.id
    • RDF.Description.subject
    • RDF.List.head

Fixed

  • RDF.DateTime and RDF.Time store microseconds
  • RDF.DateTime: '24:00:00' is a valid time in a xsd:dateTime; the dateTime value so represented is the first instant of the following day
  • RDF.LangString: non-strings or the empty string as language produce invalid literals

Compare v0.4.1...HEAD

0.4.1 - 2018-03-19

Added

  • RDF.Literal.new!/2 which fails when creating an invalid literal

Changed

  • RDF.Literal.new/2 can create rdf:langString literals without failing, they
    are simply invalid; if you want to fail without a language tag use the new RDF.Literal.new!/2 function

Compare v0.4.0...v0.4.1

0.4.0 - 2018-03-10

Changed

  • renamed RDF.Serialization behaviour to RDF.Serialization.Format; the new RDF.Serialization module contains just simple RDF serialization related functions
  • renamed RDF.Serialization.Format.content_type/0 to RDF.Serialization.Format.media_type/0
  • moved RDF.Reader and RDF.Writer into RDF.Serialization module
  • removed the limitation to serialization formats defined in the core RDF.ex package for use as a source of RDF.Vocabulary.Namespaces; so you can now also define vocabulary namespaces from JSON-LD files for example, provided that the corresponding Hex package is defined as a dependency

Added

  • RDF.Serialization.Formats define a name atom
  • all RDF.Serialization.Reader and RDF.Serialization.Writer functions are now available on the RDF.Serialization module (or aliased on the top-level RDF module) and the format can be specified instead of a RDF.Serialization.Format argument, via the format or media_type option or in case of *_file functions, without explicit specification of the format, but inferred from file name extension instead; see the updated README section about RDF serializations
  • the following functions to access available RDF.Serialization.Formats:
    • RDF.Serialization.formats/0
    • RDF.Serialization.available_formats/0
    • RDF.Serialization.format/1
    • RDF.Serialization.format_by_media_type/1
    • RDF.Serialization.format_by_extension/1

Compare v0.3.1...v0.4.0

0.3.1 - 2018-01-19

Added

  • Collectable implementations for all RDF.Data structures so they can be used as destinations of Enum.into and for comprehensions

Fixed

  • Fix unescape_map in parse_helper for Elixir 1.6 (@ajkeys)

Compare v0.3.0...v0.3.1

0.3.0 - 2017-08-24

Added

  • RDF.IRI as a more suitable URI/IRI representation for RDF, bringing enormous performance and memory consumption benefits (see here for the details about the improvements)

Changed

  • use RDF.IRI instead of Elixirs URI everywhere
  • use the term iri instead of uri consistently, leading to the following function renamings:
    • base_iri instead of base_uri for the definition of RDF.Vocabulary.Namespaces
    • __base_iri__ instead of __base_uri__ in all RDF.Vocabulary.Namespaces
    • __iris__ instead of __uris__ in all RDF.Vocabulary.Namespaces
    • RDF.IRI.InvalidError instead of RDF.InvalidURIError
    • RDF.Literal.InvalidError instead of RDF.InvalidLiteralError
    • RDF.Namespace.InvalidVocabBaseIRIError instead of RDF.Namespace.InvalidVocabBaseURIError
  • show compilation message of vocabulary namespaces always to be able to relate resp. errors and warnings

Fixed

  • when trying to resolve a term from an undefined module a RDF.Namespace.UndefinedTermError exception

Compare v0.2.0...v0.3.0

0.2.0 - 2017-08-12

Added

  • full Turtle support
  • RDF.List structure for the representation of RDF lists
  • describes?/1 on RDF.Data protocol and all RDF data structures which checks
    if statements about a given resource exist
  • RDF.Data.descriptions/1 which returns all descriptions within a RDF data structure
  • RDF.Description.first/2 which returns a single object to a predicate of a RDF.Description
  • RDF.Description.objects/2 now supports a custom filter function
  • RDF.bnode?/1 which checks if the given value is a blank node

Changed

  • Rename RDF.Statement.convert* functions to RDF.Statement.coerce*
  • Don't support Elixir versions < 1.4

Fixed

  • RDF.uri/1 and URI parsing of N-Triples and N-Quads decoders preserve empty fragments
  • booleans weren't recognized as coercible literals on object positions
  • N-Triples and N-Quads decoder didn't handle escaping properly

Compare v0.1.1...v0.2.0

0.1.1 - 2017-06-25

Fixed

  • Add src directory to package files.

Compare v0.1.0...v0.1.1

0.1.0 - 2017-06-25

Initial release

Note: This version is not usable, since the src directory is not part of the package, which has been immediately fixed on version 0.1.1.