<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements. See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License. You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<document>
  <properties>
    <title>Apache Commons RDF Release Notes</title>
  </properties>

  <body>
    <release version="0.6.0" date="20YY-MM-DD" description="Minor feature and bug fix release.">
        <action dev="ggregory" type="fix" due-to="Gary Gregory">
            Fix Java 17 build.
        </action>
        <!-- UPDATE -->
        <action type="update" dev="ggregory" due-to="Gary Gregory">
            Bump actions/cache from 2.1.4 to 3.0.6 #77.
        </action>
        <action type="update" dev="ggregory" due-to="Gary Gregory">
            Bump actions/checkout from 2 to 3 #76.
        </action>
        <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">
            Bump actions/setup-java from 1.4.0 to 3 #81.
        </action>
        <action dev="ggregory" type="update" due-to="Gary Gregory">
            Bump commons.japicmp.version 0.11.0 -> 0.15.7.
        </action>
        <action type="update" dev="ggregory" due-to="Gary Gregory">
            Bump JAXB API from 2.3.0 to 2.3.1.
        </action>
        <action type="update" dev="ggregory" due-to="Gary Gregory">
            Bump JAXB Glassfish runtime 2.3.0 to 2.3.6.
        </action>
        <action type="update" dev="ggregory" due-to="Gary Gregory">
            Bump maven-pmd-plugin from 3.12.0 to 3.16.0 #75.
        </action>
        <action type="update" dev="ggregory" due-to="Dependabot">
            Bump rdf4j-bom from 2.2.2 to 3.7.6 #78.
        </action>
        <action type="update" dev="ggregory" due-to="Dependabot">
            Bump jsonld-java from 0.11.1 to 0.13.4 #73.
        </action>
    </release>
    <release version="0.5.0" date="2017-11-19" description="Minor feature and bug fix release.">
        <action type="fix" issue="COMMONSRDF-47">
            RDFSyntax should be interface, not enum
        </action>
        <action type="fix" issue="COMMONSRDF-51">
            RDF-1.1 specifies that language tags need to be compared using lower-case
        </action>
        <action type="fix" issue="COMMONSRDF-52">
            Duplicate Bundle-SymbolicName values across all components
        </action>
        <action type="fix" issue="COMMONSRDF-55">
            Stream of Jena quads use wrong IRI for default graph
        </action>
        <action type="fix" issue="COMMONSRDF-57">
            Use newer dependency Jena/RDF4J/JSONLD Java
        </action>
        <action type="fix" issue="COMMONSRDF-62">
            japicmp-maven-plugin breaking build because there is at least one incompatibility
        </action>
        <action type="fix" issue="COMMONSRDF-63">
            AbstractRDFParserTest.parseFile and parseFileContentType broken under Mac OS X
        </action>
        <action type="fix" issue="COMMONSRDF-66">
            JenaDatasetImpl.toString() throws RIOT exception
        </action>
        <action type="add" issue="COMMONSRDF-53">
            Add ServiceLoader support in OSGi
        </action>
        <action type="add" issue="COMMONSRDF-54">
            overloaded versions of RDF4J#asRDFTerm(org.eclipse.rdf4j.model.Value)
        </action>
        <action type="add" issue="COMMONSRDF-59">
            Fix javadocs warnings
        </action>
        <action type="add" issue="COMMONSRDF-64">
            Add Automatic-Module-Name to bundle manifest
        </action>
        <action type="add" issue="COMMONSRDF-65">
            Upgrade to Jena 3.4.0, RDF4J 2.2.2
        </action>
        <action type="add" issue="COMMONSRDF-70">
            Upgrade Jena version to 3.5.0
        </action>
    </release>

    <release version="0.3.0-incubating" date="2016-11-15" description="Minor feature and bug fix release.">
      <!-- TODO -->
    </release>

    <release version="0.2.0-incubating" date="2016-09-27" description="Minor feature and bug fix release.">
      <!-- TODO -->
    </release>

    <release version="0.1.0-incubating" date="2016-08-24" description="Initial Release">
      <action type="add">
        Initial Release.
      </action>
    </release>

  </body>
</document>
