11 KiB
11 KiB
Changelog
All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning and Keep a CHANGELOG.
Unreleased
Added
RDF.IRI.to_string/1
returns the string representation of anRDF.IRI
(implicitly resolving vocabulary namespace terms)RDF.Literal.matches?/3
for XQuery regex pattern matchingRDF.Decimal.digit_count/1
andRDF.Decimal.fraction_digit_count/1
for
determining the number of digits of decimal literals
Fixed
- language literals were not properly unescaped during Turtle parsing
RDF.Literal.new/1
can take decimals and infers the datatypexsd:decimal
correctlytrue
andfalse
with capital letters are no longer validRDF.Boolean
s following the XSD specification; the same applies for booleans in Turtle
0.6.0 - 2019-04-06
Added
RDF.PrefixMap
- prefix management of
RDF.Graph
s:- the structure now has a
prefixes
field with an optionalRDF.PrefixMap
- new functions
add_prefixes/2
,delete_prefixes/2
andclear_prefixes/1
- the structure now has a
- configurable
RDF.default_prefixes
RDF.Description.equal?/2
,RDF.Graph.equal?/2
,RDF.Dataset.equal?/2
andRDF.Data.equal?/2
Changed
- the constructor functions for
RDF.Graph
s andRDF.Dataset
s now take the graph name resp. dataset name through aname
option, instead of the first argument RDF.Graph.new
supports an additionalprefixes
argument to initialize theprefixes
field- when
RDF.Graph.add
andRDF.Graph.put
are called with another graph, its prefixes are merged RDF.Turtle.Decoder
saves the prefixes nowRDF.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
- from the
- drop support for OTP < 20, since prefixes can consist of UTF characters which are not supported in atoms on these versions
0.5.4 - 2019-01-17
Fixed
- issue with Elixir 1.8
RDF.write_file
andRDF.write_file!
delegators had wrong signatures
0.5.3 - 2018-11-11
Added
RDF.Triple.valid?/1
,RDF.Quad.valid?/1
andRDF.Statement.valid?/1
, which validate if a tuple is a valid RDF triple or RDF quad
0.5.2 - 2018-11-04
Added
RDF.Term.value/1
returning the native Elixir value of a RDF termRDF.Statement.values/1
,RDF.Triple.values/1
andRDF.Quad.values/1
returning a tuple ofRDF.Term.value/1
converted native Elixir values from a tuple of RDF termsRDF.Description.values/1
,RDF.Graph.values/1
,RDF.Dataset.values/1
andRDF.Data.values/1
returning a map ofRDF.Term.value/1
converted native Elixir values from the respective structure of RDF terms- for all of aforementioned
values/1
functions a variantvalues/2
which allows to specify custom mapping function to be applied when creating the resp. structure RDF.Literal.compare/2
,RDF.Literal.less_than?/2
andRDF.Literal.greater_than?/2
forRDF.Datatype
aware comparisons ofRDF.Literal
s
Fixed
RDF.DateTime.equal_value?/2
andRDF.Date.equal_value?/2
did not handle timezones correctly-00:00
is a valid timezone offset onRDF.DateTime
0.5.1 - 2018-09-17
Fixed
- generated Erlang output files of Leex and Yecc are excluded from Hex package
0.5.0 - 2018-09-17
Added
- Possibility to execute simple SPARQL queries against
RDF.Graph
s with SPARQL 0.2 - New
RDF.Term
protocol implemented for all structs representing RDF nodes and
all native Elixir datatypes which are coercible to those modules. For now, it
mainly offers, besides the coercion, just the functionRDF.Term.equal?/2
andRDF.Term.equal_value?/2
for term- and value comparisons. - New
RDF.Decimal
datatype forxsd:decimal
literals and support for decimal literals in Turtle encoder RDF.Numeric
module with a list of all numeric datatypes and shared functions for all numeric literals, eg. arithmetic functions- Various new
RDF.Datatype
functionRDF.Datatype.cast/1
for casting betweenRDF.Literal
s as specified in the XSD spec on allRDF.Datatype
s- 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
andRDF.Time
datatypes RDF.LangString.match_language?/2
- Many new convenience functions on the top-level
RDF
module- constructors for all of the supported
RDF.Datatype
s - constant functions
RDF.true
andRDF.false
for the two booleanRDF.Literal
values
- constructors for all of the supported
RDF.Literal.Guards
which allow pattern matching of common literal datatypesRDF.BlankNode.Generator
- Possibility to configure an application-specific default base IRI; for now it
is used only on reading of RDF serializations (when no
base
specified)
Changed
- Elixir versions < 1.6 are no longer supported
RDF.String.new/2
andRDF.String.new!/2
produce ardf:langString
when given a language tag- 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.resource?/1
does not fail anymore when called with unresolvable atoms but returnsfalse
insteadRDF.IRI.absolute/2
does not fail with aFunctionClauseError
when the given base is not absolute, but returnsnil
insteadRDF.DateTime
andRDF.Time
store microsecondsRDF.DateTime
: '24:00:00' is a valid time in a xsd:dateTime; the dateTime value so represented is the first instant of the following dayRDF.LangString
: non-strings or the empty string as language produce invalid literals
0.4.1 - 2018-03-19
Added
RDF.Literal.new!/2
which fails when creating an invalid literal
Changed
RDF.Literal.new/2
can createrdf:langString
literals without failing, they
are simply invalid; if you want to fail without a language tag use the newRDF.Literal.new!/2
function
0.4.0 - 2018-03-10
Changed
- renamed
RDF.Serialization
behaviour toRDF.Serialization.Format
; the newRDF.Serialization
module contains just simple RDF serialization related functions - renamed
RDF.Serialization.Format.content_type/0
toRDF.Serialization.Format.media_type/0
- moved
RDF.Reader
andRDF.Writer
intoRDF.Serialization
module - removed the limitation to serialization formats defined in the core RDF.ex package
for use as a source of
RDF.Vocabulary.Namespace
s; 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.Format
s define aname
atom- all
RDF.Serialization.Reader
andRDF.Serialization.Writer
functions are now available on theRDF.Serialization
module (or aliased on the top-levelRDF
module) and the format can be specified instead of aRDF.Serialization.Format
argument, via theformat
ormedia_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.Format
s: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
0.3.1 - 2018-01-19
Added
Collectable
implementations for allRDF.Data
structures so they can be used as destinations ofEnum.into
andfor
comprehensions
Fixed
- Fix
unescape_map
inparse_helper
for Elixir 1.6 (@ajkeys)
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 ElixirsURI
everywhere - use the term iri instead of uri consistently, leading to the following
function renamings:
base_iri
instead ofbase_uri
for the definition ofRDF.Vocabulary.Namespace
s__base_iri__
instead of__base_uri__
in allRDF.Vocabulary.Namespace
s__iris__
instead of__uris__
in allRDF.Vocabulary.Namespace
sRDF.IRI.InvalidError
instead ofRDF.InvalidURIError
RDF.Literal.InvalidError
instead ofRDF.InvalidLiteralError
RDF.Namespace.InvalidVocabBaseIRIError
instead ofRDF.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
0.2.0 - 2017-08-12
Added
- full Turtle support
RDF.List
structure for the representation of RDF listsdescribes?/1
onRDF.Data
protocol and all RDF data structures which checks
if statements about a given resource existRDF.Data.descriptions/1
which returns all descriptions within a RDF data structureRDF.Description.first/2
which returns a single object to a predicate of aRDF.Description
RDF.Description.objects/2
now supports a custom filter functionRDF.bnode?/1
which checks if the given value is a blank node
Changed
- Rename
RDF.Statement.convert*
functions toRDF.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
0.1.1 - 2017-06-25
Fixed
- Add
src
directory to package files.
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.