# Apache Commons RDF (incubating)

## 0.3.0-incubating (2016-11)

This release adds RDF implementations based on Apache Jena, Eclipse RDF4J and
JSONLD-Java. New interfaces include Dataset and Quad. Note that the 
interface RDFTermFactory has been deprecated and been replaced by the interface
RDF. Graph.getTriples() has been deprecated and replaced by 
Graph.iterate(). This release adds an experimental interface 
RDFParser, note that this may evolve or be removed in the next release.

* [COMMONSRDF-7] - Document that RDFTerm, Triple and Quad are immutable
* [COMMONSRDF-33] - Jena integration
* [COMMONSRDF-34] - Add DatasetImpl using Jena
* [COMMONSRDF-35] - rdf4j integration
* [COMMONSRDF-36] - jsonld-java integratoin
* [COMMONSRDF-37] - Quad and Dataset support
* [COMMONSRDF-38] - simple Graph.contains(Triple) now maps bnodes consistently
* [COMMONSRDF-39] - Add RDFParser interface (experimental)
* [COMMONSRDF-46] - Rename RDFTermFactory to RDF

## 0.2.0-incubating (2016-04)

This release clarifies .equals() and .hashCode() for RDFTerms so that they can
be compared across graphs and implementations.

* [COMMONSRDF-14] - Define value returned by hashCode()
* [COMMONSRDF-20] - ServiceLoader mechanism to load RDFTermFactory
* [COMMONSRDF-21] - Remove BlankNode requirements from RDFTermFactory.createGraph()
* [COMMONSRDF-25] - Remove mentions of "local scope" in .equals()
* [COMMONSRDF-26] - Add RDFSyntax constants (e.g. TURTLE)
* [COMMONSRDF-27] - RDFTermFactory no longer require BlankNode mapping
* [COMMONSRDF-28] - Add internal SimpleRDFTerm marker interface

## 0.1.0-incubating (2015-05)

This is the first release after moving to Apache Incubator.

* [COMMONSRDF-2] - Change to package name org.apache.commons.rdf.api
* [COMMONSRDF-6] - Contract around the internal string of a blank node
* [COMMONSRDF-8] - simple .GraphImpl.add() must clone BlankNode
* [COMMONSRDF-11] - Simple should be extendable classes
* [COMMONSRDF-12] - Graph to be Iterable
* [COMMONSRDF-29] - BlankNode.internalIdentifier() renamed to BlankNode.uniqueReference()
* [COMMONSRDF-30] - Add "simple" implementation and unit tests
* [COMMONSRDF-31] - Add RDFTermFactory
* Added user guide to website


## 0.0.2 (2014-08-04)

* Change to package name com.github.commonsrdf.api
* BlankNode.getLabel() renamed to BlankNode.internalIdentifier()
* Removed Quad

## 0.0.1 (2014-07-18)

* First release
