You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by st...@apache.org on 2017/02/10 16:55:03 UTC

[01/45] commons-rdf git commit: Add ServiceLoader support in OSGi

Repository: commons-rdf
Updated Branches:
  refs/heads/COMMONSRDF-47 a574473c0 -> 92998b329


Add ServiceLoader support in OSGi


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/27dbd9ed
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/27dbd9ed
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/27dbd9ed

Branch: refs/heads/COMMONSRDF-47
Commit: 27dbd9eda02550df85734c6198a0308cf5ca55e0
Parents: 0e1969a
Author: Aaron Coburn <ac...@amherst.edu>
Authored: Wed Jan 11 10:11:38 2017 -0500
Committer: Aaron Coburn <ac...@amherst.edu>
Committed: Wed Jan 11 13:21:36 2017 -0500

----------------------------------------------------------------------
 jena/pom.xml        | 19 +++++++++++++++----
 jsonld-java/pom.xml | 19 +++++++++++++++----
 rdf4j/pom.xml       |  7 +++----
 simple/pom.xml      | 19 +++++++++++++++----
 4 files changed, 48 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/27dbd9ed/jena/pom.xml
----------------------------------------------------------------------
diff --git a/jena/pom.xml b/jena/pom.xml
index d7a7c9e..c4d349e 100644
--- a/jena/pom.xml
+++ b/jena/pom.xml
@@ -33,10 +33,6 @@
 	<name>Commons RDF impl: Jena</name>
 	<description>Apache Jena implementation of Commons RDF API</description>
 
-  <properties>
-    <commons.osgi.symbolicName>org.apache.commons.rdf.jena</commons.osgi.symbolicName>
-  </properties>
-
     <distributionManagement>
       <site>
         <id>commonsrdf-api-site</id>
@@ -97,4 +93,19 @@
 		</dependency>
 	</dependencies>
 
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <configuration>
+          <instructions>
+            <Bundle-SymbolicName>org.apache.commons.rdf.jena</Bundle-SymbolicName>
+            <Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
+            <Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.apache.commons.rdf.api.RDF</Provide-Capability>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
 </project>

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/27dbd9ed/jsonld-java/pom.xml
----------------------------------------------------------------------
diff --git a/jsonld-java/pom.xml b/jsonld-java/pom.xml
index f65fcc5..39300f7 100644
--- a/jsonld-java/pom.xml
+++ b/jsonld-java/pom.xml
@@ -33,10 +33,6 @@
     <name>Commons RDF impl: JSON-LD Java</name>
     <description>Parser integration of JSON-LD Java</description>
 
-    <properties>
-      <commons.osgi.symbolicName>org.apache.commons.rdf.jsonldjava</commons.osgi.symbolicName>
-    </properties>
-
     <distributionManagement>
       <site>
         <id>commonsrdf-api-site</id>
@@ -70,4 +66,19 @@
         
     </dependencies>
 
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <configuration>
+          <instructions>
+            <Bundle-SymbolicName>org.apache.commons.rdf.jsonldjava</Bundle-SymbolicName>
+            <Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
+            <Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.apache.commons.rdf.api.RDF</Provide-Capability>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
 </project>

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/27dbd9ed/rdf4j/pom.xml
----------------------------------------------------------------------
diff --git a/rdf4j/pom.xml b/rdf4j/pom.xml
index 9e12625..5b1b6cc 100644
--- a/rdf4j/pom.xml
+++ b/rdf4j/pom.xml
@@ -33,10 +33,6 @@
 	<name>Commons RDF impl: RDF4j</name>
 	<description>Eclipse RDF4j implementation of Commons RDF API</description>
 
-  <properties>
-    <commons.osgi.symbolicName>org.apache.commons.rdf.rdf4j</commons.osgi.symbolicName>
-  </properties>
-
 	<build>
 		<plugins>
 			<plugin>
@@ -50,6 +46,9 @@
 
 						<Export-Package>org.apache.commons.rdf.rdf4j</Export-Package>
 						<Private-Package>org.apache.commons.rdf.rdf4j.impl</Private-Package>
+						<Bundle-SymbolicName>org.apache.commons.rdf.rdf4j</Bundle-SymbolicName>
+						<Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
+						<Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.apache.commons.rdf.api.RDF</Provide-Capability>
 					</instructions>
 				</configuration>
 			</plugin>

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/27dbd9ed/simple/pom.xml
----------------------------------------------------------------------
diff --git a/simple/pom.xml b/simple/pom.xml
index b0f2005..e1dc104 100644
--- a/simple/pom.xml
+++ b/simple/pom.xml
@@ -33,10 +33,6 @@
     <name>Commons RDF impl: Simple</name>
     <description>Simple (if not naive) implementation of Commons RDF API</description>
 
-    <properties>
-      <commons.osgi.symbolicName>org.apache.commons.rdf.simple</commons.osgi.symbolicName>
-    </properties>
-
     <distributionManagement>
       <site>
         <id>commonsrdf-api-site</id>
@@ -59,4 +55,19 @@
         </dependency>
     </dependencies>
 
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <configuration>
+          <instructions>
+            <Bundle-SymbolicName>org.apache.commons.rdf.simple</Bundle-SymbolicName>
+            <Require-Capability>osgi.extender; filter:="(osgi.extender=osgi.serviceloader.registrar)";resolution:=optional</Require-Capability>
+            <Provide-Capability>osgi.serviceloader; osgi.serviceloader=org.apache.commons.rdf.api.RDF</Provide-Capability>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
 </project>


[10/45] commons-rdf git commit: COMMONSRDF-51: Don't assume langtag case is preserved

Posted by st...@apache.org.
COMMONSRDF-51: Don't assume langtag case is preserved

also test .equals() both ways


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/7046ea1e
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/7046ea1e
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/7046ea1e

Branch: refs/heads/COMMONSRDF-47
Commit: 7046ea1e38a0da9b1c8ef8716ac7667fd96f7de7
Parents: 25cc1f1
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:20:30 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:20:30 2017 +0000

----------------------------------------------------------------------
 .../apache/commons/rdf/api/AbstractRDFTest.java | 124 ++++++++++++-------
 1 file changed, 79 insertions(+), 45 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/7046ea1e/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 52686d7..0032659 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -41,10 +41,10 @@ public abstract class AbstractRDFTest {
     private RDF factory;
 
     /**
-     * 
+     *
      * This method must be overridden by the implementing test to provide a
      * factory for the test to create {@link Literal}, {@link IRI} etc.
-     * 
+     *
      * @return {@link RDF} instance to be tested.
      */
     protected abstract RDF createFactory();
@@ -194,55 +194,67 @@ public abstract class AbstractRDFTest {
         assertEquals("\"Herbert Van de Sompel\"@vls", vls.ntriplesString());
     }
 
+
+    private void assertEqualsBothWays(Object a, Object b) {
+        assertEquals(a, b);
+        assertEquals(b, a);
+        // hashCode must match as well
+        assertEquals(a.hashCode(), b.hashCode());
+    }
+
     @Test
     public void testCreateLiteralLangCaseInsensitive() throws Exception {
-        // COMMONSRDF-51: Literal langtag may not be in lowercase, but
-        // must be COMPARED (aka .equals and .hashCode()) in lowercase
-        // as the language space is lower case.       
-        final Literal lower = factory.createLiteral("Hello", "en-gb"); 
-        final Literal upper = factory.createLiteral("Hello", "EN-GB"); 
+        /*
+         * COMMONSRDF-51: Literal langtag may not be in lowercase, but must be
+         * COMPARED (aka .equals and .hashCode()) in lowercase as the language
+         * space is lower case.
+         */
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
         final Literal mixed = factory.createLiteral("Hello", "en-GB");
 
-        
-        assertEquals("en-gb", lower.getLanguageTag().get());
-     
-        // NOTE: the RDF framework is free to lowercase the language tag 
-        // or leave it as-is, so we can't assume: 
         /*
-         assertEquals("en-gb", upper.getLanguageTag().get());
-         assertEquals("en-gb", mixed.getLanguageTag().get());
-        */
-        // ..unless we do a case-insensitive comparison:
+         * Disabled as some RDF frameworks (namely RDF4J) can be c configured to
+         * do BCP47 normalization (e.g. "en-GB"), so we can't guarantee
+         * lowercase language tags are preserved.
+         */
+        // assertEquals("en-gb", lower.getLanguageTag().get());
+
+        /*
+         * NOTE: the RDF framework is free to lowercase the language tag or
+         * leave it as-is, so we can't assume:
+         */
+        // assertEquals("en-gb", upper.getLanguageTag().get());
+        // assertEquals("en-gb", mixed.getLanguageTag().get());
+
+        /* ..unless we do a case-insensitive comparison: */
+        assertEquals("en-gb",
+                lower.getLanguageTag().get().toLowerCase(Locale.ROOT));
         assertEquals("en-gb",
                 upper.getLanguageTag().get().toLowerCase(Locale.ROOT));
         assertEquals("en-gb",
                 mixed.getLanguageTag().get().toLowerCase(Locale.ROOT));
-                
-        // However these should all be true
+
+        // However these should all be true using .equals
         assertEquals(lower, lower);
-        assertEquals(lower, upper);
-        assertEquals(lower, mixed);
-        assertEquals(upper, lower);
+        assertEqualsBothWays(lower, upper);
+        assertEqualsBothWays(lower, mixed);
         assertEquals(upper, upper);
-        assertEquals(upper, mixed);
-        assertEquals(mixed, lower);
-        assertEquals(mixed, upper);
+        assertEqualsBothWays(upper, mixed);
         assertEquals(mixed, mixed);
-
-        // And then by java.lang.Object contract, also the hashcode:
-        assertEquals(lower.hashCode(), upper.hashCode());
-        assertEquals(lower.hashCode(), mixed.hashCode());        
+        // Note that assertEqualsBothWays also checks
+        // that .hashCode() matches
     }
 
     @Test
     public void testCreateLiteralLangCaseInsensitiveOther() throws Exception {
         // COMMONSRDF-51: Ensure the Literal is using case insensitive
-        // comparison against more 'liberal' literal implementations
+        // comparison against any literal implementation
         // which may not have done .toLowerString() in their constructor
-        final Literal lower = factory.createLiteral("Hello", "en-gb"); 
-        final Literal upper = factory.createLiteral("Hello", "EN-GB"); 
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
         final Literal mixed = factory.createLiteral("Hello", "en-GB");
-        
+
         Literal otherLiteral = new Literal() {
             @Override
             public String ntriplesString() {
@@ -266,6 +278,8 @@ public abstract class AbstractRDFTest {
             }
         };
 
+        // NOTE: Our fake Literal can't do .equals() or .hashCode(),
+        // so don't check the wrong way around!
         assertEquals(mixed, otherLiteral);
         assertEquals(lower, otherLiteral);
         assertEquals(upper, otherLiteral);
@@ -273,36 +287,56 @@ public abstract class AbstractRDFTest {
 
     @Test
     public void testCreateLiteralLangCaseInsensitiveInTurkish() throws Exception {
-        // COMMONSRDF-51: Special test for Turkish issue where 
+        // COMMONSRDF-51: Special test for Turkish issue where
         // "i".toLowerCase() != "i"
         // See also:
         // https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
         Locale defaultLocale = Locale.getDefault();
-        try { 
+        try {
+            Locale.setDefault(Locale.ROOT);
+            final Literal lowerROOT = factory.createLiteral("moi", "fi");
+            final Literal upperROOT = factory.createLiteral("moi", "FI");
+            final Literal mixedROOT = factory.createLiteral("moi", "fI");
+
             Locale turkish = Locale.forLanguageTag("TR");
             Locale.setDefault(turkish);
+            // If the below assertion fails, then the Turkish
+            // locale no longer have this peculiarity that
+            // we want to test.
             Assume.assumeFalse("FI".toLowerCase().equals("fi"));
 
-            final Literal lower = factory.createLiteral("moi", "fi"); 
-            final Literal upper = factory.createLiteral("moi", "FI"); 
+            final Literal lower = factory.createLiteral("moi", "fi");
+            final Literal upper = factory.createLiteral("moi", "FI");
             final Literal mixed = factory.createLiteral("moi", "fI");
 
             assertEquals(lower, lower);
-            assertEquals(lower, upper);
-            assertEquals(lower, mixed);
-            assertEquals(upper, lower);
+            assertEqualsBothWays(lower, upper);
+            assertEqualsBothWays(lower, mixed);
+
             assertEquals(upper, upper);
-            assertEquals(upper, mixed);
-            assertEquals(mixed, lower);
-            assertEquals(mixed, upper);
+            assertEqualsBothWays(upper, mixed);
+
             assertEquals(mixed, mixed);
-            assertEquals(lower.hashCode(), upper.hashCode());
-            assertEquals(lower.hashCode(), mixed.hashCode());        
+
+            // And our instance created previously in ROOT locale
+            // should still be equal to the instance created in TR locale
+            // (e.g. test constructor is not doing a naive .toLowerCase())
+            assertEqualsBothWays(lower, lowerROOT);
+            assertEqualsBothWays(upper, lowerROOT);
+            assertEqualsBothWays(mixed, lowerROOT);
+
+            assertEqualsBothWays(lower, upperROOT);
+            assertEqualsBothWays(upper, upperROOT);
+            assertEqualsBothWays(mixed, upperROOT);
+
+            assertEqualsBothWays(lower, mixedROOT);
+            assertEqualsBothWays(upper, mixedROOT);
+            assertEqualsBothWays(mixed, mixedROOT);
         } finally {
             Locale.setDefault(defaultLocale);
         }
     }
-    
+
     @Test
     public void testCreateLiteralString() throws Exception {
         final Literal example = factory.createLiteral("Example",


[24/45] commons-rdf git commit: test cases for testing RDF4J#asRDF overloads

Posted by st...@apache.org.
test cases for testing RDF4J#asRDF overloads


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/1dd347ec
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/1dd347ec
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/1dd347ec

Branch: refs/heads/COMMONSRDF-47
Commit: 1dd347ec1be18d0c5d1e5f3e21f23229e912e452
Parents: ed787cf
Author: Guohui Xiao <gh...@gmail.com>
Authored: Fri Jan 27 15:27:50 2017 +0100
Committer: Guohui Xiao <gh...@gmail.com>
Committed: Fri Jan 27 15:27:50 2017 +0100

----------------------------------------------------------------------
 .../org/apache/commons/rdf/rdf4j/RDF4J.java     | 20 ++++++++++++
 .../rdf/rdf4j/RDF4JMethodOverloadsTest.java     | 33 ++++++++++++++++++++
 2 files changed, 53 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/1dd347ec/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
index 31002cb..44afa0a 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
@@ -37,6 +37,7 @@ import org.apache.commons.rdf.api.Triple;
 import org.apache.commons.rdf.api.TripleLike;
 import org.apache.commons.rdf.rdf4j.impl.InternalRDF4JFactory;
 import org.eclipse.rdf4j.model.BNode;
+import org.eclipse.rdf4j.model.IRI;
 import org.eclipse.rdf4j.model.Literal;
 import org.eclipse.rdf4j.model.Model;
 import org.eclipse.rdf4j.model.Resource;
@@ -286,6 +287,25 @@ public final class RDF4J implements RDF {
     }
 
     /**
+     *
+     * Adapt a RDF4J
+     * {@link org.eclipse.rdf4j.model.Resource} as a Commons RDF
+     * {@link org.apache.commons.rdf.api.BlankNodeOrIRI}
+     * <p>
+     * @param value
+     *            The RDF4J {@link Value} to convert.
+     * @return A {@link RDF4JBlankNodeOrIRI} that corresponds to the RDF4J Resource
+     */
+    public RDF4JBlankNodeOrIRI asRDFTerm(final org.eclipse.rdf4j.model.Resource value) {
+        if(value instanceof IRI){
+            return asRDFTerm((IRI)value);
+        } else if (value instanceof BNode){
+            return asRDFTerm((BNode)value);
+        }
+        throw new IllegalArgumentException("Value is not a BNode or IRI: " + value.getClass());
+    }
+
+    /**
      * Adapt a RDF4J {@link Value} as a Commons RDF {@link RDFTerm}.
      * <p>
      * The value will be of the same kind as the term, e.g. a

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/1dd347ec/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/RDF4JMethodOverloadsTest.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/RDF4JMethodOverloadsTest.java b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/RDF4JMethodOverloadsTest.java
new file mode 100644
index 0000000..eb6b5e9
--- /dev/null
+++ b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/RDF4JMethodOverloadsTest.java
@@ -0,0 +1,33 @@
+package org.apache.commons.rdf.rdf4j;
+
+import org.eclipse.rdf4j.model.BNode;
+import org.eclipse.rdf4j.model.IRI;
+import org.eclipse.rdf4j.model.Literal;
+import org.eclipse.rdf4j.model.Resource;
+import org.eclipse.rdf4j.model.Value;
+import org.eclipse.rdf4j.model.ValueFactory;
+import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class RDF4JMethodOverloadsTest {
+
+    @Test
+    public void testAsRDFTermOverloads() {
+        RDF4J rdf4J = new RDF4J();
+
+        final ValueFactory valueFactory = SimpleValueFactory.getInstance();
+
+        final Value bNode = valueFactory.createBNode("b1");
+        final Value iri = valueFactory.createIRI("http://ex.org");
+        final Value literal = valueFactory.createLiteral("b1");
+
+        assertEquals(rdf4J.asRDFTerm(bNode), rdf4J.asRDFTerm((BNode) bNode));
+        assertEquals(rdf4J.asRDFTerm(iri), rdf4J.asRDFTerm((IRI) iri));
+        assertEquals(rdf4J.asRDFTerm(literal), rdf4J.asRDFTerm((Literal) literal));
+        assertEquals(rdf4J.asRDFTerm(bNode), rdf4J.asRDFTerm((Resource) bNode));
+        assertEquals(rdf4J.asRDFTerm(iri), rdf4J.asRDFTerm((Resource) iri));
+    }
+}


[29/45] commons-rdf git commit: COMMONSRDF-55: More tests

Posted by st...@apache.org.
COMMONSRDF-55: More tests


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/98da22af
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/98da22af
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/98da22af

Branch: refs/heads/COMMONSRDF-47
Commit: 98da22af438a1c0eaadf3cac7cd5e80f285fea4b
Parents: bb26473
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 1 15:06:16 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 1 15:06:16 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/jena/impl/AbstractQuadLike.java |  9 +++--
 .../rdf/jena/DefaultGraphInQuadTest.java        | 41 +++++++++++++++++++-
 2 files changed, 46 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/98da22af/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
index 3100ae6..6127ee6 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
@@ -22,15 +22,12 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.UUID;
 
-import org.apache.commons.rdf.api.BlankNodeOrIRI;
-import org.apache.commons.rdf.api.IRI;
 import org.apache.commons.rdf.api.QuadLike;
 import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.jena.JenaQuad;
 import org.apache.commons.rdf.jena.JenaQuadLike;
 import org.apache.commons.rdf.jena.JenaRDF;
 import org.apache.commons.rdf.jena.JenaTriple;
-import org.apache.jena.graph.Factory;
 import org.apache.jena.graph.Triple;
 import org.apache.jena.sparql.core.Quad;
 
@@ -57,6 +54,12 @@ abstract class AbstractQuadLike<S extends RDFTerm, P extends RDFTerm, O extends
 
     /**
      * COMMONSRDF-55 - special handling of urn:x-arq:DefaultGraph and friends
+     * <p>
+     * This can recognize <urn:x-arq:DefaultGraph> and
+     * <urn:x-arq:DefaultGraphNode> from any IRI instance, so they can be
+     * replaced with Optional.empty(). Note that this code does not hardcode the
+     * internal Jena IRIs but uses Jena's constants {@link Quad#defaultGraphIRI}
+     * and {@link Quad#defaultGraphNodeGenerated}.
      */
     private static class DefaultGraphChecker {
         // Fixed UUID for comparison of defaultGraphNodeGenerated

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/98da22af/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java
----------------------------------------------------------------------
diff --git a/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java b/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java
index 739d7a4..477f460 100644
--- a/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java
+++ b/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.simple.SimpleRDF;
 import org.apache.jena.graph.Node;
 import org.apache.jena.graph.NodeFactory;
 import org.apache.jena.sparql.core.Quad;
@@ -53,6 +54,42 @@ public class DefaultGraphInQuadTest {
         assertEquals(Quad.defaultGraphIRI,  q.asJenaQuad().getGraph());
         assertFalse(q.getGraphName().isPresent());
     }
+
+    @Test
+    public void createFromForeignDefaultGraph() throws Exception {
+        // What if <urn:x-arq:DefaultGraph> appear in a non-Jena IRI?
+        IRI foreignDefaultGraph = new SimpleRDF().createIRI(Quad.defaultGraphIRI.getURI());
+        JenaQuad q = rdf.createQuad(foreignDefaultGraph, example, example, example);
+        assertTrue(q.asJenaQuad().isDefaultGraph());
+        assertEquals(Quad.defaultGraphIRI,  q.asJenaQuad().getGraph());
+        assertFalse(q.getGraphName().isPresent());
+    }
+    
+
+    @Test
+    public void createFromDefaultGraphNodeGeneratedIRINode() throws Exception {
+        // What if <urn:x-arq:DefaultGraphNode> appear as an IRI instance?
+        IRI foreignDefaultGraph = rdf.createIRI(Quad.defaultGraphNodeGenerated.getURI());
+        JenaQuad q = rdf.createQuad(foreignDefaultGraph, example, example, example);
+        assertTrue(q.asJenaQuad().isDefaultGraph());
+        assertFalse(q.getGraphName().isPresent());
+        // Unfortunately  Quad.defaultGraphNodeGenerated is not preserved
+        // within JenaQuad
+        //assertEquals(Quad.defaultGraphNodeGenerated, q.asJenaQuad().getGraph());
+    }
+
+    @Test
+    public void createFromDefaultGraphNodeGeneratedIRIString() throws Exception {
+        // What if <urn:x-arq:DefaultGraphNode> appear in a non-Jena IRI?
+        IRI foreignDefaultGraph = (IRI) rdf.asRDFTerm((Quad.defaultGraphNodeGenerated));
+        JenaQuad q = rdf.createQuad(foreignDefaultGraph, example, example, example);
+        assertTrue(q.asJenaQuad().isDefaultGraph());
+        assertFalse(q.getGraphName().isPresent());
+        // Unfortunately  Quad.defaultGraphNodeGenerated is not preserved
+        // within JenaQuad
+        assertEquals(Quad.defaultGraphNodeGenerated, q.asJenaQuad().getGraph());
+    }
+
     
     @Test
     public void defaultGraphIRI() throws Exception {
@@ -64,11 +101,13 @@ public class DefaultGraphInQuadTest {
 
     @Test
     public void defaultGraphNodeGenerated() throws Exception {        
-        // defaultGraphNodeGenerated might appear in parser output
+        // <urn:x-arq:DefaultGraphNode> might appear in parser output
         Quad jenaQuad = Quad.create(Quad.defaultGraphNodeGenerated, exampleJena, exampleJena, exampleJena);
         JenaQuad q = rdf.asQuad(jenaQuad);        
         assertFalse(q.getGraphName().isPresent());
         assertTrue(q.asJenaQuad().isDefaultGraph());
+        // Preserves <urn:x-arq:DefaultGraphNode>
+        assertEquals(Quad.defaultGraphNodeGenerated, q.asJenaQuad().getGraph());
     }
 
     @Test


[44/45] commons-rdf git commit: hard-coded scmPubUrl

Posted by st...@apache.org.
hard-coded scmPubUrl

.. to avoid proper/commons-rdf-parent etc


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/f6ea0583
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/f6ea0583
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/f6ea0583

Branch: refs/heads/COMMONSRDF-47
Commit: f6ea058326d1d421d99ce81e7fb415e8556f81d0
Parents: b1a3115
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Feb 9 01:51:51 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Feb 9 01:51:51 2017 +0000

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/f6ea0583/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index ae6dc43..9294937 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,8 +49,8 @@
         <commons.jira.id>COMMONSRDF</commons.jira.id>
         <commons.jira.pid>12316620</commons.jira.pid>
         <commons.site.path>rdf</commons.site.path>
+	<commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-rdf/</commons.scmPubUrl>
     <!--
-        <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commonsrdf/content/</commons.scmPubUrl>
         <commons.scmPubCheckoutDirectory>${project.build.directory}/site-content</commons.scmPubCheckoutDirectory>
         -->
         <commons.javadoc.java.link>https://docs.oracle.com/javase/8/docs/api/</commons.javadoc.java.link>


[39/45] commons-rdf git commit: COMMONSRDF-51: Avoid wrong matches of "Hello" across tests

Posted by st...@apache.org.
COMMONSRDF-51: Avoid wrong matches of "Hello" across tests


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/dc4af99f
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/dc4af99f
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/dc4af99f

Branch: refs/heads/COMMONSRDF-47
Commit: dc4af99f2d18fd90993c3b040addcc5aaf98cb5b
Parents: 944188b
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 14:57:45 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 14:58:04 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/api/AbstractDatasetTest.java      | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/dc4af99f/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
index 71f2415..ab3dc32 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
@@ -592,9 +592,9 @@ public abstract class AbstractDatasetTest {
     public void containsLanguageTagsCaseInsensitive() {
         // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
         // of literal language tag
-        final Literal lower = factory.createLiteral("Hello", "en-gb");
-        final Literal upper = factory.createLiteral("Hello", "EN-GB");
-        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+        final Literal lower = factory.createLiteral("Hello there", "en-gb");
+        final Literal upper = factory.createLiteral("Hello there", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello there", "en-GB");
 
         final IRI example1 = factory.createIRI("http://example.com/s1");
         final IRI greeting = factory.createIRI("http://example.com/greeting");
@@ -676,9 +676,9 @@ public abstract class AbstractDatasetTest {
     public void removeLanguageTagsCaseInsensitive() {
         // COMMONSRDF-51: Ensure we can remove with any casing
         // of literal language tag
-        final Literal lower = factory.createLiteral("Hello", "en-gb");
-        final Literal upper = factory.createLiteral("Hello", "EN-GB");
-        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+        final Literal lower = factory.createLiteral("Howdy", "en-us");
+        final Literal upper = factory.createLiteral("Howdy", "EN-US");
+        final Literal mixed = factory.createLiteral("Howdy", "en-US");
 
         final IRI example1 = factory.createIRI("http://example.com/s1");
         final IRI greeting = factory.createIRI("http://example.com/greeting");
@@ -708,9 +708,9 @@ public abstract class AbstractDatasetTest {
     public void streamLanguageTagsCaseInsensitive() {
         // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
         // of literal language tag
-        final Literal lower = factory.createLiteral("Hello", "en-gb");
-        final Literal upper = factory.createLiteral("Hello", "EN-GB");
-        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+        final Literal lower = factory.createLiteral("Good afternoon", "en-gb");
+        final Literal upper = factory.createLiteral("Good afternoon", "EN-GB");
+        final Literal mixed = factory.createLiteral("Good afternoon", "en-GB");
 
         final IRI example1 = factory.createIRI("http://example.com/s1");
         final IRI greeting = factory.createIRI("http://example.com/greeting");


[27/45] commons-rdf git commit: COMMONSRDF-54: Added ASF header

Posted by st...@apache.org.
COMMONSRDF-54: Added ASF header


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/5e2430ff
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/5e2430ff
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/5e2430ff

Branch: refs/heads/COMMONSRDF-47
Commit: 5e2430ff91a173cc0b4e175342383e039b044bd8
Parents: 69264f1
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jan 27 16:08:28 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jan 27 16:08:28 2017 +0000

----------------------------------------------------------------------
 .../rdf/rdf4j/RDF4JMethodOverloadsTest.java        | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/5e2430ff/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/RDF4JMethodOverloadsTest.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/RDF4JMethodOverloadsTest.java b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/RDF4JMethodOverloadsTest.java
index eb6b5e9..10762e8 100644
--- a/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/RDF4JMethodOverloadsTest.java
+++ b/rdf4j/src/test/java/org/apache/commons/rdf/rdf4j/RDF4JMethodOverloadsTest.java
@@ -1,3 +1,20 @@
+/**
+ * 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.
+ */
 package org.apache.commons.rdf.rdf4j;
 
 import org.eclipse.rdf4j.model.BNode;


[45/45] commons-rdf git commit: Merge remote-tracking branch 'origin/master' into COMMONSRDF-47

Posted by st...@apache.org.
Merge remote-tracking branch 'origin/master' into COMMONSRDF-47


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/92998b32
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/92998b32
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/92998b32

Branch: refs/heads/COMMONSRDF-47
Commit: 92998b329182724789f44272f60538dc195b8df3
Parents: a574473 f6ea058
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Feb 10 16:54:53 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Feb 10 16:54:53 2017 +0000

----------------------------------------------------------------------
 MATURITY.md                                     |  20 ++
 .../org/apache/commons/rdf/api/Literal.java     |  27 +-
 .../commons/rdf/api/AbstractDatasetTest.java    | 184 ++++++++++++
 .../commons/rdf/api/AbstractGraphTest.java      | 153 +++++++++-
 .../apache/commons/rdf/api/AbstractRDFTest.java | 158 +++++++++-
 integration-tests/pom.xml                       |   3 +-
 .../rdf/integrationtests/JSONLDParsingTest.java | 164 +++++++++++
 .../src/test/resources/alice-cached.jsonld      |   9 +
 .../src/test/resources/alice-embedded.jsonld    |  16 +
 .../src/test/resources/contexts/example.jsonld  |  11 +
 .../src/test/resources/jarcache.json            |  10 +
 jena/pom.xml                                    |  19 +-
 .../org/apache/commons/rdf/jena/JenaRDF.java    |  32 ++
 .../commons/rdf/jena/impl/AbstractQuadLike.java |  70 ++++-
 .../rdf/jena/impl/InternalJenaFactory.java      |   2 +-
 .../commons/rdf/jena/impl/JenaDatasetImpl.java  |   7 +-
 .../commons/rdf/jena/impl/JenaGraphImpl.java    |  18 +-
 .../commons/rdf/jena/impl/JenaLiteralImpl.java  |  13 +-
 .../rdf/jena/DefaultGraphInQuadTest.java        | 136 +++++++++
 .../rdf/jena/GeneralizedRDFQuadTest.java        | 127 ++++++++
 .../rdf/jena/GeneralizedRDFTripleTest.java      |  85 ++++++
 .../apache/commons/rdf/jena/JenaRDFTest.java    |   1 -
 jsonld-java/pom.xml                             |  19 +-
 .../commons/rdf/jsonldjava/JsonLdGraphLike.java |  18 +-
 .../commons/rdf/jsonldjava/JsonLdLiteral.java   |  23 +-
 .../commons/rdf/jsonldjava/JsonLdQuadLike.java  |   5 +
 .../rdf/jsonldjava/JsonLdComparisonTest.java    | 141 +++++++++
 pom.xml                                         | 289 ++++++++++---------
 rdf4j/pom.xml                                   |   7 +-
 .../org/apache/commons/rdf/rdf4j/RDF4J.java     |  85 +++++-
 .../commons/rdf/rdf4j/impl/LiteralImpl.java     |  15 +-
 .../rdf/rdf4j/RDF4JMethodOverloadsTest.java     |  50 ++++
 simple/pom.xml                                  |  19 +-
 .../apache/commons/rdf/simple/LiteralImpl.java  |   8 +-
 src/site/markdown/introduction.md               |  20 ++
 35 files changed, 1747 insertions(+), 217 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/92998b32/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDF.java
----------------------------------------------------------------------


[42/45] commons-rdf git commit: ASF headers in Markdown

Posted by st...@apache.org.
ASF headers in Markdown


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/df6c1a25
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/df6c1a25
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/df6c1a25

Branch: refs/heads/COMMONSRDF-47
Commit: df6c1a254f9b76789313148396c4e0eacafdcdcc
Parents: 42a32b4
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Feb 9 00:20:54 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Feb 9 00:20:54 2017 +0000

----------------------------------------------------------------------
 MATURITY.md                       | 20 ++++++++++++++++++++
 src/site/markdown/introduction.md | 20 ++++++++++++++++++++
 2 files changed, 40 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/df6c1a25/MATURITY.md
----------------------------------------------------------------------
diff --git a/MATURITY.md b/MATURITY.md
index 9b07ddb..8df30c7 100644
--- a/MATURITY.md
+++ b/MATURITY.md
@@ -1,3 +1,23 @@
+<!--
+
+    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.
+
+-->
+
 # Commons RDF Project Maturity Report
 
 This is a report of Commons RDF following the

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/df6c1a25/src/site/markdown/introduction.md
----------------------------------------------------------------------
diff --git a/src/site/markdown/introduction.md b/src/site/markdown/introduction.md
index 073fe2b..f0250b0 100644
--- a/src/site/markdown/introduction.md
+++ b/src/site/markdown/introduction.md
@@ -1,3 +1,23 @@
+<!--
+
+    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.
+
+-->
+
 # Introduction to RDF using Commons RDF
 
 This page is a tutorial to introduce programming with the


[34/45] commons-rdf git commit: COMMONSRDF-55: Test asGeneralizedQuad() with default graph

Posted by st...@apache.org.
COMMONSRDF-55: Test asGeneralizedQuad() with default graph

Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/8dd1c430
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/8dd1c430
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/8dd1c430

Branch: refs/heads/COMMONSRDF-47
Commit: 8dd1c4302c088abac74855a84b180e85d84f7410
Parents: c90bafe
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 14:37:19 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 14:37:19 2017 +0000

----------------------------------------------------------------------
 .../rdf/jena/GeneralizedRDFQuadTest.java        | 21 +++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/8dd1c430/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java
----------------------------------------------------------------------
diff --git a/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java b/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java
index 1e183d3..aa81cf5 100644
--- a/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java
+++ b/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java
@@ -17,11 +17,12 @@
  */
 package org.apache.commons.rdf.jena;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 import org.apache.commons.rdf.api.BlankNode;
+import org.apache.commons.rdf.api.RDFTerm;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.NodeFactory;
 import org.apache.jena.sparql.core.Quad;
 import org.junit.Test;
 
@@ -92,6 +93,19 @@ public class GeneralizedRDFQuadTest {
         assertTrue(q.asJenaQuad().isDefaultGraph());
     }
 
+    @Test
+    public void asGeneralizedQuad() throws Exception {
+        Node s = NodeFactory.createLiteral("Hello");
+        Node p = NodeFactory.createBlankNode();
+        Node o = NodeFactory.createURI("http://example.com/ex");
+        Node g = Quad.defaultGraphIRI;
+        Quad jq = Quad.create(g, s, p, o);
+        JenaQuadLike<RDFTerm> q = jena.asGeneralizedQuad(jq);
+        assertEquals(jena.createLiteral("Hello"), q.getSubject());
+        assertEquals(jena.asRDFTerm(p), q.getPredicate());
+        assertEquals(jena.createIRI("http://example.com/ex"), q.getObject());
+        assertFalse(q.getGraphName().isPresent());
+    }
     
     @Test
     public void literalGraph() throws Exception {
@@ -109,4 +123,5 @@ public class GeneralizedRDFQuadTest {
     }
     
     
+    
 }


[36/45] commons-rdf git commit: COMMONSRDF-55: Support Jena's urn:x-arq:DefaultGraph and friends

Posted by st...@apache.org.
COMMONSRDF-55: Support Jena's urn:x-arq:DefaultGraph and friends

Jena uses the IRIs <urn:x-arq:DefaultGraph> and
<urn:x-arq:DefaultGraphNode> to represent the default graph, not null.

This code recognize these specially so they appear in
Commons RDF land as quad.getGraphName() == Optional.empty()
rather than as IRIs (but only if adapted from a JenaIRI or Jena Quad)


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/6d4e333d
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/6d4e333d
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/6d4e333d

Branch: refs/heads/COMMONSRDF-47
Commit: 6d4e333d9398c1f7533a4e20a5768eada97a4ea6
Parents: 5e2430f 7183369
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 14:40:03 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 14:40:03 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/api/AbstractDatasetTest.java    |  45 ++++++
 .../org/apache/commons/rdf/jena/JenaRDF.java    |  32 +++++
 .../commons/rdf/jena/impl/AbstractQuadLike.java |  70 +++++++++-
 .../rdf/jena/impl/InternalJenaFactory.java      |   2 +-
 .../rdf/jena/DefaultGraphInQuadTest.java        | 136 +++++++++++++++++++
 .../rdf/jena/GeneralizedRDFQuadTest.java        | 127 +++++++++++++++++
 .../rdf/jena/GeneralizedRDFTripleTest.java      |  85 ++++++++++++
 .../apache/commons/rdf/jena/JenaRDFTest.java    |   1 -
 8 files changed, 491 insertions(+), 7 deletions(-)
----------------------------------------------------------------------



[13/45] commons-rdf git commit: COMMONSRDF-51: Use patterns for remove/contains

Posted by st...@apache.org.
COMMONSRDF-51: Use patterns for remove/contains


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/c729469a
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/c729469a
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/c729469a

Branch: refs/heads/COMMONSRDF-47
Commit: c729469aed46349b927d4038e67ff4fb5fa8ebd2
Parents: 448c20b
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:50:23 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:50:23 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/api/AbstractGraphTest.java    | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/c729469a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index eba8888..e18ca08 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -410,7 +410,8 @@ public abstract class AbstractGraphTest {
         assertTrue(graph.contains(null, null, mixed));
 
         // Remove should also honour any case
-        graph.remove(example1, greeting, mixed);
+        graph.remove(example1, null, mixed);
+        // no more greetings of any kind
         assertFalse(graph.contains(null, greeting, null));
     }
 
@@ -460,7 +461,8 @@ public abstract class AbstractGraphTest {
             assertTrue(g.contains(exampleTR, null, lowerROOT));
             assertTrue(g.contains(exampleTR, null, mixed));
             assertTrue(g.contains(exampleTR, null, mixedROOT));
-            g.remove(exampleTR, greeting, mixed);
+            g.remove(exampleTR, null, mixed);
+            // No more greetings for exampleTR
             assertFalse(g.contains(exampleTR, null, null));
 
             // What about the triple we added while in ROOT locale?
@@ -470,8 +472,9 @@ public abstract class AbstractGraphTest {
             assertTrue(g.contains(exampleROOT, null, upper));
             assertTrue(g.contains(exampleROOT, null, lower));
             assertTrue(g.contains(exampleROOT, null, mixed));
-            g.remove(exampleROOT, greeting, mixed);
-            assertFalse(g.contains(exampleROOT, null, null));
+            g.remove(exampleROOT, null, mixed);
+            // No more greetings of any kind
+            assertFalse(g.contains(null, null, null));
 
 
         } finally {


[12/45] commons-rdf git commit: Ensure we don't create @en-gb first with the factory (in case it caches)

Posted by st...@apache.org.
Ensure we don't create @en-gb first with the factory (in case it caches)


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/448c20b1
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/448c20b1
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/448c20b1

Branch: refs/heads/COMMONSRDF-47
Commit: 448c20b1fe9241ffcd3955c235db0c35d24bb940
Parents: 50dc886
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:50:05 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:50:05 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/api/AbstractRDFTest.java     | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/448c20b1/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 0032659..bb4dc5b 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -209,8 +209,8 @@ public abstract class AbstractRDFTest {
          * COMPARED (aka .equals and .hashCode()) in lowercase as the language
          * space is lower case.
          */
-        final Literal lower = factory.createLiteral("Hello", "en-gb");
         final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
         final Literal mixed = factory.createLiteral("Hello", "en-GB");
 
         /*
@@ -251,14 +251,14 @@ public abstract class AbstractRDFTest {
         // COMMONSRDF-51: Ensure the Literal is using case insensitive
         // comparison against any literal implementation
         // which may not have done .toLowerString() in their constructor
-        final Literal lower = factory.createLiteral("Hello", "en-gb");
         final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
         final Literal mixed = factory.createLiteral("Hello", "en-GB");
 
         Literal otherLiteral = new Literal() {
             @Override
             public String ntriplesString() {
-                return "Hello@en-GB";
+                return "Hello@eN-Gb";
             }
             @Override
             public String getLexicalForm() {
@@ -266,7 +266,7 @@ public abstract class AbstractRDFTest {
             }
             @Override
             public Optional<String> getLanguageTag() {
-                return Optional.of("en-GB");
+                return Optional.of("eN-Gb");
             }
             @Override
             public IRI getDatatype() {
@@ -294,9 +294,9 @@ public abstract class AbstractRDFTest {
         Locale defaultLocale = Locale.getDefault();
         try {
             Locale.setDefault(Locale.ROOT);
+            final Literal mixedROOT = factory.createLiteral("moi", "fI");
             final Literal lowerROOT = factory.createLiteral("moi", "fi");
             final Literal upperROOT = factory.createLiteral("moi", "FI");
-            final Literal mixedROOT = factory.createLiteral("moi", "fI");
 
             Locale turkish = Locale.forLanguageTag("TR");
             Locale.setDefault(turkish);
@@ -305,9 +305,9 @@ public abstract class AbstractRDFTest {
             // we want to test.
             Assume.assumeFalse("FI".toLowerCase().equals("fi"));
 
+            final Literal mixed = factory.createLiteral("moi", "fI");
             final Literal lower = factory.createLiteral("moi", "fi");
             final Literal upper = factory.createLiteral("moi", "FI");
-            final Literal mixed = factory.createLiteral("moi", "fI");
 
             assertEquals(lower, lower);
             assertEqualsBothWays(lower, upper);


[16/45] commons-rdf git commit: COMMONSRDF-51: Ensure RDF4J stream closes in test

Posted by st...@apache.org.
COMMONSRDF-51: Ensure RDF4J stream closes in test


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/d5964a19
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/d5964a19
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/d5964a19

Branch: refs/heads/COMMONSRDF-47
Commit: d5964a19b274d60a0301680961dce087641623ce
Parents: f5766fe
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 12:10:32 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 12:10:32 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/api/AbstractGraphTest.java | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/d5964a19/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 4856ed4..8245b5d 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -495,6 +495,12 @@ public abstract class AbstractGraphTest {
         graph.remove(factory.createTriple(example1, greeting, upper));
     }
 
+    private static Optional<? extends Triple> closableFindAny(Stream<? extends Triple> stream) {
+        try (Stream<? extends Triple> s = stream) {
+            return s.findAny();
+        }
+    }
+    
     @Test
     public void streamLanguageTagsCaseInsensitive() {
         // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
@@ -510,12 +516,12 @@ public abstract class AbstractGraphTest {
         graph.add(example1, greeting, upper);
 
         // or as patterns
-        assertTrue(graph.stream(null, null, upper).findAny().isPresent());
-        assertTrue(graph.stream(null, null, lower).findAny().isPresent());
-        assertTrue(graph.stream(null, null, mixed).findAny().isPresent());
+        assertTrue(closableFindAny(graph.stream(null, null, upper)).isPresent());
+        assertTrue(closableFindAny(graph.stream(null, null, lower)).isPresent());
+        assertTrue(closableFindAny(graph.stream(null, null, mixed)).isPresent());
         
         // Check the triples returned equal a new triple
-        Triple t = graph.stream(null, null, lower).findAny().get();
+        Triple t = closableFindAny(graph.stream(null, null, lower)).get();
         assertEquals(t, factory.createTriple(example1, greeting, mixed));
     }
 


[07/45] commons-rdf git commit: fixed indentation

Posted by st...@apache.org.
fixed indentation


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/edb7d801
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/edb7d801
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/edb7d801

Branch: refs/heads/COMMONSRDF-47
Commit: edb7d80114696b5c4c23078ecd03f20515fc4f27
Parents: b9d6751
Author: Sergio Fern�ndez <wi...@apache.org>
Authored: Tue Jan 17 11:49:39 2017 +0100
Committer: Sergio Fern�ndez <wi...@apache.org>
Committed: Tue Jan 17 11:49:39 2017 +0100

----------------------------------------------------------------------
 pom.xml | 226 ++++++++++++++++++++++++++++-------------------------------
 1 file changed, 109 insertions(+), 117 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/edb7d801/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index d89cafc..9d7846c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -240,22 +240,22 @@
     Common dependencies across modules. 
     Keep this list small and only <scope>test</scope> !
     -->
-        <dependencies>
-            <dependency>
-                <groupId>junit</groupId>
-                <artifactId>junit</artifactId>
-                <version>${junit.version}</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <!-- System.err logging for Jena, JSONLD-Java, RDF4J 
-                -->
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-simple</artifactId>
-                <version>${slf4j.version}</version>
-                <scope>test</scope>
-            </dependency>
-        </dependencies>
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>${junit.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <!-- System.err logging for Jena, JSONLD-Java, RDF4J
+            -->
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 
     <build>
         <plugins>
@@ -350,21 +350,19 @@
                 <artifactId>coveralls-maven-plugin</artifactId>
                 <version>4.2.0</version>
             </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>jdepend-maven-plugin</artifactId>
-        <version>${commons.jdepend.version}</version>
-        <dependencies>
-            <!-- Forked jdepend https://github.com/nidi3/jdepend supports Java 8 -->
-            <dependency>
-              <groupId>guru.nidi</groupId>
-              <artifactId>jdepend</artifactId>
-              <version>2.9.5</version>
-            </dependency>
-        </dependencies>
-      </plugin>
-
-
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>jdepend-maven-plugin</artifactId>
+                <version>${commons.jdepend.version}</version>
+                <dependencies>
+                    <!-- Forked jdepend https://github.com/nidi3/jdepend supports Java 8 -->
+                    <dependency>
+                      <groupId>guru.nidi</groupId>
+                      <artifactId>jdepend</artifactId>
+                      <version>2.9.5</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-site-plugin</artifactId>
@@ -489,91 +487,86 @@
         </pluginManagement>
     </build>
     <reporting>
-
-      <plugins>
-        <plugin>
-             <groupId>org.apache.maven.plugins</groupId>
-             <artifactId>maven-javadoc-plugin</artifactId>
-             <configuration>
-                 <additionalparam>-Xdoclint:all</additionalparam>
-             </configuration>
-             <reportSets>
-               <reportSet><!-- by default, id = "default" -->
-                 <reports><!-- select non-aggregate reports -->
-                   <report>javadoc</report>
-                   <report>test-javadoc</report>
-                 </reports>
-               </reportSet>
-               <reportSet><!-- aggregate reportSet, to define in poms having modules -->
-                 <id>aggregate</id>
-                 <inherited>false</inherited><!-- don't run aggregate in child modules -->
-                 <reports>
-                   <report>aggregate</report>
-                 </reports>
-               </reportSet>
-             </reportSets>
-         </plugin>
-  <plugin>
-    <groupId>org.apache.maven.plugins</groupId>
-    <artifactId>maven-checkstyle-plugin</artifactId>
-    <version>${checkstyle.plugin.version}</version>
-        <configuration>
-          <configLocation>${project.basedir}/src/conf/checkstyle.xml</configLocation>
-          <!-- Needed to define config_loc -->
-          <propertyExpansion>config_loc=${project.basedir}</propertyExpansion>
-          <enableRulesSummary>false</enableRulesSummary>
-        </configuration>
-        <reportSets>
-          <reportSet>
-            <reports>
-              <report>checkstyle-aggregate</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-  </plugin>
-
-<plugin>
-  <artifactId>maven-pmd-plugin</artifactId>
-          <version>3.6</version>
-          <configuration>
-            <targetJdk>${maven.compiler.target}</targetJdk>
-            <linkXref>true</linkXref>
-          </configuration>
-          <reportSets>
-            <reportSet>
-              <id>pmd-report</id>
-              <reports>
-                <report>pmd</report>
-              </reports>
-            </reportSet>
-            <reportSet>
-              <id>pmd-aggregate</id>
-              <inherited>false</inherited>
-              <reports>
-                <report>pmd</report>
-              </reports>
-              <configuration>
-                <aggregate>true</aggregate>
-              </configuration>
-            </reportSet>
-          </reportSets>
-        </plugin>
-
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>findbugs-maven-plugin</artifactId>
-        <version>${commons.findbugs.version}</version>
-        <configuration>
-          <threshold>Normal</threshold>
-          <effort>Default</effort>
-          <excludeFilterFile>src/conf/findbugs-exclude-filter.xml</excludeFilterFile>
-          <fork>true</fork>
-          <jvmArgs>-Duser.language=en</jvmArgs>
-        </configuration>
-      </plugin>
-
-</plugins>
-
+        <plugins>
+            <plugin>
+                 <groupId>org.apache.maven.plugins</groupId>
+                 <artifactId>maven-javadoc-plugin</artifactId>
+                 <configuration>
+                     <additionalparam>-Xdoclint:all</additionalparam>
+                 </configuration>
+                 <reportSets>
+                   <reportSet><!-- by default, id = "default" -->
+                     <reports><!-- select non-aggregate reports -->
+                       <report>javadoc</report>
+                       <report>test-javadoc</report>
+                     </reports>
+                   </reportSet>
+                   <reportSet><!-- aggregate reportSet, to define in poms having modules -->
+                     <id>aggregate</id>
+                     <inherited>false</inherited><!-- don't run aggregate in child modules -->
+                     <reports>
+                       <report>aggregate</report>
+                     </reports>
+                   </reportSet>
+                 </reportSets>
+             </plugin>
+             <plugin>
+                 <groupId>org.apache.maven.plugins</groupId>
+                 <artifactId>maven-checkstyle-plugin</artifactId>
+                 <version>${checkstyle.plugin.version}</version>
+                 <configuration>
+                     <configLocation>${project.basedir}/src/conf/checkstyle.xml</configLocation>
+                     <!-- Needed to define config_loc -->
+                     <propertyExpansion>config_loc=${project.basedir}</propertyExpansion>
+                     <enableRulesSummary>false</enableRulesSummary>
+                 </configuration>
+                 <reportSets>
+                     <reportSet>
+                         <reports>
+                             <report>checkstyle-aggregate</report>
+                         </reports>
+                     </reportSet>
+                 </reportSets>
+             </plugin>
+            <plugin>
+                <artifactId>maven-pmd-plugin</artifactId>
+                <version>3.6</version>
+                <configuration>
+                    <targetJdk>${maven.compiler.target}</targetJdk>
+                    <linkXref>true</linkXref>
+                </configuration>
+                <reportSets>
+                    <reportSet>
+                        <id>pmd-report</id>
+                        <reports>
+                            <report>pmd</report>
+                        </reports>
+                    </reportSet>
+                    <reportSet>
+                        <id>pmd-aggregate</id>
+                        <inherited>false</inherited>
+                        <reports>
+                            <report>pmd</report>
+                        </reports>
+                        <configuration>
+                            <aggregate>true</aggregate>
+                        </configuration>
+                    </reportSet>
+                </reportSets>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>findbugs-maven-plugin</artifactId>
+                <version>${commons.findbugs.version}</version>
+                <configuration>
+                    <threshold>Normal</threshold>
+                    <effort>Default</effort>
+                    <excludeFilterFile>src/conf/findbugs-exclude-filter.xml</excludeFilterFile>
+                    <fork>true</fork>
+                    <jvmArgs>-Duser.language=en</jvmArgs>
+                </configuration>
+            </plugin>
+        </plugins>
     </reporting>
 
     <profiles>
@@ -602,7 +595,6 @@
         </profile>
     </profiles>
 
-
     <distributionManagement>
       <site>
         <id>commonsrdf-site</id>


[04/45] commons-rdf git commit: updated @stain role

Posted by st...@apache.org.
updated @stain role


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/b3a013f7
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/b3a013f7
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/b3a013f7

Branch: refs/heads/COMMONSRDF-47
Commit: b3a013f76520b55eb9d57d3d1a90293d5ba9d3ac
Parents: 3887517
Author: Sergio Fern�ndez <wi...@apache.org>
Authored: Tue Jan 17 08:26:26 2017 +0100
Committer: Sergio Fern�ndez <wi...@apache.org>
Committed: Tue Jan 17 08:26:26 2017 +0100

----------------------------------------------------------------------
 pom.xml | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/b3a013f7/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 6765b1f..36d0ba0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -133,6 +133,7 @@
             <url>http://orcid.org/0000-0001-9842-9718</url>
             <roles>
                 <role>Committer</role>
+                <role>PMC Member</role>
                 <role>Emeritus PPMC Member</role>
             </roles>
             <timezone>+0</timezone>


[28/45] commons-rdf git commit: COMMONSRDF-55: Handle Jena's urn:x-arq:DefaultGraph and friends

Posted by st...@apache.org.
COMMONSRDF-55: Handle Jena's urn:x-arq:DefaultGraph and friends


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/bb264738
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/bb264738
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/bb264738

Branch: refs/heads/COMMONSRDF-47
Commit: bb264738aa0e3c3a8e9ae8bba0d7109cfb59adaa
Parents: 5e2430f
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jan 27 17:26:59 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jan 27 17:26:59 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/api/AbstractDatasetTest.java    | 45 +++++++++++
 .../commons/rdf/jena/impl/AbstractQuadLike.java | 39 +++++++--
 .../rdf/jena/impl/InternalJenaFactory.java      |  2 +-
 .../rdf/jena/DefaultGraphInQuadTest.java        | 85 ++++++++++++++++++++
 .../apache/commons/rdf/jena/JenaRDFTest.java    |  1 -
 5 files changed, 165 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/bb264738/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
index 505994f..edde127 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
@@ -158,8 +158,53 @@ public abstract class AbstractDatasetTest {
             count++;
         }
         assertEquals(dataset.size(), count);
+        
+        // Pattern iteration which should cover multiple graphs.
+        
+        Set<Quad> aliceQuads = new HashSet<>();
+        for (Quad aliceQ : dataset.iterate(null, alice, null, null)) { 
+            aliceQuads.add(aliceQ);
+        }
+        assertTrue(aliceQuads.contains(factory.createQuad(graph1, alice, name, aliceName)));
+        assertTrue(aliceQuads.contains(factory.createQuad(graph1, alice, knows, bob)));
+        // We can't test this by Quad equality, as bnode1 might become mapped by the 
+        // dataset
+        //assertTrue(aliceQuads.contains(factory.createQuad(graph1, alice, member, bnode1)));
+        assertTrue(aliceQuads.contains(factory.createQuad(null, alice, isPrimaryTopicOf, graph1)));
+        assertEquals(4, aliceQuads.size());
+        
+        // Check the isPrimaryTopicOf statements in the default graph
+        int topics = 0;
+        for (Quad topic : dataset.iterate(null, null, isPrimaryTopicOf, null)) {
+            topics++;
+            // COMMONSRDF-55: should not be <urn:x-arq:defaultgraph> or similar
+            assertFalse(topic.getGraphName().isPresent());
+        }
+        assertEquals(2, topics);
     }
 
+    @Test
+    public void streamDefaultGraphNameAlice() throws Exception {
+        // null below would match in ANY graph (including default graph)
+        Optional<? extends Quad> aliceTopic = dataset.stream(null, alice, isPrimaryTopicOf, null).findAny();
+        assertTrue(aliceTopic.isPresent());
+        // COMMONSRDF-55: should not be <urn:x-arq:defaultgraph> or similar
+        assertNull(aliceTopic.get().getGraphName().orElse(null));
+        assertFalse(aliceTopic.get().getGraphName().isPresent());
+    }
+
+
+    @Test
+    public void streamDefaultGraphNameByPattern() throws Exception {
+        // Explicitly select in only the default graph Optional.empty()
+        Optional<? extends Quad> aliceTopic = dataset.stream(Optional.empty(), null, null, null).findAny();
+        assertTrue(aliceTopic.isPresent());
+        // COMMONSRDF-55: should not be <urn:x-arq:defaultgraph> or similar
+        assertNull(aliceTopic.get().getGraphName().orElse(null));
+        assertFalse(aliceTopic.get().getGraphName().isPresent());
+    }
+    
+    
     /**
      * Special quad closing for RDF4J.
      */

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/bb264738/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
index 9a4c94b..3100ae6 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
@@ -22,12 +22,15 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.UUID;
 
+import org.apache.commons.rdf.api.BlankNodeOrIRI;
+import org.apache.commons.rdf.api.IRI;
 import org.apache.commons.rdf.api.QuadLike;
 import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.jena.JenaQuad;
 import org.apache.commons.rdf.jena.JenaQuadLike;
 import org.apache.commons.rdf.jena.JenaRDF;
 import org.apache.commons.rdf.jena.JenaTriple;
+import org.apache.jena.graph.Factory;
 import org.apache.jena.graph.Triple;
 import org.apache.jena.sparql.core.Quad;
 
@@ -52,6 +55,22 @@ abstract class AbstractQuadLike<S extends RDFTerm, P extends RDFTerm, O extends
     private static InternalJenaFactory internalJenaFactory = new InternalJenaFactory() {
     };
 
+    /**
+     * COMMONSRDF-55 - special handling of urn:x-arq:DefaultGraph and friends
+     */
+    private static class DefaultGraphChecker {
+        // Fixed UUID for comparison of defaultGraphNodeGenerated
+        private UUID salt = UUID.fromString("aaa6bf96-ea58-4a55-9485-3733403a1f24");     
+        private RDFTerm defaultGraph = internalJenaFactory.createRDFTerm(Quad.defaultGraphIRI, salt);
+        private RDFTerm defaultGraphNodeGenerated = internalJenaFactory.createRDFTerm(Quad.defaultGraphNodeGenerated, salt);
+        
+        public boolean isNotDefaultGraph(RDFTerm graphName) {
+            return !(graphName.equals(defaultGraph) || graphName.equals(defaultGraphNodeGenerated)); 
+        }
+    }
+    
+    private static DefaultGraphChecker defaultGraphChecker = new DefaultGraphChecker();
+
     final Optional<G> graphName;
     final S subject;
     final P predicate;
@@ -59,11 +78,12 @@ abstract class AbstractQuadLike<S extends RDFTerm, P extends RDFTerm, O extends
     org.apache.jena.sparql.core.Quad quad = null;
     org.apache.jena.graph.Triple triple = null;
 
+    
     AbstractQuadLike(final S subject, final P predicate, final O object, final Optional<G> graphName) {
         this.subject = Objects.requireNonNull(subject);
         this.predicate = Objects.requireNonNull(predicate);
         this.object = Objects.requireNonNull(object);
-        this.graphName = Objects.requireNonNull(graphName);
+        this.graphName = Objects.requireNonNull(graphName).filter(defaultGraphChecker::isNotDefaultGraph);
     }
 
     AbstractQuadLike(final S subject, final P predicate, final O object) {
@@ -76,7 +96,11 @@ abstract class AbstractQuadLike<S extends RDFTerm, P extends RDFTerm, O extends
         this.subject = (S) internalJenaFactory.createRDFTerm(quad.getSubject(), salt);
         this.predicate = (P) internalJenaFactory.createRDFTerm(quad.getPredicate(), salt);
         this.object = (O) internalJenaFactory.createRDFTerm(quad.getObject(), salt);
-        this.graphName = Optional.of((G) internalJenaFactory.createRDFTerm(quad.getGraph(), salt));
+        if (quad.isDefaultGraph()) {
+            this.graphName = Optional.empty();
+        } else { 
+            this.graphName = Optional.of((G) internalJenaFactory.createRDFTerm(quad.getGraph(), salt));
+        }
     }
 
     @SuppressWarnings("unchecked")
@@ -92,8 +116,11 @@ abstract class AbstractQuadLike<S extends RDFTerm, P extends RDFTerm, O extends
     public org.apache.jena.sparql.core.Quad asJenaQuad() {
         final JenaRDF factory = new JenaRDF();
         if (quad == null) {
-            quad = org.apache.jena.sparql.core.Quad.create(factory.asJenaNode(graphName.orElse(null)),
-                    factory.asJenaNode(subject), factory.asJenaNode(predicate), factory.asJenaNode(object));
+            quad = org.apache.jena.sparql.core.Quad.create(
+                    graphName.map(factory::asJenaNode).orElse(Quad.defaultGraphIRI),
+                    factory.asJenaNode(subject), 
+                    factory.asJenaNode(predicate), 
+                    factory.asJenaNode(object));
         }
         return quad;
     }
@@ -102,7 +129,9 @@ abstract class AbstractQuadLike<S extends RDFTerm, P extends RDFTerm, O extends
     public org.apache.jena.graph.Triple asJenaTriple() {
         final JenaRDF factory = new JenaRDF();
         if (triple == null) {
-            triple = org.apache.jena.graph.Triple.create(factory.asJenaNode(subject), factory.asJenaNode(predicate),
+            triple = org.apache.jena.graph.Triple.create(
+                    factory.asJenaNode(subject), 
+                    factory.asJenaNode(predicate),
                     factory.asJenaNode(object));
         }
         return triple;

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/bb264738/jena/src/main/java/org/apache/commons/rdf/jena/impl/InternalJenaFactory.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/InternalJenaFactory.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/InternalJenaFactory.java
index 031ba7c..3e186a2 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/InternalJenaFactory.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/InternalJenaFactory.java
@@ -159,7 +159,7 @@ public abstract class InternalJenaFactory {
         }
         throw new ConversionException("Unrecognized node type: " + node);
     }
-
+    
     public JenaTriple createTriple(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) {
         return new JenaTripleImpl(subject, predicate, object);
     }

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/bb264738/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java
----------------------------------------------------------------------
diff --git a/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java b/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java
new file mode 100644
index 0000000..739d7a4
--- /dev/null
+++ b/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java
@@ -0,0 +1,85 @@
+/**
+ * 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.
+ */
+package org.apache.commons.rdf.jena;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.rdf.api.IRI;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.NodeFactory;
+import org.apache.jena.sparql.core.Quad;
+import org.junit.Test;
+
+/**
+ * COMMONSRDF-55: Ensure correct handling of 
+ * Jena's default graph IRI urn:x-arq:DefaultGraph
+ */
+public class DefaultGraphInQuadTest {
+    
+    JenaRDF rdf = new JenaRDF();
+    IRI example = rdf.createIRI("http://example.com/");
+    Node exampleJena = NodeFactory.createURI("http://example.com/");
+    
+    @Test
+    public void createFromNull() throws Exception {        
+        JenaQuad q = rdf.createQuad(null, example, example, example);
+        assertFalse(q.getGraphName().isPresent());
+        assertTrue(q.asJenaQuad().isDefaultGraph());
+        assertEquals(Quad.defaultGraphIRI,  q.asJenaQuad().getGraph());
+    }
+
+    @Test
+    public void createFromDefaultGraphIRI() throws Exception {
+        JenaIRI defaultGraph = (JenaIRI) rdf.asRDFTerm(Quad.defaultGraphIRI);        
+        JenaQuad q = rdf.createQuad(defaultGraph, example, example, example);
+        assertTrue(q.asJenaQuad().isDefaultGraph());
+        assertEquals(Quad.defaultGraphIRI,  q.asJenaQuad().getGraph());
+        assertFalse(q.getGraphName().isPresent());
+    }
+    
+    @Test
+    public void defaultGraphIRI() throws Exception {
+        Quad jenaQuad = Quad.create(Quad.defaultGraphIRI, exampleJena, exampleJena, exampleJena);
+        JenaQuad q = rdf.asQuad(jenaQuad);        
+        assertFalse(q.getGraphName().isPresent());
+        assertTrue(q.asJenaQuad().isDefaultGraph());
+    }
+
+    @Test
+    public void defaultGraphNodeGenerated() throws Exception {        
+        // defaultGraphNodeGenerated might appear in parser output
+        Quad jenaQuad = Quad.create(Quad.defaultGraphNodeGenerated, exampleJena, exampleJena, exampleJena);
+        JenaQuad q = rdf.asQuad(jenaQuad);        
+        assertFalse(q.getGraphName().isPresent());
+        assertTrue(q.asJenaQuad().isDefaultGraph());
+    }
+
+    @Test
+    public void unionGraph() throws Exception {
+        // unionGraph shouldn't really appear as a quad except
+        // in a pattern
+        Quad jenaQuad = Quad.create(Quad.unionGraph, exampleJena, exampleJena, exampleJena);
+        JenaQuad q = rdf.asQuad(jenaQuad);
+        // But at least we can agree it is NOT (necessarily) in the
+        // default graph
+        assertFalse(q.asJenaQuad().isDefaultGraph());
+        assertTrue(q.getGraphName().isPresent());
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/bb264738/jena/src/test/java/org/apache/commons/rdf/jena/JenaRDFTest.java
----------------------------------------------------------------------
diff --git a/jena/src/test/java/org/apache/commons/rdf/jena/JenaRDFTest.java b/jena/src/test/java/org/apache/commons/rdf/jena/JenaRDFTest.java
index 72986d0..fd50421 100644
--- a/jena/src/test/java/org/apache/commons/rdf/jena/JenaRDFTest.java
+++ b/jena/src/test/java/org/apache/commons/rdf/jena/JenaRDFTest.java
@@ -15,7 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.commons.rdf.jena;
 
 import org.apache.commons.rdf.api.AbstractRDFTest;


[02/45] commons-rdf git commit: COMMONSRDF-53: merged PR by @acoburn on github, closes #29

Posted by st...@apache.org.
COMMONSRDF-53: merged PR by @acoburn on github, closes #29

* acoburn/osgi_serviceloader:
  Add ServiceLoader support in OSGi

Signed-off-by: Sergio Fern�ndez <wi...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/3887517a
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/3887517a
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/3887517a

Branch: refs/heads/COMMONSRDF-47
Commit: 3887517a6f445c9944b9350abf98f0df9272d905
Parents: 0e1969a 27dbd9e
Author: Sergio Fern�ndez <wi...@apache.org>
Authored: Thu Jan 12 08:50:58 2017 +0100
Committer: Sergio Fern�ndez <wi...@apache.org>
Committed: Thu Jan 12 08:50:58 2017 +0100

----------------------------------------------------------------------
 jena/pom.xml        | 19 +++++++++++++++----
 jsonld-java/pom.xml | 19 +++++++++++++++----
 rdf4j/pom.xml       |  7 +++----
 simple/pom.xml      | 19 +++++++++++++++----
 4 files changed, 48 insertions(+), 16 deletions(-)
----------------------------------------------------------------------



[35/45] commons-rdf git commit: Test asGeneralizedTriple

Posted by st...@apache.org.
Test asGeneralizedTriple

Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/71833695
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/71833695
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/71833695

Branch: refs/heads/COMMONSRDF-47
Commit: 71833695488bec404b433bd4e2f817021232855d
Parents: 8dd1c43
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 14:38:25 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 14:38:36 2017 +0000

----------------------------------------------------------------------
 .../rdf/jena/GeneralizedRDFTripleTest.java       | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/71833695/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFTripleTest.java
----------------------------------------------------------------------
diff --git a/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFTripleTest.java b/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFTripleTest.java
index 82ccb81..97abbe5 100644
--- a/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFTripleTest.java
+++ b/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFTripleTest.java
@@ -17,9 +17,13 @@
  */
 package org.apache.commons.rdf.jena;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import org.apache.commons.rdf.api.BlankNode;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.NodeFactory;
+import org.apache.jena.graph.Triple;
 import org.junit.Test;
 
 public class GeneralizedRDFTripleTest {
@@ -66,7 +70,16 @@ public class GeneralizedRDFTripleTest {
         assertTrue(t.asJenaTriple().getSubject().isLiteral());
     }
     
-    
-
+    @Test
+    public void asGeneralizedTriple() throws Exception {
+        Node s = NodeFactory.createLiteral("Hello");
+        Node p = NodeFactory.createBlankNode();
+        Node o = NodeFactory.createURI("http://example.com/ex");
+        Triple jt = Triple.create(s, p, o);
+        JenaTripleLike t = jena.asGeneralizedTriple(jt);
+        assertEquals(jena.createLiteral("Hello"), t.getSubject());
+        assertEquals(jena.asRDFTerm(p), t.getPredicate());
+        assertEquals(jena.createIRI("http://example.com/ex"), t.getObject());
+    }
     
 }


[14/45] commons-rdf git commit: commented out debug statement

Posted by st...@apache.org.
commented out debug statement


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/4bc08f6e
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/4bc08f6e
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/4bc08f6e

Branch: refs/heads/COMMONSRDF-47
Commit: 4bc08f6e31cec45179b8c99b9905a39ddeaac746
Parents: c729469
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:57:45 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:57:45 2017 +0000

----------------------------------------------------------------------
 .../test/java/org/apache/commons/rdf/api/AbstractGraphTest.java    | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/4bc08f6e/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index e18ca08..89e91f2 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -411,6 +411,8 @@ public abstract class AbstractGraphTest {
 
         // Remove should also honour any case
         graph.remove(example1, null, mixed);
+//        Triple t = graph.stream().findAny().get();
+//        System.out.println(t);
         // no more greetings of any kind
         assertFalse(graph.contains(null, greeting, null));
     }


[23/45] commons-rdf git commit: COMMONSRDF-51: Comment

Posted by st...@apache.org.
COMMONSRDF-51: Comment


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/202a8c61
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/202a8c61
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/202a8c61

Branch: refs/heads/COMMONSRDF-47
Commit: 202a8c617f383027ddf82361dc05d600207d8b13
Parents: f8745ef
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:40:27 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:40:27 2017 +0000

----------------------------------------------------------------------
 .../java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/202a8c61/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
index a5f4e36..486903a 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
@@ -117,12 +117,12 @@ class JenaDatasetImpl implements JenaDataset {
 
     @Override
     public void remove(final Quad quad) {
+        // COMMONSRDF-51: 
         graph.deleteAny(
                 toJenaPattern(quad.getGraphName()),
                 toJenaPattern(quad.getSubject()),
                 toJenaPattern(quad.getPredicate()),
                 toJenaPattern(quad.getObject()));
-//        graph.delete(factory.asJenaQuad(quad));
     }
 
     @Override


[41/45] commons-rdf git commit: COMMONSRDF-57

Posted by st...@apache.org.
COMMONSRDF-57

Updated to
  Jena 3.2.0
  RDF4J 2.2
  JSONLD Java 0.9.0


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/42a32b40
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/42a32b40
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/42a32b40

Branch: refs/heads/COMMONSRDF-47
Commit: 42a32b40d507c7cc79b6bfda62b87467ef98db6c
Parents: e351d55
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 23:16:50 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 23:16:50 2017 +0000

----------------------------------------------------------------------
 pom.xml | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/42a32b40/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 826490c..ae6dc43 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,10 +59,11 @@
         <commons.japicmp.version>0.9.1</commons.japicmp.version>
         
         
-        <!--  NOTE: jsonldjava is also used by rdf4j and jena, check  -->
-        <jsonldjava.version>0.8.3</jsonldjava.version>
-        <rdf4j.version>2.1.1</rdf4j.version>
-        <jena.version>3.1.1</jena.version>
+	<!--  NOTE: jsonldjava is also used by rdf4j and jena, check the version 
+	      is cross-compatible -->
+        <jsonldjava.version>0.9.0</jsonldjava.version>
+        <rdf4j.version>2.2</rdf4j.version>
+        <jena.version>3.2.0</jena.version>
         <!--  NOTE: dexx and xerces versions should match 
         the versions marked as <optional> in jena-osgi pom
          -->


[22/45] commons-rdf git commit: COMMONSRDF-51: Avoid deleting directly from Quad

Posted by st...@apache.org.
COMMONSRDF-51: Avoid deleting directly from Quad

.. so that langtags are compared case insensitrive


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/f8745ef5
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/f8745ef5
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/f8745ef5

Branch: refs/heads/COMMONSRDF-47
Commit: f8745ef5f1e8cb2b392f5dc88938a65980a72170
Parents: 3cf2711
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:38:11 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:38:11 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java     | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/f8745ef5/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
index 9e4eac2..a5f4e36 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaDatasetImpl.java
@@ -117,7 +117,12 @@ class JenaDatasetImpl implements JenaDataset {
 
     @Override
     public void remove(final Quad quad) {
-        graph.delete(factory.asJenaQuad(quad));
+        graph.deleteAny(
+                toJenaPattern(quad.getGraphName()),
+                toJenaPattern(quad.getSubject()),
+                toJenaPattern(quad.getPredicate()),
+                toJenaPattern(quad.getObject()));
+//        graph.delete(factory.asJenaQuad(quad));
     }
 
     @Override


[03/45] commons-rdf git commit: COMMONSRDF-51: compare language tags in lower case

Posted by st...@apache.org.
COMMONSRDF-51: compare language tags in lower case


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/3064d219
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/3064d219
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/3064d219

Branch: refs/heads/COMMONSRDF-47
Commit: 3064d219606cbe42c0150d81dbf6cdbc74bf7491
Parents: 0e1969a
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 12 14:51:26 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 12 14:51:26 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/api/Literal.java     |  27 +++--
 .../apache/commons/rdf/api/AbstractRDFTest.java | 118 ++++++++++++++++++-
 .../commons/rdf/jena/impl/JenaLiteralImpl.java  |  13 +-
 .../commons/rdf/jsonldjava/JsonLdLiteral.java   |  13 +-
 .../commons/rdf/rdf4j/impl/LiteralImpl.java     |  15 ++-
 .../apache/commons/rdf/simple/LiteralImpl.java  |   8 +-
 6 files changed, 169 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/api/src/main/java/org/apache/commons/rdf/api/Literal.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/commons/rdf/api/Literal.java b/api/src/main/java/org/apache/commons/rdf/api/Literal.java
index a434a73..ea6e3a4 100644
--- a/api/src/main/java/org/apache/commons/rdf/api/Literal.java
+++ b/api/src/main/java/org/apache/commons/rdf/api/Literal.java
@@ -18,6 +18,7 @@
 package org.apache.commons.rdf.api;
 
 import java.io.Serializable;
+import java.util.Locale;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -72,7 +73,13 @@ public interface Literal extends RDFTerm {
      * <a href="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
      * >http://www.w3.org/1999/02/22-rdf-syntax-ns#langString</a>, this method
      * must return {@link Optional#empty()}.
-     *
+     * <p>
+     * The value space of language tags is always in lower case; although 
+     * RDF implementations MAY convert all language tags to lower case,
+     * safe comparisons of language tags should be done using
+     * {@link String#toLowerCase(Locale)} with the locale
+     * {@link Locale#ROOT}. 
+     * <p>
      * Implementation note: If your application requires {@link Serializable}
      * objects, it is best not to store an {@link Optional} in a field. It is
      * recommended to use {@link Optional#ofNullable(Object)} to create the
@@ -80,8 +87,8 @@ public interface Literal extends RDFTerm {
      *
      * @return The {@link Optional} language tag for this literal. If
      *         {@link Optional#isPresent()} returns true, the value returned by
-     *         {@link Optional#get()} must be a non-empty string conforming to
-     *         BCP47.
+     *         {@link Optional#get()} must be a non-empty language tag string
+     *         conforming to BCP47.
      * @see <a href=
      *      "http://www.w3.org/TR/rdf11-concepts/#dfn-language-tag">RDF-1.1
      *      Literal language tag</a>
@@ -89,14 +96,20 @@ public interface Literal extends RDFTerm {
     Optional<String> getLanguageTag();
 
     /**
-     * Check it this Literal is equal to another Literal. <blockquote>
+     * Check it this Literal is equal to another Literal. 
+     * <blockquote>
      * <a href="http://www.w3.org/TR/rdf11-concepts/#dfn-literal-term">Literal
-     * term equality</a>: Two literals are term-equal (the same RDF literal) if
+     * term equality</a>: 
+     * Two literals are term-equal (the same RDF literal) if
      * and only if the two lexical forms, the two datatype IRIs, and the two
      * language tags (if any) compare equal, character by character. Thus, two
      * literals can have the same value without being the same RDF term.
      * </blockquote>
-     *
+     * As the value space for language tags is lower-space, if they are present,
+     * they MUST be compared character by character
+     * using the equivalent of {@link String#toLowerCase(java.util.Locale)} with
+     * the locale {@link Locale#ROOT}.
+     * <p>
      * Implementations MUST also override {@link #hashCode()} so that two equal
      * Literals produce the same hash code.
      *
@@ -114,7 +127,7 @@ public interface Literal extends RDFTerm {
      * The returned hash code MUST be equal to the result of
      * {@link Objects#hash(Object...)} with the arguments
      * {@link #getLexicalForm()}, {@link #getDatatype()},
-     * {@link #getLanguageTag()}.
+     * {@link #getLanguageTag()}<code>.map(s-&gt;s.toLowerString(Locale.ROOT))</code>.
      * <p>
      * This method MUST be implemented in conjunction with
      * {@link #equals(Object)} so that two equal Literals produce the same hash

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 85e7b61..5efcee1 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -17,13 +17,13 @@
  */
 package org.apache.commons.rdf.api;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.*;
 
+import java.util.Locale;
 import java.util.Objects;
+import java.util.Optional;
 
+import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -139,7 +139,7 @@ public abstract class AbstractRDFTest {
         assertEquals("<http://example.com/vocab#term>", term.ntriplesString());
 
         // and now for the international fun!
-
+        // make sure this file is edited/compiled as UTF-8
         final IRI latin1 = factory.createIRI("http://acc�nt.example.com/premi�re");
         assertEquals("http://acc�nt.example.com/premi�re", latin1.getIRIString());
         assertEquals("<http://acc�nt.example.com/premi�re>", latin1.ntriplesString());
@@ -194,6 +194,114 @@ public abstract class AbstractRDFTest {
         assertEquals("\"Herbert Van de Sompel\"@vls", vls.ntriplesString());
     }
 
+    public void testCreateLiteralLangCaseInsensitive() throws Exception {
+        // COMMONSRDF-51: Literal langtag may not be in lowercase, but
+        // must be COMPARED (aka .equals and .hashCode()) in lowercase
+        // as the language space is lower case.       
+        final Literal lower = factory.createLiteral("Hello", "en-gb"); 
+        final Literal upper = factory.createLiteral("Hello", "EN-GB"); 
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        
+        assertEquals("en-gb", lower.getLanguageTag().get());
+     
+        // NOTE: the RDF framework is free to lowercase the language tag 
+        // or leave it as-is, so we can't assume: 
+        /*
+         assertEquals("en-gb", upper.getLanguageTag().get());
+         assertEquals("en-gb", mixed.getLanguageTag().get());
+        */
+        // ..unless we do a case-insensitive comparison:
+        assertEquals("en-gb",
+                upper.getLanguageTag().get().toLowerCase(Locale.ROOT));
+        assertEquals("en-gb",
+                mixed.getLanguageTag().get().toLowerCase(Locale.ROOT));
+                
+        // However these should all be true
+        assertEquals(lower, lower);
+        assertEquals(lower, upper);
+        assertEquals(lower, mixed);
+        assertEquals(upper, lower);
+        assertEquals(upper, upper);
+        assertEquals(upper, mixed);
+        assertEquals(mixed, lower);
+        assertEquals(mixed, upper);
+        assertEquals(mixed, mixed);
+
+        // And then by java.lang.Object contract, also the hashcode:
+        assertEquals(lower.hashCode(), upper.hashCode());
+        assertEquals(lower.hashCode(), mixed.hashCode());        
+    }
+
+    @Test
+    public void testCreateLiteralLangCaseInsensitiveOther() throws Exception {
+        // COMMONSRDF-51: Ensure the Literal is using case insensitive
+        // comparison against more 'liberal' literal implementations
+        // which may not have done .toLowerString() in their constructor
+        final Literal lower = factory.createLiteral("Hello", "en-gb"); 
+        final Literal upper = factory.createLiteral("Hello", "EN-GB"); 
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+        
+        Literal otherLiteral = new Literal() {
+            @Override
+            public String ntriplesString() {
+                return "Hello@en-GB";
+            }
+            @Override
+            public String getLexicalForm() {
+                return "Hello";
+            }
+            @Override
+            public Optional<String> getLanguageTag() {
+                return Optional.of("en-GB");
+            }
+            @Override
+            public IRI getDatatype() {
+                return factory.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#langString");
+            }
+            @Override
+            public boolean equals(Object obj) {
+                throw new RuntimeException("Wrong way comparison of literal");
+            }
+        };
+
+        assertEquals(mixed, otherLiteral);
+        assertEquals(lower, otherLiteral);
+        assertEquals(upper, otherLiteral);
+    }
+
+    @Test
+    public void testCreateLiteralLangCaseInsensitiveInTurkish() throws Exception {
+        // COMMONSRDF-51: Special test for Turkish issue where 
+        // "i".toLowerCase() != "i"
+        // See also:
+        // https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
+        Locale defaultLocale = Locale.getDefault();
+        try { 
+            Locale turkish = Locale.forLanguageTag("TR");
+            Locale.setDefault(turkish);
+            Assume.assumeFalse("FI".toLowerCase().equals("fi"));
+
+            final Literal lower = factory.createLiteral("moi", "fi"); 
+            final Literal upper = factory.createLiteral("moi", "FI"); 
+            final Literal mixed = factory.createLiteral("moi", "fI");
+
+            assertEquals(lower, lower);
+            assertEquals(lower, upper);
+            assertEquals(lower, mixed);
+            assertEquals(upper, lower);
+            assertEquals(upper, upper);
+            assertEquals(upper, mixed);
+            assertEquals(mixed, lower);
+            assertEquals(mixed, upper);
+            assertEquals(mixed, mixed);
+            assertEquals(lower.hashCode(), upper.hashCode());
+            assertEquals(lower.hashCode(), mixed.hashCode());        
+        } finally {
+            Locale.setDefault(defaultLocale);
+        }
+    }
+    
     @Test
     public void testCreateLiteralString() throws Exception {
         final Literal example = factory.createLiteral("Example",

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
index faee060..8a0c9ee 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaLiteralImpl.java
@@ -18,6 +18,7 @@
 
 package org.apache.commons.rdf.jena.impl;
 
+import java.util.Locale;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -37,6 +38,10 @@ class JenaLiteralImpl extends AbstractJenaRDFTerm implements JenaLiteral {
             throw new IllegalArgumentException("Node is not a literal: " + node);
         }
     }
+    
+    private static String lowerCase(String langTag) { 
+        return langTag.toLowerCase(Locale.ROOT);
+    }
 
     @Override
     public boolean equals(final Object other) {
@@ -50,8 +55,10 @@ class JenaLiteralImpl extends AbstractJenaRDFTerm implements JenaLiteral {
             return false;
         }
         final Literal literal = (Literal) other;
-        return getLexicalForm().equals(literal.getLexicalForm()) && getLanguageTag().equals(literal.getLanguageTag())
-                && getDatatype().equals(literal.getDatatype());
+        return getLexicalForm().equals(literal.getLexicalForm()) &&
+                getDatatype().equals(literal.getDatatype()) &&
+                getLanguageTag().map(JenaLiteralImpl::lowerCase).equals(
+                        literal.getLanguageTag().map(JenaLiteralImpl::lowerCase));
     }
 
     @Override
@@ -75,6 +82,6 @@ class JenaLiteralImpl extends AbstractJenaRDFTerm implements JenaLiteral {
 
     @Override
     public int hashCode() {
-        return Objects.hash(getLexicalForm(), getDatatype(), getLanguageTag());
+        return Objects.hash(getLexicalForm(), getDatatype(), getLanguageTag().map(JenaLiteralImpl::lowerCase));
     }
 }

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
index 2414087..0d63c29 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
@@ -17,6 +17,7 @@
  */
 package org.apache.commons.rdf.jsonldjava;
 
+import java.util.Locale;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -38,6 +39,10 @@ class JsonLdLiteralImpl extends JsonLdTermImpl implements JsonLdLiteral {
         }
     }
 
+    private static String lowerCase(String langTag) { 
+        return langTag.toLowerCase(Locale.ROOT);
+    }
+    
     @Override
     public String ntriplesString() {
         final StringBuilder sb = new StringBuilder();
@@ -76,9 +81,8 @@ class JsonLdLiteralImpl extends JsonLdTermImpl implements JsonLdLiteral {
 
     @Override
     public int hashCode() {
-        // Should be the same as
-        // Objects.hash(getLexicalForm(), getDatatype(), getLanguageTag());
-        return Objects.hash(node.getValue(), node.getDatatype(), node.getLanguage());
+        return Objects.hash(node.getValue(), node.getDatatype(), 
+                getLanguageTag().map(JsonLdLiteralImpl::lowerCase));
     }
 
     @Override
@@ -90,7 +94,8 @@ class JsonLdLiteralImpl extends JsonLdTermImpl implements JsonLdLiteral {
         if (obj instanceof Literal) {
             final Literal other = (Literal) obj;
             return getLexicalForm().equals(other.getLexicalForm()) && getDatatype().equals(other.getDatatype())
-                    && getLanguageTag().equals(other.getLanguageTag());
+                    && getLanguageTag().map(JsonLdLiteralImpl::lowerCase)
+                    .equals(other.getLanguageTag().map(JsonLdLiteralImpl::lowerCase));
         }
         return false;
 

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
index 16d70b8..253b645 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/impl/LiteralImpl.java
@@ -17,6 +17,7 @@
  */
 package org.apache.commons.rdf.rdf4j.impl;
 
+import java.util.Locale;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -32,6 +33,10 @@ final class LiteralImpl extends AbstractRDFTerm<org.eclipse.rdf4j.model.Literal>
         super(literal);
     }
 
+    private static String lowerCase(String langTag) { 
+        return langTag.toLowerCase(Locale.ROOT);
+    }
+    
     @Override
     public boolean equals(final Object obj) {
         if (obj == this) {
@@ -39,9 +44,10 @@ final class LiteralImpl extends AbstractRDFTerm<org.eclipse.rdf4j.model.Literal>
         }
         if (obj instanceof org.apache.commons.rdf.api.Literal) {
             final org.apache.commons.rdf.api.Literal other = (org.apache.commons.rdf.api.Literal) obj;
-            return getLexicalForm().equals(other.getLexicalForm()) && getDatatype().equals(other.getDatatype())
-                    && getLanguageTag().equals(other.getLanguageTag());
-
+            return getLexicalForm().equals(other.getLexicalForm()) && 
+                    getDatatype().equals(other.getDatatype()) &&
+                    getLanguageTag().map(LiteralImpl::lowerCase).equals(
+                            other.getLanguageTag().map(LiteralImpl::lowerCase));
         }
         return false;
     }
@@ -63,7 +69,8 @@ final class LiteralImpl extends AbstractRDFTerm<org.eclipse.rdf4j.model.Literal>
 
     @Override
     public int hashCode() {
-        return Objects.hash(value.getLabel(), value.getDatatype(), value.getLanguage());
+        return Objects.hash(value.getLabel(), value.getDatatype(), 
+                getLanguageTag().map(LiteralImpl::lowerCase));
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3064d219/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
----------------------------------------------------------------------
diff --git a/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java b/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
index 3cca4c6..763a629 100644
--- a/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
+++ b/simple/src/main/java/org/apache/commons/rdf/simple/LiteralImpl.java
@@ -52,7 +52,7 @@ final class LiteralImpl implements Literal, SimpleRDF.SimpleRDFTerm {
 
     public LiteralImpl(final String literal, final String languageTag) {
         this.lexicalForm = Objects.requireNonNull(literal);
-        this.languageTag = Objects.requireNonNull(languageTag).toLowerCase(Locale.ENGLISH);
+        this.languageTag = Objects.requireNonNull(lowerCase(languageTag));
         if (languageTag.isEmpty()) {
             // TODO: Check against
             // http://www.w3.org/TR/n-triples/#n-triples-grammar
@@ -116,6 +116,10 @@ final class LiteralImpl implements Literal, SimpleRDF.SimpleRDFTerm {
         return Objects.hash(lexicalForm, dataType, languageTag);
     }
 
+    private static String lowerCase(String langTag) { 
+        return langTag.toLowerCase(Locale.ROOT);
+    }
+    
     @Override
     public boolean equals(final Object obj) {
         if (this == obj) {
@@ -126,7 +130,7 @@ final class LiteralImpl implements Literal, SimpleRDF.SimpleRDFTerm {
         }
         final Literal literal = (Literal) obj;
         return getDatatype().equals(literal.getDatatype()) && getLexicalForm().equals(literal.getLexicalForm())
-                && getLanguageTag().equals(literal.getLanguageTag());
+                && getLanguageTag().equals(literal.getLanguageTag().map(LiteralImpl::lowerCase));
     }
 
 }


[33/45] commons-rdf git commit: COMMONSRDF-55: recognize default graph Node for generalizedQuad

Posted by st...@apache.org.
COMMONSRDF-55: recognize default graph Node for generalizedQuad

Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/c90bafec
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/c90bafec
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/c90bafec

Branch: refs/heads/COMMONSRDF-47
Commit: c90bafec0df0b156493c61a1f41e71007fc1ad5e
Parents: d0ae2d8
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 14:32:49 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 14:32:49 2017 +0000

----------------------------------------------------------------------
 .../rdf/jena/GeneralizedRDFQuadTest.java        | 68 +++++++++++++-------
 1 file changed, 45 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/c90bafec/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java
----------------------------------------------------------------------
diff --git a/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java b/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java
index e5b26a4..1e183d3 100644
--- a/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java
+++ b/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java
@@ -17,9 +17,12 @@
  */
 package org.apache.commons.rdf.jena;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.apache.commons.rdf.api.BlankNode;
+import org.apache.jena.sparql.core.Quad;
 import org.junit.Test;
 
 public class GeneralizedRDFQuadTest {
@@ -33,11 +36,12 @@ public class GeneralizedRDFQuadTest {
         JenaIRI ex2 = jena.createIRI("http://example.com/ex2");
         JenaIRI ex3 = jena.createIRI("http://example.com/ex3");
         
-        JenaGeneralizedQuadLike t = jena.createGeneralizedQuad(ex1, b1, ex2, ex3);
-        assertEquals(ex1, t.getSubject());
-        assertEquals(ex2, t.getObject());
-        assertEquals(b1, t.getPredicate()); // it's a bnode!
-        assertTrue(t.asJenaQuad().getPredicate().isBlank());
+        JenaGeneralizedQuadLike q = jena.createGeneralizedQuad(ex1, b1, ex2, ex3);
+        assertEquals(ex1, q.getSubject());
+        assertEquals(ex2, q.getObject());
+        assertEquals(b1, q.getPredicate()); // it's a bnode!
+        assertEquals(ex3, q.getGraphName().get());
+        assertTrue(q.asJenaQuad().getPredicate().isBlank());
     }
 
     @Test
@@ -47,11 +51,12 @@ public class GeneralizedRDFQuadTest {
         JenaIRI ex3 = jena.createIRI("http://example.com/ex3");
         JenaLiteral lit = jena.createLiteral("Hello");
         
-        JenaGeneralizedQuadLike t = jena.createGeneralizedQuad(ex1, lit, ex2, ex3);
-        assertEquals(ex1, t.getSubject());
-        assertEquals(ex2, t.getObject());
-        assertEquals(lit, t.getPredicate()); // it's a literal!
-        assertTrue(t.asJenaQuad().getPredicate().isLiteral());
+        JenaGeneralizedQuadLike q = jena.createGeneralizedQuad(ex1, lit, ex2, ex3);
+        assertEquals(ex1, q.getSubject());
+        assertEquals(ex2, q.getObject());
+        assertEquals(lit, q.getPredicate()); // it's a literal!
+        assertEquals(ex3, q.getGraphName().get());
+        assertTrue(q.asJenaQuad().getPredicate().isLiteral());
     }
 
 
@@ -62,14 +67,32 @@ public class GeneralizedRDFQuadTest {
         JenaIRI ex3 = jena.createIRI("http://example.com/ex3");
         JenaLiteral lit = jena.createLiteral("Hello");
         
-        JenaGeneralizedQuadLike t = jena.createGeneralizedQuad(lit, ex1, ex2, ex3);
-        assertEquals(lit, t.getSubject()); // it's a literal!
-        assertEquals(ex1, t.getPredicate());
-        assertEquals(ex2, t.getObject());
-        assertTrue(t.asJenaQuad().getSubject().isLiteral());
+        JenaGeneralizedQuadLike q = jena.createGeneralizedQuad(lit, ex1, ex2, ex3);
+        assertEquals(lit, q.getSubject()); // it's a literal!
+        assertEquals(ex1, q.getPredicate());
+        assertEquals(ex2, q.getObject());
+        assertEquals(ex3, q.getGraphName().get());
+        assertTrue(q.asJenaQuad().getSubject().isLiteral());
     }
     
+    @Test
+    public void literalSubjectDefaultGraphGen() throws Exception {
+        JenaIRI ex1 = jena.createIRI("http://example.com/ex1");
+        JenaIRI ex2 = jena.createIRI("http://example.com/ex2");
+        // No need to cast to JenaIRI
+        JenaRDFTerm defG = jena.asRDFTerm(Quad.defaultGraphNodeGenerated); 
+        JenaLiteral lit = jena.createLiteral("Hello");
+        
+        JenaGeneralizedQuadLike q = jena.createGeneralizedQuad(lit, ex1, ex2, defG);
+        assertEquals(lit, q.getSubject()); // it's a literal!
+        assertEquals(ex1, q.getPredicate());
+        assertEquals(ex2, q.getObject());
+        assertTrue(q.asJenaQuad().getSubject().isLiteral());
+        assertFalse(q.getGraphName().isPresent());
+        assertTrue(q.asJenaQuad().isDefaultGraph());
+    }
 
+    
     @Test
     public void literalGraph() throws Exception {
         JenaIRI ex1 = jena.createIRI("http://example.com/ex1");
@@ -77,13 +100,12 @@ public class GeneralizedRDFQuadTest {
         JenaIRI ex3 = jena.createIRI("http://example.com/ex3");
         JenaLiteral lit = jena.createLiteral("Hello");
         
-        JenaGeneralizedQuadLike t = jena.createGeneralizedQuad(ex1, ex2, ex3, lit);
-        assertEquals(ex1, t.getSubject()); 
-        assertEquals(ex2, t.getPredicate());
-        assertEquals(ex3, t.getObject());
-        assertTrue(t.getGraphName().isPresent());
-        assertEquals(lit, t.getGraphName().get());
-        assertTrue(t.asJenaQuad().getGraph().isLiteral());
+        JenaGeneralizedQuadLike q = jena.createGeneralizedQuad(ex1, ex2, ex3, lit);
+        assertEquals(ex1, q.getSubject()); 
+        assertEquals(ex2, q.getPredicate());
+        assertEquals(ex3, q.getObject());
+        assertEquals(lit, q.getGraphName().get()); // it's a literal!
+        assertTrue(q.asJenaQuad().getGraph().isLiteral());
     }
     
     


[26/45] commons-rdf git commit: Attributed Guohui Xiao as contributor

Posted by st...@apache.org.
Attributed Guohui Xiao as contributor


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/69264f16
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/69264f16
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/69264f16

Branch: refs/heads/COMMONSRDF-47
Commit: 69264f16b99f790726d855af591ebc7a91ebda64
Parents: d7df785
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Fri Jan 27 16:05:25 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jan 27 16:05:25 2017 +0000

----------------------------------------------------------------------
 pom.xml | 9 +++++++++
 1 file changed, 9 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/69264f16/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 94e43cb..826490c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -225,6 +225,15 @@
             </roles>
             <timezone>+0</timezone>
         </contributor>
+        <contributor>
+            <name>Guohui Xiao</name>
+            <email>gx.xiao[at]gmail[dot]com</email>
+	    <url>http://orcid.org/0000-0002-5115-4769</url>
+            <roles>
+                <role>Contributor</role>
+            </roles>
+            <timezone>+1</timezone>
+        </contributor>
     </contributors>
 
     <modules>


[25/45] commons-rdf git commit: COMMONSRDF-54 overloads of RDF4J#asRDFTerm

Posted by st...@apache.org.
COMMONSRDF-54 overloads of RDF4J#asRDFTerm

This PR adds three overloaded methods into the class RDF4J:

RDF4JBlankNode asRDFTerm(final org.eclipse.rdf4j.model.BNode value)
RDF4JLiteral asRDFTerm(final org.eclipse.rdf4j.model.Literal value)
RDF4JIRI asRDFTerm(final org.eclipse.rdf4j.model.IRI value)

Contributed by Guohui Xiao <gh...@gmail.com>

This closes #31

g with '#' will be ignored, and an empty message aborts

Signed-off-by: Stian Soiland-Reyes <st...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/d7df7852
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/d7df7852
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/d7df7852

Branch: refs/heads/COMMONSRDF-47
Commit: d7df7852b87cdeb2f18ab27109fcbae22898444e
Parents: 42363cf 1dd347e
Author: Guohui Xiao <gh...@gmail.com>
Authored: Fri Jan 27 15:56:44 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Fri Jan 27 16:02:18 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/rdf4j/RDF4J.java     | 85 ++++++++++++++++++--
 .../rdf/rdf4j/RDF4JMethodOverloadsTest.java     | 33 ++++++++
 2 files changed, 112 insertions(+), 6 deletions(-)
----------------------------------------------------------------------



[19/45] commons-rdf git commit: Test removal of Triple as well

Posted by st...@apache.org.
Test removal of Triple as well

Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/6b07abf4
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/6b07abf4
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/6b07abf4

Branch: refs/heads/COMMONSRDF-47
Commit: 6b07abf49be486d6985de3c9fe8425adaabc1c38
Parents: d5964a1
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:24:13 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:24:13 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/jena/impl/JenaGraphImpl.java     | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/6b07abf4/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
index e3805b6..76e92f7 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
@@ -24,10 +24,12 @@ import java.util.stream.Stream;
 
 import org.apache.commons.rdf.api.BlankNodeOrIRI;
 import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.api.Literal;
 import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.api.Triple;
 import org.apache.commons.rdf.jena.JenaGraph;
 import org.apache.commons.rdf.jena.JenaRDF;
+import org.apache.commons.rdf.jena.JenaTriple;
 import org.apache.jena.atlas.iterator.Iter;
 import org.apache.jena.graph.Node;
 import org.apache.jena.rdf.model.Model;
@@ -93,8 +95,8 @@ class JenaGraphImpl implements JenaGraph {
 
     @Override
     public void remove(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) {
-        graph.delete(org.apache.jena.graph.Triple.create(toJenaPattern(subject), toJenaPattern(predicate),
-                toJenaPattern(object)));
+        graph.remove(toJenaPattern(subject), toJenaPattern(predicate),
+                toJenaPattern(object));
     }
 
     private Node toJenaPattern(final RDFTerm pattern) {
@@ -106,7 +108,18 @@ class JenaGraphImpl implements JenaGraph {
 
     @Override
     public void remove(final Triple triple) {
-        graph.delete(factory.asJenaTriple(triple));
+        if ((triple.getObject() instanceof Literal) && 
+                ((Literal) triple.getObject()).getLanguageTag().isPresent()) {
+            // COMMONSRDF-51: graph.delete(Triple) would be too restrictive
+            // as it won't delete triples with different lang tag - so 
+            // we'll need to use the pattern matching graph.remove instead()
+            graph.remove(
+                    factory.asJenaNode(triple.getSubject()), 
+                    factory.asJenaNode(triple.getPredicate()),
+                    factory.asJenaNode(triple.getObject()));
+        } else {
+            graph.delete(factory.asJenaTriple(triple));
+        }
     }
 
     @Override


[20/45] commons-rdf git commit: COMMONSRDF-51 Added langtag case tests for dataset

Posted by st...@apache.org.
COMMONSRDF-51 Added langtag case tests for dataset

Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/0470e7c0
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/0470e7c0
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/0470e7c0

Branch: refs/heads/COMMONSRDF-47
Commit: 0470e7c06ab9b8de927c185caf7d56f3f11fc51b
Parents: 6b07abf
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:32:55 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:32:55 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/api/AbstractDatasetTest.java    | 139 +++++++++++++++++++
 1 file changed, 139 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/0470e7c0/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
index 505994f..9e2e192 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
@@ -542,7 +543,145 @@ public abstract class AbstractDatasetTest {
     }
     
 
+    @Test
+    public void containsLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+        
+        dataset.add(null, example1, greeting, upper);
+        
+        // any kind of Triple should match
+        assertTrue(dataset.contains(factory.createQuad(null, example1, greeting, upper)));
+        assertTrue(dataset.contains(factory.createQuad(null, example1, greeting, lower)));
+        assertTrue(dataset.contains(factory.createQuad(null, example1, greeting, mixed)));
+
+        // or as patterns
+        assertTrue(dataset.contains(null, null, null, upper));
+        assertTrue(dataset.contains(null, null, null, lower));
+        assertTrue(dataset.contains(null, null, null, mixed));
+    }
+
+    @Test
+    public void containsLanguageTagsCaseInsensitiveTurkish() {
+        // COMMONSRDF-51: Special test for Turkish issue where
+        // "i".toLowerCase() != "i"
+        // See also:
+        // https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
+
+        // This is similar to the test in AbstractRDFTest, but on a graph
+        Locale defaultLocale = Locale.getDefault();
+        try {
+            Locale.setDefault(Locale.ROOT);
+            final Literal lowerROOT = factory.createLiteral("moi", "fi");
+            final Literal upperROOT = factory.createLiteral("moi", "FI");
+            final Literal mixedROOT = factory.createLiteral("moi", "fI");
+            final IRI exampleROOT = factory.createIRI("http://example.com/s1");
+            final IRI greeting = factory.createIRI("http://example.com/greeting");
+            dataset.add(null, exampleROOT, greeting, mixedROOT);
+
+            Locale turkish = Locale.forLanguageTag("TR");
+            Locale.setDefault(turkish);
+            // If the below assertion fails, then the Turkish
+            // locale no longer have this peculiarity that
+            // we want to test.
+            Assume.assumeFalse("FI".toLowerCase().equals("fi"));
+
+            // Below is pretty much the same as in
+            // containsLanguageTagsCaseInsensitive()
+            final Literal lower = factory.createLiteral("moi", "fi");
+            final Literal upper = factory.createLiteral("moi", "FI");
+            final Literal mixed = factory.createLiteral("moi", "fI");
+
+            final IRI exampleTR = factory.createIRI("http://example.com/s2");
+            dataset.add(null, exampleTR, greeting, upper);
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, upper)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, upperROOT)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, lower)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, lowerROOT)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, mixed)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleTR, greeting, mixedROOT)));
+            assertTrue(dataset.contains(null, exampleTR, null, upper));
+            assertTrue(dataset.contains(null, exampleTR, null, upperROOT));
+            assertTrue(dataset.contains(null, exampleTR, null, lower));
+            assertTrue(dataset.contains(null, exampleTR, null, lowerROOT));
+            assertTrue(dataset.contains(null, exampleTR, null, mixed));
+            assertTrue(dataset.contains(null, exampleTR, null, mixedROOT));
+
+            // What about the triple we added while in ROOT locale?
+            assertTrue(dataset.contains(factory.createQuad(null, exampleROOT, greeting, upper)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleROOT, greeting, lower)));
+            assertTrue(dataset.contains(factory.createQuad(null, exampleROOT, greeting, mixed)));
+            assertTrue(dataset.contains(null, exampleROOT, null, upper));
+            assertTrue(dataset.contains(null, exampleROOT, null, lower));
+            assertTrue(dataset.contains(null, exampleROOT, null, mixed));
+        } finally {
+            Locale.setDefault(defaultLocale);
+        }
+    }
+    
+
+    @Test
+    public void removeLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+        dataset.add(null, example1, greeting, upper);
+
+        // Remove should also honour any case
+        dataset.remove(null, example1, null, mixed);
+        assertFalse(dataset.contains(null, null, greeting, null));
+        
+        dataset.add(null, example1, greeting, lower);
+        dataset.remove(null, example1, null, upper);
+
+        // Check with Triple
+        dataset.add(factory.createQuad(null, example1, greeting, mixed));
+        dataset.remove(factory.createQuad(null, example1, greeting, upper));
+        assertFalse(dataset.contains(null, null, greeting, null));
+    }
+
+    private static Optional<? extends Quad> closableFindAny(Stream<? extends Quad> stream) {
+        try (Stream<? extends Quad> s = stream) {
+            return s.findAny();
+        }
+    }
     
+    @Test
+    public void streamLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+        dataset.add(null, example1, greeting, upper);
+
+        // or as patterns
+        assertTrue(closableFindAny(dataset.stream(null, null, null, upper)).isPresent());
+        assertTrue(closableFindAny(dataset.stream(null, null, null, lower)).isPresent());
+        assertTrue(closableFindAny(dataset.stream(null, null, null, mixed)).isPresent());
+        
+        // Check the quad returned equal a new quad
+        Quad q = closableFindAny(dataset.stream(null, null, null, lower)).get();
+        assertEquals(q, factory.createQuad(null, example1, greeting, mixed));
+    }
+
     /**
      * An attempt to use the Java 8 streams to look up a more complicated query.
      * <p>


[30/45] commons-rdf git commit: COMMONSRDF-55: only adapt our "own" JenaIRI instances

Posted by st...@apache.org.
COMMONSRDF-55: only adapt our "own" JenaIRI instances


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/a383e1f2
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/a383e1f2
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/a383e1f2

Branch: refs/heads/COMMONSRDF-47
Commit: a383e1f2ec18249cab42f73e734cbf742d48fa05
Parents: 98da22a
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Feb 6 15:35:17 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Feb 6 15:35:17 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/jena/impl/AbstractQuadLike.java | 30 +++++++++++++++-
 .../rdf/jena/DefaultGraphInQuadTest.java        | 36 +++++++++++++-------
 2 files changed, 53 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/a383e1f2/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
index 6127ee6..fbe4085 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/AbstractQuadLike.java
@@ -27,6 +27,7 @@ import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.jena.JenaQuad;
 import org.apache.commons.rdf.jena.JenaQuadLike;
 import org.apache.commons.rdf.jena.JenaRDF;
+import org.apache.commons.rdf.jena.JenaRDFTerm;
 import org.apache.commons.rdf.jena.JenaTriple;
 import org.apache.jena.graph.Triple;
 import org.apache.jena.sparql.core.Quad;
@@ -67,9 +68,35 @@ abstract class AbstractQuadLike<S extends RDFTerm, P extends RDFTerm, O extends
         private RDFTerm defaultGraph = internalJenaFactory.createRDFTerm(Quad.defaultGraphIRI, salt);
         private RDFTerm defaultGraphNodeGenerated = internalJenaFactory.createRDFTerm(Quad.defaultGraphNodeGenerated, salt);
         
+        /**
+         * Check if RDFTerm is an IRI that matches the two Jena default graph
+         * constants (Even if they are from another RDF implementation).
+         * <p>
+         * This checker is "softer" than {@link #isNotDefaultGraphJenaNode(RDFTerm)}
+         * 
+         * @param graphName
+         *            potential graph name IRI or BlankNode
+         * @return <code>true</code> if the RDFTerm does not indicate a default
+         *         graph in Jena
+         */
         public boolean isNotDefaultGraph(RDFTerm graphName) {
             return !(graphName.equals(defaultGraph) || graphName.equals(defaultGraphNodeGenerated)); 
         }
+
+        /**
+         * Check if RDFTerm has an IRI that matches the two Jena default graph
+         * constants (but only if it is an JenaRDFTerm instance)
+         * 
+         * @param graphName
+         *            potential graph name IRI or BlankNode
+         * @return <code>true</code> if the RDFTerm does not indicate a default
+         *         graph in Jena
+         */         
+        public boolean isNotDefaultGraphJenaNode(RDFTerm graphName) {
+            return ! (graphName instanceof JenaRDFTerm) ||
+                    ! Quad.isDefaultGraph(((JenaRDFTerm)graphName).asJenaNode());                      
+             
+        }
     }
     
     private static DefaultGraphChecker defaultGraphChecker = new DefaultGraphChecker();
@@ -86,7 +113,8 @@ abstract class AbstractQuadLike<S extends RDFTerm, P extends RDFTerm, O extends
         this.subject = Objects.requireNonNull(subject);
         this.predicate = Objects.requireNonNull(predicate);
         this.object = Objects.requireNonNull(object);
-        this.graphName = Objects.requireNonNull(graphName).filter(defaultGraphChecker::isNotDefaultGraph);
+        // Enforce 
+        this.graphName = Objects.requireNonNull(graphName).filter(defaultGraphChecker::isNotDefaultGraphJenaNode);
     }
 
     AbstractQuadLike(final S subject, final P predicate, final O object) {

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/a383e1f2/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java
----------------------------------------------------------------------
diff --git a/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java b/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java
index 477f460..1665d25 100644
--- a/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java
+++ b/jena/src/test/java/org/apache/commons/rdf/jena/DefaultGraphInQuadTest.java
@@ -29,12 +29,13 @@ import org.apache.jena.sparql.core.Quad;
 import org.junit.Test;
 
 /**
- * COMMONSRDF-55: Ensure correct handling of 
+ * COMMONSRDF-55: Handling of 
  * Jena's default graph IRI urn:x-arq:DefaultGraph
  */
 public class DefaultGraphInQuadTest {
     
     JenaRDF rdf = new JenaRDF();
+    SimpleRDF simpleRDF = new SimpleRDF();
     IRI example = rdf.createIRI("http://example.com/");
     Node exampleJena = NodeFactory.createURI("http://example.com/");
     
@@ -50,19 +51,28 @@ public class DefaultGraphInQuadTest {
     public void createFromDefaultGraphIRI() throws Exception {
         JenaIRI defaultGraph = (JenaIRI) rdf.asRDFTerm(Quad.defaultGraphIRI);        
         JenaQuad q = rdf.createQuad(defaultGraph, example, example, example);
+        // NOTE: JenaRDF specially recognize this JenaIRI constant, 
+        // even if this breaks the SHOULD of RDF.createQuad()
         assertTrue(q.asJenaQuad().isDefaultGraph());
         assertEquals(Quad.defaultGraphIRI,  q.asJenaQuad().getGraph());
         assertFalse(q.getGraphName().isPresent());
+        // thus we can't require 
+        //assertEquals(defaultGraph, q.getGraphName().get());
     }
 
     @Test
     public void createFromForeignDefaultGraph() throws Exception {
         // What if <urn:x-arq:DefaultGraph> appear in a non-Jena IRI?
-        IRI foreignDefaultGraph = new SimpleRDF().createIRI(Quad.defaultGraphIRI.getURI());
+        IRI foreignDefaultGraph = simpleRDF.createIRI(Quad.defaultGraphIRI.getURI());
         JenaQuad q = rdf.createQuad(foreignDefaultGraph, example, example, example);
+        // As the IRI was NOT a JenaIRI we preserve it as-is,
+        // rather than replacing it with Optional.empty()        
         assertTrue(q.asJenaQuad().isDefaultGraph());
+        assertTrue(q.getGraphName().isPresent()); // INCONSISTENT with above
         assertEquals(Quad.defaultGraphIRI,  q.asJenaQuad().getGraph());
-        assertFalse(q.getGraphName().isPresent());
+        assertEquals(foreignDefaultGraph, q.getGraphName().get());
+        // Note that adding such a quad to a Dataset would still "convert" it to
+        // Optional.empty() 
     }
     
 
@@ -71,23 +81,25 @@ public class DefaultGraphInQuadTest {
         // What if <urn:x-arq:DefaultGraphNode> appear as an IRI instance?
         IRI foreignDefaultGraph = rdf.createIRI(Quad.defaultGraphNodeGenerated.getURI());
         JenaQuad q = rdf.createQuad(foreignDefaultGraph, example, example, example);
+        // NOTE: JenaRDF specially recognize this JenaIRI constant, 
+        // even if this breaks the SHOULD of RDF.createQuad()
         assertTrue(q.asJenaQuad().isDefaultGraph());
-        assertFalse(q.getGraphName().isPresent());
-        // Unfortunately  Quad.defaultGraphNodeGenerated is not preserved
-        // within JenaQuad
+        assertFalse(q.getGraphName().isPresent()); // CONSISTENT with above 
+        // Unfortunately Quad.defaultGraphNodeGenerated is not preserved:
         //assertEquals(Quad.defaultGraphNodeGenerated, q.asJenaQuad().getGraph());
     }
 
     @Test
     public void createFromDefaultGraphNodeGeneratedIRIString() throws Exception {
         // What if <urn:x-arq:DefaultGraphNode> appear in a non-Jena IRI?
-        IRI foreignDefaultGraph = (IRI) rdf.asRDFTerm((Quad.defaultGraphNodeGenerated));
+        IRI foreignDefaultGraph = (IRI) simpleRDF.createIRI(Quad.defaultGraphNodeGenerated.getURI());
         JenaQuad q = rdf.createQuad(foreignDefaultGraph, example, example, example);
-        assertTrue(q.asJenaQuad().isDefaultGraph());
-        assertFalse(q.getGraphName().isPresent());
-        // Unfortunately  Quad.defaultGraphNodeGenerated is not preserved
-        // within JenaQuad
-        assertEquals(Quad.defaultGraphNodeGenerated, q.asJenaQuad().getGraph());
+        // We'll expect JenaRDF to preserve the graph IRI as-is        
+        assertTrue(q.asJenaQuad().isDefaultGraph()); 
+        assertTrue(q.getGraphName().isPresent()); // INCONSISTENT WITH above
+        // Now Quad.defaultGraphNodeGenerated is preserved at both ends
+        assertEquals(Quad.defaultGraphNodeGenerated,  q.asJenaQuad().getGraph());
+        assertEquals(foreignDefaultGraph, q.getGraphName().get());
     }
 
     


[21/45] commons-rdf git commit: COMMONSRDF-51: Make sure graph.remove(Triple) ignores langtag case

Posted by st...@apache.org.
COMMONSRDF-51: Make sure graph.remove(Triple) ignores langtag case

Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/3cf27116
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/3cf27116
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/3cf27116

Branch: refs/heads/COMMONSRDF-47
Commit: 3cf271162416df98e63b4e40eb08007a3a754f5a
Parents: 0470e7c
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 26 14:33:35 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 26 14:33:35 2017 +0000

----------------------------------------------------------------------
 .../test/java/org/apache/commons/rdf/api/AbstractGraphTest.java | 5 ++++-
 .../java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java    | 1 -
 2 files changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3cf27116/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 8245b5d..3020704 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -399,7 +399,8 @@ public abstract class AbstractGraphTest {
 
         final Graph graph = factory.createGraph();
         graph.add(example1, greeting, upper);
-
+        
+        // any kind of Triple should match
         assertTrue(graph.contains(factory.createTriple(example1, greeting, upper)));
         assertTrue(graph.contains(factory.createTriple(example1, greeting, lower)));
         assertTrue(graph.contains(factory.createTriple(example1, greeting, mixed)));
@@ -491,8 +492,10 @@ public abstract class AbstractGraphTest {
         graph.add(example1, greeting, lower);
         graph.remove(example1, null, upper);
 
+        // Check with Triple
         graph.add(factory.createTriple(example1, greeting, mixed));
         graph.remove(factory.createTriple(example1, greeting, upper));
+        assertFalse(graph.contains(null, greeting, null));
     }
 
     private static Optional<? extends Triple> closableFindAny(Stream<? extends Triple> stream) {

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/3cf27116/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
index 76e92f7..55256e2 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/impl/JenaGraphImpl.java
@@ -29,7 +29,6 @@ import org.apache.commons.rdf.api.RDFTerm;
 import org.apache.commons.rdf.api.Triple;
 import org.apache.commons.rdf.jena.JenaGraph;
 import org.apache.commons.rdf.jena.JenaRDF;
-import org.apache.commons.rdf.jena.JenaTriple;
 import org.apache.jena.atlas.iterator.Iter;
 import org.apache.jena.graph.Node;
 import org.apache.jena.rdf.model.Model;


[31/45] commons-rdf git commit: COMMONSRDF-55: JavaDoc of isDefaultGraph() recognition

Posted by st...@apache.org.
COMMONSRDF-55: JavaDoc of isDefaultGraph() recognition


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/7bbff257
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/7bbff257
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/7bbff257

Branch: refs/heads/COMMONSRDF-47
Commit: 7bbff2573cb1567cd1c414fa9824cbdb8264aa0b
Parents: a383e1f
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 14:17:20 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 14:17:20 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/jena/JenaRDF.java    | 32 ++++++++++++++++++++
 1 file changed, 32 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/7bbff257/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDF.java
----------------------------------------------------------------------
diff --git a/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDF.java b/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDF.java
index 92c0adb..d10d16d 100644
--- a/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDF.java
+++ b/jena/src/main/java/org/apache/commons/rdf/jena/JenaRDF.java
@@ -151,6 +151,18 @@ public final class JenaRDF implements RDF {
         return internalJenaFactory.createTriple(subject, predicate, object);
     }
 
+    /**
+     * {@inheritDoc}
+     * <p>
+     * In addition to supporting a <code>graphName</code> of <code>null</code>
+     * for representing a triple in the <em>default graph</em>, this method also
+     * recognize a {@link JenaIRI} which {@link JenaRDFTerm#asJenaNode()}
+     * represent the default graph according to
+     * {@link org.apache.jena.sparql.core.Quad#isDefaultGraph(Node)}, in which
+     * case the returned JenaQuad will have a {@link Quad#getGraphName()} of
+     * {@link Optional#empty()} rather than the provided IRI.
+     * 
+     */
     @Override
     public JenaQuad createQuad(final BlankNodeOrIRI graphName, final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object)
             throws IllegalArgumentException, UnsupportedOperationException {
@@ -187,6 +199,14 @@ public final class JenaRDF implements RDF {
      * The <em>generalized quad</em> supports any {@link RDFTerm} as its
      * {@link QuadLike#getSubject()} {@link QuadLike#getPredicate()},
      * {@link QuadLike#getObject()} or {@link QuadLike#getObject()}.
+     * <p>
+     * In addition to supporting a <code>graphName</code> of <code>null</code>
+     * for representing a triple in the <em>default graph</em>, this method also
+     * recognize a {@link JenaIRI} which {@link JenaRDFTerm#asJenaNode()}
+     * represent the default graph according to
+     * {@link org.apache.jena.sparql.core.Quad#isDefaultGraph(Node)}, in which
+     * case the returned JenaQuad will have a {@link Quad#getGraphName()} of
+     * {@link Optional#empty()} rather than the provided IRI.
      * 
      * @see #createQuad(BlankNodeOrIRI, BlankNodeOrIRI, IRI, RDFTerm)
      * @see #createGeneralizedTriple(RDFTerm, RDFTerm, RDFTerm)
@@ -345,6 +365,10 @@ public final class JenaRDF implements RDF {
      * {@link JenaRDF} instance in combination with
      * {@link Node#getBlankNodeId()} for the purpose of its
      * {@link BlankNode#uniqueReference()}.
+     * <p>
+     * If the provided quad {@link org.apache.jena.sparql.core.Quad#isDefaultGraph()},
+     * the returned {@link JenaQuadLike} has a {@link JenaQuadLike#getGraphName()} 
+     * of {@link Optional#empty()}.
      *
      * @see #asQuad(org.apache.jena.sparql.core.Quad)
      * @see #asGeneralizedTriple(org.apache.jena.graph.Triple)
@@ -407,6 +431,10 @@ public final class JenaRDF implements RDF {
      * {@link BlankNode} will use a {@link UUID} salt from this {@link JenaRDF}
      * instance in combination with {@link Node#getBlankNodeId()} for the
      * purpose of its {@link BlankNode#uniqueReference()}.
+     * <p>
+     * If the provided quad {@link org.apache.jena.sparql.core.Quad#isDefaultGraph()},
+     * the returned {@link JenaQuad} has a {@link Quad#getGraphName()} 
+     * of {@link Optional#empty()}.
      * 
      * @param quad
      *            Jena quad
@@ -510,6 +538,10 @@ public final class JenaRDF implements RDF {
      * factory's {@link RDF#createBlankNode(String)} will be used, meaning that
      * care should be taken if reusing an {@link RDF} instance for multiple
      * conversion sessions.
+     * <p>
+     * If the provided quad {@link org.apache.jena.sparql.core.Quad#isDefaultGraph()},
+     * the returned {@link JenaQuadLike} has a {@link JenaQuadLike#getGraphName()} 
+     * of {@link Optional#empty()}.
      * 
      * @see #asQuad(org.apache.jena.sparql.core.Quad)
      * @see #asGeneralizedQuad(org.apache.jena.sparql.core.Quad)


[18/45] commons-rdf git commit: remove redundant type casts

Posted by st...@apache.org.
remove redundant type casts


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/ed787cf7
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/ed787cf7
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/ed787cf7

Branch: refs/heads/COMMONSRDF-47
Commit: ed787cf7fef42c197f77a66d78ced2a6e6ef0398
Parents: 94fb7c6
Author: Guohui Xiao <gh...@gmail.com>
Authored: Wed Jan 25 19:13:44 2017 +0100
Committer: Guohui Xiao <gh...@gmail.com>
Committed: Wed Jan 25 19:13:44 2017 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/commons/rdf/rdf4j/RDF4J.java   | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/ed787cf7/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
index b6d2544..31002cb 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
@@ -552,13 +552,13 @@ public final class RDF4J implements RDF {
     @Override
     public RDF4JBlankNode createBlankNode() {
         final BNode bnode = getValueFactory().createBNode();
-        return (RDF4JBlankNode) asRDFTerm(bnode);
+        return asRDFTerm(bnode);
     }
 
     @Override
     public RDF4JBlankNode createBlankNode(final String name) {
         final BNode bnode = getValueFactory().createBNode(name);
-        return (RDF4JBlankNode) asRDFTerm(bnode);
+        return asRDFTerm(bnode);
     }
 
     /**
@@ -584,13 +584,13 @@ public final class RDF4J implements RDF {
 
     @Override
     public RDF4JIRI createIRI(final String iri) throws IllegalArgumentException {
-        return (RDF4JIRI) asRDFTerm(getValueFactory().createIRI(iri));
+        return asRDFTerm(getValueFactory().createIRI(iri));
     }
 
     @Override
     public RDF4JLiteral createLiteral(final String lexicalForm) throws IllegalArgumentException {
         final org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm);
-        return (RDF4JLiteral) asRDFTerm(lit);
+        return asRDFTerm(lit);
     }
 
     @Override
@@ -598,14 +598,14 @@ public final class RDF4J implements RDF {
             throws IllegalArgumentException {
         final org.eclipse.rdf4j.model.IRI iri = getValueFactory().createIRI(dataType.getIRIString());
         final org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm, iri);
-        return (org.apache.commons.rdf.api.Literal) asRDFTerm(lit);
+        return asRDFTerm(lit);
     }
 
     @Override
     public org.apache.commons.rdf.api.Literal createLiteral(final String lexicalForm, final String languageTag)
             throws IllegalArgumentException {
         final org.eclipse.rdf4j.model.Literal lit = getValueFactory().createLiteral(lexicalForm, languageTag);
-        return (org.apache.commons.rdf.api.Literal) asRDFTerm(lit);
+        return asRDFTerm(lit);
     }
 
     @Override


[08/45] commons-rdf git commit: fixed more indentation (mixed tabs)

Posted by st...@apache.org.
fixed more indentation (mixed tabs)


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/42363cf3
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/42363cf3
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/42363cf3

Branch: refs/heads/COMMONSRDF-47
Commit: 42363cf358ed259a98aa8eccefac7d76f024bdc6
Parents: edb7d80
Author: Sergio Fern�ndez <wi...@apache.org>
Authored: Tue Jan 17 11:52:48 2017 +0100
Committer: Sergio Fern�ndez <wi...@apache.org>
Committed: Tue Jan 17 11:52:58 2017 +0100

----------------------------------------------------------------------
 pom.xml | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/42363cf3/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 9d7846c..94e43cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,7 +49,7 @@
         <commons.jira.id>COMMONSRDF</commons.jira.id>
         <commons.jira.pid>12316620</commons.jira.pid>
         <commons.site.path>rdf</commons.site.path>
-	<!--
+    <!--
         <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commonsrdf/content/</commons.scmPubUrl>
         <commons.scmPubCheckoutDirectory>${project.build.directory}/site-content</commons.scmPubCheckoutDirectory>
         -->
@@ -160,7 +160,7 @@
             <timezone>+1</timezone>
         </developer>
         <developer>
-	        <id>ansell</id>
+            <id>ansell</id>
             <name>Peter Ansell</name>
             <email>ansell[at]apache[dot]org</email>
             <url>https://github.com/ansell</url>
@@ -287,10 +287,10 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-assembly-plugin</artifactId>
-		<configuration>
-		    <finalName>apache-commons-rdf-${project.version}</finalName>
-		    <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
-		</configuration>
+                <configuration>
+                    <finalName>apache-commons-rdf-${project.version}</finalName>
+                    <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
+                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
@@ -329,9 +329,9 @@
                 <artifactId>maven-release-plugin</artifactId>
                 <configuration>
                     <useReleaseProfile>true</useReleaseProfile>
-		    <!-- TODO: Can we use apache-parent's apache-release rather than common-parent's release?
-			It seems to force adding a -source-release
-		    -->
+            <!-- TODO: Can we use apache-parent's apache-release rather than common-parent's release?
+            It seems to force adding a -source-release
+            -->
                     <releaseProfiles>release</releaseProfiles>
                     <goals>deploy</goals>
                     <autoVersionSubmodules>true</autoVersionSubmodules>
@@ -450,7 +450,7 @@
             <oldVersionPattern>\d+\.\d+\.\d+\-incubating</oldVersionPattern>
             <!-- japicmp requires "mvn package site" - below means "mvn
              site" still works (but without japicmp report) -->
-	    <ignoreMissingNewVersion>true</ignoreMissingNewVersion>
+        <ignoreMissingNewVersion>true</ignoreMissingNewVersion>
           </parameter>
         </configuration>
           </plugin>
@@ -574,12 +574,12 @@
             <id>release</id>
         <!-- extends the release profile from commons -->
             <build>
-		    <!--
+            <!--
                 <finalName>apache-commons-rdf-${project.version}</finalName>
 -->
                 <plugins>
                     <plugin>
-			    <!-- Avoid making *.asc.asc -->
+                <!-- Avoid making *.asc.asc -->
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-gpg-plugin</artifactId>
                         <configuration>


[09/45] commons-rdf git commit: Merge remote-tracking branch 'origin/master' into COMMONSRDF-51-langtag-lcase

Posted by st...@apache.org.
Merge remote-tracking branch 'origin/master' into COMMONSRDF-51-langtag-lcase


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/25cc1f18
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/25cc1f18
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/25cc1f18

Branch: refs/heads/COMMONSRDF-47
Commit: 25cc1f1839c9d99adbaf92ab740d482eaf0f4606
Parents: 6f11372 42363cf
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 10:58:51 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 10:58:51 2017 +0000

----------------------------------------------------------------------
 jena/pom.xml        |  19 +++-
 jsonld-java/pom.xml |  19 +++-
 pom.xml             | 271 +++++++++++++++++++++++------------------------
 rdf4j/pom.xml       |   7 +-
 simple/pom.xml      |  19 +++-
 5 files changed, 180 insertions(+), 155 deletions(-)
----------------------------------------------------------------------



[15/45] commons-rdf git commit: COMMONSRDF-51: g.remove()/stream() case insensitive lang testing

Posted by st...@apache.org.
COMMONSRDF-51: g.remove()/stream() case insensitive lang testing


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/f5766fe5
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/f5766fe5
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/f5766fe5

Branch: refs/heads/COMMONSRDF-47
Commit: f5766fe5365b41fab01d1745543bf2a72a8b19d3
Parents: 4bc08f6
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 12:06:07 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 12:06:57 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/api/AbstractGraphTest.java      | 64 +++++++++++++++-----
 1 file changed, 49 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/f5766fe5/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 89e91f2..4856ed4 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -408,13 +408,6 @@ public abstract class AbstractGraphTest {
         assertTrue(graph.contains(null, null, upper));
         assertTrue(graph.contains(null, null, lower));
         assertTrue(graph.contains(null, null, mixed));
-
-        // Remove should also honour any case
-        graph.remove(example1, null, mixed);
-//        Triple t = graph.stream().findAny().get();
-//        System.out.println(t);
-        // no more greetings of any kind
-        assertFalse(graph.contains(null, greeting, null));
     }
 
     @Test
@@ -463,9 +456,6 @@ public abstract class AbstractGraphTest {
             assertTrue(g.contains(exampleTR, null, lowerROOT));
             assertTrue(g.contains(exampleTR, null, mixed));
             assertTrue(g.contains(exampleTR, null, mixedROOT));
-            g.remove(exampleTR, null, mixed);
-            // No more greetings for exampleTR
-            assertFalse(g.contains(exampleTR, null, null));
 
             // What about the triple we added while in ROOT locale?
             assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, upper)));
@@ -474,15 +464,59 @@ public abstract class AbstractGraphTest {
             assertTrue(g.contains(exampleROOT, null, upper));
             assertTrue(g.contains(exampleROOT, null, lower));
             assertTrue(g.contains(exampleROOT, null, mixed));
-            g.remove(exampleROOT, null, mixed);
-            // No more greetings of any kind
-            assertFalse(g.contains(null, null, null));
-
-
         } finally {
             Locale.setDefault(defaultLocale);
         }
+    }
+    
+
+    @Test
+    public void removeLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
 
+        final Graph graph = factory.createGraph();
+        graph.add(example1, greeting, upper);
+
+        // Remove should also honour any case
+        graph.remove(example1, null, mixed);
+        assertFalse(graph.contains(null, greeting, null));
+        
+        graph.add(example1, greeting, lower);
+        graph.remove(example1, null, upper);
+
+        graph.add(factory.createTriple(example1, greeting, mixed));
+        graph.remove(factory.createTriple(example1, greeting, upper));
+    }
+
+    @Test
+    public void streamLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+        final Graph graph = factory.createGraph();
+        graph.add(example1, greeting, upper);
+
+        // or as patterns
+        assertTrue(graph.stream(null, null, upper).findAny().isPresent());
+        assertTrue(graph.stream(null, null, lower).findAny().isPresent());
+        assertTrue(graph.stream(null, null, mixed).findAny().isPresent());
+        
+        // Check the triples returned equal a new triple
+        Triple t = graph.stream(null, null, lower).findAny().get();
+        assertEquals(t, factory.createTriple(example1, greeting, mixed));
     }
 
     private void notEquals(final BlankNodeOrIRI node1, final BlankNodeOrIRI node2) {


[17/45] commons-rdf git commit: COMMONSRDF-54: overloads of RDF4J#asRDFTerm

Posted by st...@apache.org.
COMMONSRDF-54: overloads of RDF4J#asRDFTerm


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/94fb7c6c
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/94fb7c6c
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/94fb7c6c

Branch: refs/heads/COMMONSRDF-47
Commit: 94fb7c6cfaf3c18a8456756758d1beb45983c583
Parents: 42363cf
Author: Guohui Xiao <gh...@gmail.com>
Authored: Wed Jan 25 18:56:09 2017 +0100
Committer: Guohui Xiao <gh...@gmail.com>
Committed: Wed Jan 25 18:57:29 2017 +0100

----------------------------------------------------------------------
 .../org/apache/commons/rdf/rdf4j/RDF4J.java     | 53 ++++++++++++++++++++
 1 file changed, 53 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/94fb7c6c/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
----------------------------------------------------------------------
diff --git a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
index 2d39bbd..b6d2544 100644
--- a/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
+++ b/rdf4j/src/main/java/org/apache/commons/rdf/rdf4j/RDF4J.java
@@ -37,6 +37,7 @@ import org.apache.commons.rdf.api.Triple;
 import org.apache.commons.rdf.api.TripleLike;
 import org.apache.commons.rdf.rdf4j.impl.InternalRDF4JFactory;
 import org.eclipse.rdf4j.model.BNode;
+import org.eclipse.rdf4j.model.Literal;
 import org.eclipse.rdf4j.model.Model;
 import org.eclipse.rdf4j.model.Resource;
 import org.eclipse.rdf4j.model.Statement;
@@ -233,6 +234,58 @@ public final class RDF4J implements RDF {
     }
 
     /**
+     *
+     * Adapt a RDF4J
+     * {@link org.eclipse.rdf4j.model.BNode} as a Commons RDF
+     * {@link org.apache.commons.rdf.api.BlankNode}
+     * <p>
+     * For the purpose of {@link BlankNode} equivalence, this method will use an
+     * internal salt UUID that is unique per instance of {@link RDF4J}.
+     * <p>
+     * <strong>NOTE:</strong> If combining RDF4J values from multiple
+     * repositories or models, then their {@link BNode}s may have the same
+     * {@link BNode#getID()}, which with this method would become equivalent
+     * according to {@link BlankNode#equals(Object)} and
+     * {@link BlankNode#uniqueReference()}, unless a separate {@link RDF4J}
+     * instance is used per RDF4J repository/model.
+     *
+     * @param value
+     *            The RDF4J {@link BNode} to convert.
+     * @return A {@link RDF4JBlankNode} that corresponds to the RDF4J BNode
+     */
+    public RDF4JBlankNode asRDFTerm(final BNode value) {
+        return rdf4j.createBlankNodeImpl(value, salt);
+    }
+
+    /**
+     *
+     * Adapt a RDF4J
+     * {@link org.eclipse.rdf4j.model.Literal} as a Commons RDF
+     * {@link org.apache.commons.rdf.api.Literal}
+     * <p>
+     * @param value
+     *            The RDF4J {@link Literal} to convert.
+     * @return A {@link RDF4JLiteral} that corresponds to the RDF4J literal
+     */
+    public RDF4JLiteral asRDFTerm(final Literal value) {
+        return rdf4j.createLiteralImpl(value);
+    }
+
+    /**
+     *
+     * Adapt a RDF4J
+     * {@link org.eclipse.rdf4j.model.IRI} as a Commons RDF
+     * {@link org.apache.commons.rdf.api.IRI}
+     * <p>
+     * @param value
+     *            The RDF4J {@link Value} to convert.
+     * @return A {@link RDF4JIRI} that corresponds to the RDF4J IRI
+     */
+    public RDF4JIRI asRDFTerm(final org.eclipse.rdf4j.model.IRI value) {
+        return rdf4j.createIRIImpl(value);
+    }
+
+    /**
      * Adapt a RDF4J {@link Value} as a Commons RDF {@link RDFTerm}.
      * <p>
      * The value will be of the same kind as the term, e.g. a


[06/45] commons-rdf git commit: updated developers information

Posted by st...@apache.org.
updated developers information


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/b9d6751f
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/b9d6751f
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/b9d6751f

Branch: refs/heads/COMMONSRDF-47
Commit: b9d6751f5e231ee3cdc4e58b3679bccb8f298606
Parents: b3a013f
Author: Sergio Fern�ndez <wi...@apache.org>
Authored: Tue Jan 17 11:48:13 2017 +0100
Committer: Sergio Fern�ndez <wi...@apache.org>
Committed: Tue Jan 17 11:48:13 2017 +0100

----------------------------------------------------------------------
 pom.xml | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/b9d6751f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 36d0ba0..d89cafc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -99,7 +99,7 @@
             <email>lewismc[at]apache[dot]org</email>
             <roles>
                 <role>Committer</role>
-                <role>PPMC Member</role>
+                <role>Emeritus PPMC Member</role>
                 <role>Emeritus Champion</role>
             </roles>
             <timezone>+1</timezone>
@@ -154,12 +154,13 @@
             <email>britter[at]apache[dot]org</email>
             <roles>
                 <role>Committer</role>
+                <role>PMC Member</role>
                 <role>Emeritus PPMC Member</role>
             </roles>
             <timezone>+1</timezone>
         </developer>
         <developer>
-	    <id>ansell</id>
+	        <id>ansell</id>
             <name>Peter Ansell</name>
             <email>ansell[at]apache[dot]org</email>
             <url>https://github.com/ansell</url>
@@ -169,15 +170,6 @@
                 <role>Emeritus PPMC Member</role>
             </roles>
         </developer>
-        <developer>
-	    <id>ajs6f</id>
-            <name>Adam Soroka</name>
-            <email>ajs6f[at]apache[dot]org</email>
-            <roles>
-                <role>Reviewer</role>
-            </roles>
-            <timezone>+0</timezone>
-        </developer>
     </developers>
 
     <contributors>
@@ -225,6 +217,14 @@
             </roles>
             <timezone>+1</timezone>
         </contributor>
+        <contributor>
+            <name>Adam Soroka</name>
+            <email>ajs6f[at]apache[dot]org</email>
+            <roles>
+                <role>Reviewer</role>
+            </roles>
+            <timezone>+0</timezone>
+        </contributor>
     </contributors>
 
     <modules>


[43/45] commons-rdf git commit: COMMONSRDF-57: Verify JSON-LD parses with mega-classpath

Posted by st...@apache.org.
COMMONSRDF-57: Verify JSON-LD parses with mega-classpath


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/b1a31157
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/b1a31157
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/b1a31157

Branch: refs/heads/COMMONSRDF-47
Commit: b1a31157ee683e695501d77ece7d012c8066b1c0
Parents: df6c1a2
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Feb 9 00:21:15 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Feb 9 00:27:20 2017 +0000

----------------------------------------------------------------------
 integration-tests/pom.xml                       |   3 +-
 .../rdf/integrationtests/JSONLDParsingTest.java | 164 +++++++++++++++++++
 .../src/test/resources/alice-cached.jsonld      |   9 +
 .../src/test/resources/alice-embedded.jsonld    |  16 ++
 .../src/test/resources/contexts/example.jsonld  |  11 ++
 .../src/test/resources/jarcache.json            |  10 ++
 6 files changed, 212 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/b1a31157/integration-tests/pom.xml
----------------------------------------------------------------------
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 04496ef..4eeb7ec 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -49,7 +49,8 @@
 			<version>${project.version}</version>
 		</dependency>
 		<!-- NOTE: This might be quite version-sensitive (including transitives) 
-			as both rdf4j and jena depend on jsonld -->
+			See the JSONLDParsingTest.
+			 -->
 		<dependency>
 			<groupId>${project.groupId}</groupId>
 			<artifactId>commons-rdf-jsonld-java</artifactId>

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/b1a31157/integration-tests/src/test/java/org/apache/commons/rdf/integrationtests/JSONLDParsingTest.java
----------------------------------------------------------------------
diff --git a/integration-tests/src/test/java/org/apache/commons/rdf/integrationtests/JSONLDParsingTest.java b/integration-tests/src/test/java/org/apache/commons/rdf/integrationtests/JSONLDParsingTest.java
new file mode 100644
index 0000000..3bd406a
--- /dev/null
+++ b/integration-tests/src/test/java/org/apache/commons/rdf/integrationtests/JSONLDParsingTest.java
@@ -0,0 +1,164 @@
+/**
+ * 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.
+ */
+package org.apache.commons.rdf.integrationtests;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import org.apache.commons.rdf.api.Graph;
+import org.apache.commons.rdf.api.IRI;
+import org.apache.commons.rdf.api.Literal;
+import org.apache.commons.rdf.api.RDF;
+import org.apache.commons.rdf.jena.JenaDataset;
+import org.apache.commons.rdf.jena.JenaRDF;
+import org.apache.commons.rdf.jsonldjava.JsonLdGraph;
+import org.apache.commons.rdf.jsonldjava.JsonLdRDF;
+import org.apache.commons.rdf.rdf4j.RDF4J;
+import org.apache.commons.rdf.rdf4j.RDF4JGraph;
+import org.apache.commons.rdf.simple.SimpleRDF;
+import org.apache.jena.riot.RDFDataMgr;
+import org.eclipse.rdf4j.model.Model;
+import org.eclipse.rdf4j.rio.RDFFormat;
+import org.eclipse.rdf4j.rio.Rio;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.github.jsonldjava.core.JsonLdError;
+import com.github.jsonldjava.core.JsonLdOptions;
+import com.github.jsonldjava.core.JsonLdProcessor;
+import com.github.jsonldjava.core.RDFDataset;
+import com.github.jsonldjava.utils.JsonUtils;
+
+/**
+ * COMMONSRDF-57 etc: For upgrades, ensure JSONLD-Java parses well in all
+ * implementations even if they might have slightly incompatible versions of
+ * their dependencies.
+ * <p>
+ * The <code>*Embedded</code> tests parse <code>alice-embedded.jsonld</code>
+ * from the test classpath through Jena, RDF4J and JSONLD-Java and verifies it
+ * contains the expected triples using {@link #checkGraph(Graph)}. This ensures
+ * that the versions of JSONLD-Java and Jackson are compatible with Jena and
+ * RDF4J.
+ * <p>
+ * The <code>*Cached</code> tests parse <code>alice-cached.jsonld</code>, which
+ * references an external <code>@context</code> of http://example.com/context -
+ * but using the <a href=
+ * "https://github.com/jsonld-java/jsonld-java#loading-contexts-from-classpathjar">jarcache.json</a>
+ * mechanism of JSONLD-Java, this context will be loaded from
+ * <code>contexts/example.jsonld</code> on the test classpath instead. This
+ * ensures that the versions of HTTPClient is compatible with JSONLD-Java
+ * (however it does not check that it is compatible with Jena and
+ * RDF4J's external fetching of RDF documents).
+ * 
+ */
+public class JSONLDParsingTest {
+
+    static RDF rdf = new SimpleRDF();
+    static IRI alice = rdf.createIRI("http://example.com/Alice");
+    static IRI name = rdf.createIRI("http://schema.org/name");
+    static IRI type = rdf.createIRI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
+    static IRI person = rdf.createIRI("http://schema.org/Person");
+    static Literal aliceWLand = rdf.createLiteral("Alice W. Land");
+
+    URL aliceCached = getClass().getResource("/alice-cached.jsonld");
+    URL aliceEmbedded = getClass().getResource("/alice-embedded.jsonld");
+
+    /**
+     * Pre-test that src/test/resources files are on the classpath
+     * 
+     */
+    @Before
+    public void checkTestResources() throws Exception {
+        aliceCached.openStream().close();
+        aliceEmbedded.openStream().close();
+        // Used by JSONLD-Java to avoid external dependencies. See
+        // https://github.com/jsonld-java/jsonld-java#loading-contexts-from-classpathjar
+        getClass().getResourceAsStream("/jarcache.json").close();
+        getClass().getResourceAsStream("/contexts/example.jsonld").close();
+        // (We'll use these to ensure our HTTPClient dependency works)
+    }
+
+    private void checkGraph(Graph g) {
+        assertTrue(g.contains(alice, name, aliceWLand));
+        assertTrue(g.contains(alice, type, person));
+    }
+
+    @Test
+    public void jenaParseEmbedded() throws Exception {
+        jenaParse(aliceEmbedded);
+    }
+
+    @Test
+    public void jenaParseCached() throws Exception {
+        // Check if HTTPClient cache is used from 
+        // jarcache.json
+        jenaParse(aliceCached);
+    }
+
+    private void jenaParse(URL url) {
+        JenaDataset dataset = new JenaRDF().createDataset();
+        RDFDataMgr.read(dataset.asJenaDatasetGraph(), url.toExternalForm());
+        checkGraph(dataset.getGraph());
+    }
+
+    @Test
+    public void rdf4jParseEmbedded() throws Exception {
+        rdf4jParse(aliceEmbedded);
+    }
+
+    @Test
+    public void rdf4jParseCached() throws Exception {
+        // Check if HTTPClient cache is used from 
+        // jarcache.json
+        rdf4jParse(aliceCached);
+    }
+
+    private void rdf4jParse(URL url) throws IOException {
+        Model model;
+        try (InputStream in = url.openStream()) {
+            model = Rio.parse(in, url.toExternalForm(), RDFFormat.JSONLD);
+        }
+        RDF4JGraph graph = new RDF4J().asGraph(model);
+        checkGraph(graph);
+    }
+
+    @Test
+    public void jsonldParseEmbedded() throws Exception {
+        jsonldParse(aliceEmbedded);
+    }
+
+    @Test
+    public void jsonldParseCached() throws Exception {
+        // Check if HTTPClient cache is used from 
+        // jarcache.json
+        jsonldParse(aliceCached);
+    }
+
+    private void jsonldParse(URL url) throws JsonParseException, IOException, JsonLdError {
+        Object aliceJson = JsonUtils.fromURL(url, JsonUtils.getDefaultHttpClient());
+        JsonLdOptions options = new JsonLdOptions();
+        options.setBase(url.toExternalForm());
+        RDFDataset ds = (RDFDataset) JsonLdProcessor.toRDF(aliceJson);
+        JsonLdGraph graph = new JsonLdRDF().asGraph(ds);
+        checkGraph(graph);
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/b1a31157/integration-tests/src/test/resources/alice-cached.jsonld
----------------------------------------------------------------------
diff --git a/integration-tests/src/test/resources/alice-cached.jsonld b/integration-tests/src/test/resources/alice-cached.jsonld
new file mode 100644
index 0000000..494d20e
--- /dev/null
+++ b/integration-tests/src/test/resources/alice-cached.jsonld
@@ -0,0 +1,9 @@
+{ "http://purl.org/dc/terms/license" :
+   "Licensed to the Apache Software Foundation (ASF) under one or more\n contributor license agreements.  See the NOTICE file distributed with\n this work for additional information regarding copyright ownership.\n The ASF licenses this file to You under the Apache License, Version 2.0\n (the \"License\"); you may not use this file except in compliance with\n the License.  You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n",
+  
+  "@context": "http://example.com/context",
+  "@id": "ex:Alice",
+  "@type": "Person",
+  "name": "Alice W. Land"
+}
+

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/b1a31157/integration-tests/src/test/resources/alice-embedded.jsonld
----------------------------------------------------------------------
diff --git a/integration-tests/src/test/resources/alice-embedded.jsonld b/integration-tests/src/test/resources/alice-embedded.jsonld
new file mode 100644
index 0000000..7c8ca85
--- /dev/null
+++ b/integration-tests/src/test/resources/alice-embedded.jsonld
@@ -0,0 +1,16 @@
+{ "http://purl.org/dc/terms/license" :
+   "Licensed to the Apache Software Foundation (ASF) under one or more\n contributor license agreements.  See the NOTICE file distributed with\n this work for additional information regarding copyright ownership.\n The ASF licenses this file to You under the Apache License, Version 2.0\n (the \"License\"); you may not use this file except in compliance with\n the License.  You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n",
+   
+  "@context": {
+    "xsd": "http://www.w3.org/2001/XMLSchema#",
+    "schema": "http://schema.org/",
+    "ex": "http://example.com/",
+    "name": "schema:name",
+    "Person": "schema:Person"
+  },
+
+  "@id": "ex:Alice",
+  "@type": "Person",
+  "name": "Alice W. Land"
+}
+

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/b1a31157/integration-tests/src/test/resources/contexts/example.jsonld
----------------------------------------------------------------------
diff --git a/integration-tests/src/test/resources/contexts/example.jsonld b/integration-tests/src/test/resources/contexts/example.jsonld
new file mode 100644
index 0000000..0e58a65
--- /dev/null
+++ b/integration-tests/src/test/resources/contexts/example.jsonld
@@ -0,0 +1,11 @@
+{ "http://purl.org/dc/terms/license" :
+   "Licensed to the Apache Software Foundation (ASF) under one or more\n contributor license agreements.  See the NOTICE file distributed with\n this work for additional information regarding copyright ownership.\n The ASF licenses this file to You under the Apache License, Version 2.0\n (the \"License\"); you may not use this file except in compliance with\n the License.  You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n",
+
+  "@context": {
+    "xsd": "http://www.w3.org/2001/XMLSchema#",
+    "schema": "http://schema.org/",
+    "ex": "http://example.com/",
+    "name": "schema:name",
+    "Person": "schema:Person"
+  }
+}

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/b1a31157/integration-tests/src/test/resources/jarcache.json
----------------------------------------------------------------------
diff --git a/integration-tests/src/test/resources/jarcache.json b/integration-tests/src/test/resources/jarcache.json
new file mode 100644
index 0000000..05eb13c
--- /dev/null
+++ b/integration-tests/src/test/resources/jarcache.json
@@ -0,0 +1,10 @@
+[
+ {
+   "X-License":
+     "Licensed to the Apache Software Foundation (ASF) under one or more\n contributor license agreements.  See the NOTICE file distributed with\n this work for additional information regarding copyright ownership.\n The ASF licenses this file to You under the Apache License, Version 2.0\n (the \"License\"); you may not use this file except in compliance with\n the License.  You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n \n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n", 
+     
+    "Content-Location": "http://example.com/context",
+    "X-Classpath": "contexts/example.jsonld",
+    "Content-Type": "application/ld+json"
+  }
+]
\ No newline at end of file


[38/45] commons-rdf git commit: Ensure quads have toString()

Posted by st...@apache.org.
Ensure quads have toString()


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/944188bd
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/944188bd
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/944188bd

Branch: refs/heads/COMMONSRDF-47
Commit: 944188bdae6e22ebb0baf23e8c82776de9ea993d
Parents: 4c69d42
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 14:57:21 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 14:57:21 2017 +0000

----------------------------------------------------------------------
 .../java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java  | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/944188bd/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java
index b008bab..19add4e 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdQuadLike.java
@@ -72,4 +72,9 @@ class JsonLdQuadLikeImpl<S extends RDFTerm, P extends RDFTerm, O extends RDFTerm
     public Quad asJsonLdQuad() {
         return quad;
     }
+    
+    @Override
+    public String toString() {
+        return quad.toString();
+    }
 }


[37/45] commons-rdf git commit: COMMONSRDF-51: compare language tags in lower case

Posted by st...@apache.org.
COMMONSRDF-51: compare language tags in lower case


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/4c69d42f
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/4c69d42f
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/4c69d42f

Branch: refs/heads/COMMONSRDF-47
Commit: 4c69d42f40028a2faa613be04ff0d8a0d20b6ec3
Parents: 6d4e333 202a8c6
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 14:43:18 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 14:43:18 2017 +0000

----------------------------------------------------------------------
 .../org/apache/commons/rdf/api/Literal.java     |  27 +++-
 .../commons/rdf/api/AbstractDatasetTest.java    | 139 ++++++++++++++++
 .../commons/rdf/api/AbstractGraphTest.java      | 153 +++++++++++++++++-
 .../apache/commons/rdf/api/AbstractRDFTest.java | 158 ++++++++++++++++++-
 .../commons/rdf/jena/impl/JenaDatasetImpl.java  |   7 +-
 .../commons/rdf/jena/impl/JenaGraphImpl.java    |  18 ++-
 .../commons/rdf/jena/impl/JenaLiteralImpl.java  |  13 +-
 .../commons/rdf/jsonldjava/JsonLdLiteral.java   |  13 +-
 .../commons/rdf/rdf4j/impl/LiteralImpl.java     |  15 +-
 .../apache/commons/rdf/simple/LiteralImpl.java  |   8 +-
 10 files changed, 515 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/4c69d42f/api/src/test/java/org/apache/commons/rdf/api/AbstractDatasetTest.java
----------------------------------------------------------------------


[32/45] commons-rdf git commit: Test generalized quad creation

Posted by st...@apache.org.
Test generalized quad creation

Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/d0ae2d8f
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/d0ae2d8f
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/d0ae2d8f

Branch: refs/heads/COMMONSRDF-47
Commit: d0ae2d8fa6d0ae902319cbe35f93fbefdc0a536e
Parents: 7bbff25
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 14:26:07 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 14:27:47 2017 +0000

----------------------------------------------------------------------
 .../rdf/jena/GeneralizedRDFQuadTest.java        | 90 ++++++++++++++++++++
 .../rdf/jena/GeneralizedRDFTripleTest.java      | 72 ++++++++++++++++
 2 files changed, 162 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/d0ae2d8f/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java
----------------------------------------------------------------------
diff --git a/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java b/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java
new file mode 100644
index 0000000..e5b26a4
--- /dev/null
+++ b/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFQuadTest.java
@@ -0,0 +1,90 @@
+/**
+ * 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.
+ */
+package org.apache.commons.rdf.jena;
+
+import static org.junit.Assert.*;
+
+import org.apache.commons.rdf.api.BlankNode;
+import org.junit.Test;
+
+public class GeneralizedRDFQuadTest {
+
+    private JenaRDF jena = new JenaRDF();
+    
+    @Test
+    public void bnodeProperty() throws Exception {
+        BlankNode b1 = jena.createBlankNode("b1");
+        JenaIRI ex1 = jena.createIRI("http://example.com/ex1");
+        JenaIRI ex2 = jena.createIRI("http://example.com/ex2");
+        JenaIRI ex3 = jena.createIRI("http://example.com/ex3");
+        
+        JenaGeneralizedQuadLike t = jena.createGeneralizedQuad(ex1, b1, ex2, ex3);
+        assertEquals(ex1, t.getSubject());
+        assertEquals(ex2, t.getObject());
+        assertEquals(b1, t.getPredicate()); // it's a bnode!
+        assertTrue(t.asJenaQuad().getPredicate().isBlank());
+    }
+
+    @Test
+    public void literalPredicate() throws Exception {
+        JenaIRI ex1 = jena.createIRI("http://example.com/ex1");
+        JenaIRI ex2 = jena.createIRI("http://example.com/ex2");
+        JenaIRI ex3 = jena.createIRI("http://example.com/ex3");
+        JenaLiteral lit = jena.createLiteral("Hello");
+        
+        JenaGeneralizedQuadLike t = jena.createGeneralizedQuad(ex1, lit, ex2, ex3);
+        assertEquals(ex1, t.getSubject());
+        assertEquals(ex2, t.getObject());
+        assertEquals(lit, t.getPredicate()); // it's a literal!
+        assertTrue(t.asJenaQuad().getPredicate().isLiteral());
+    }
+
+
+    @Test
+    public void literalSubject() throws Exception {
+        JenaIRI ex1 = jena.createIRI("http://example.com/ex1");
+        JenaIRI ex2 = jena.createIRI("http://example.com/ex2");
+        JenaIRI ex3 = jena.createIRI("http://example.com/ex3");
+        JenaLiteral lit = jena.createLiteral("Hello");
+        
+        JenaGeneralizedQuadLike t = jena.createGeneralizedQuad(lit, ex1, ex2, ex3);
+        assertEquals(lit, t.getSubject()); // it's a literal!
+        assertEquals(ex1, t.getPredicate());
+        assertEquals(ex2, t.getObject());
+        assertTrue(t.asJenaQuad().getSubject().isLiteral());
+    }
+    
+
+    @Test
+    public void literalGraph() throws Exception {
+        JenaIRI ex1 = jena.createIRI("http://example.com/ex1");
+        JenaIRI ex2 = jena.createIRI("http://example.com/ex2");
+        JenaIRI ex3 = jena.createIRI("http://example.com/ex3");
+        JenaLiteral lit = jena.createLiteral("Hello");
+        
+        JenaGeneralizedQuadLike t = jena.createGeneralizedQuad(ex1, ex2, ex3, lit);
+        assertEquals(ex1, t.getSubject()); 
+        assertEquals(ex2, t.getPredicate());
+        assertEquals(ex3, t.getObject());
+        assertTrue(t.getGraphName().isPresent());
+        assertEquals(lit, t.getGraphName().get());
+        assertTrue(t.asJenaQuad().getGraph().isLiteral());
+    }
+    
+    
+}

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/d0ae2d8f/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFTripleTest.java
----------------------------------------------------------------------
diff --git a/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFTripleTest.java b/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFTripleTest.java
new file mode 100644
index 0000000..82ccb81
--- /dev/null
+++ b/jena/src/test/java/org/apache/commons/rdf/jena/GeneralizedRDFTripleTest.java
@@ -0,0 +1,72 @@
+/**
+ * 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.
+ */
+package org.apache.commons.rdf.jena;
+
+import static org.junit.Assert.*;
+
+import org.apache.commons.rdf.api.BlankNode;
+import org.junit.Test;
+
+public class GeneralizedRDFTripleTest {
+
+    private JenaRDF jena = new JenaRDF();
+    
+    @Test
+    public void bnodeProperty() throws Exception {
+        BlankNode b1 = jena.createBlankNode("b1");
+        JenaIRI ex1 = jena.createIRI("http://example.com/ex1");
+        JenaIRI ex2 = jena.createIRI("http://example.com/ex2");
+        
+        JenaGeneralizedTripleLike t = jena.createGeneralizedTriple(ex1, b1, ex2);
+        assertEquals(ex1, t.getSubject());
+        assertEquals(ex2, t.getObject());
+        assertEquals(b1, t.getPredicate()); // it's a bnode!
+        assertTrue(t.asJenaTriple().getPredicate().isBlank());
+    }
+
+    @Test
+    public void literalPredicate() throws Exception {
+        JenaIRI ex1 = jena.createIRI("http://example.com/ex1");
+        JenaIRI ex2 = jena.createIRI("http://example.com/ex2");
+        JenaLiteral lit = jena.createLiteral("Hello");
+        
+        JenaGeneralizedTripleLike t = jena.createGeneralizedTriple(ex1, lit, ex2);
+        assertEquals(ex1, t.getSubject());
+        assertEquals(ex2, t.getObject());
+        assertEquals(lit, t.getPredicate()); // it's a literal!
+        assertTrue(t.asJenaTriple().getPredicate().isLiteral());
+    }
+
+
+    @Test
+    public void literalSubject() throws Exception {
+        JenaIRI ex1 = jena.createIRI("http://example.com/ex1");
+        JenaIRI ex2 = jena.createIRI("http://example.com/ex2");
+        JenaLiteral lit = jena.createLiteral("Hello");
+        
+        JenaGeneralizedTripleLike t = jena.createGeneralizedTriple(lit, ex1, ex2);
+        assertEquals(lit, t.getSubject()); // it's a literal!
+        assertEquals(ex1, t.getPredicate());
+        assertEquals(ex2, t.getObject());
+        assertTrue(t.asJenaTriple().getSubject().isLiteral());
+    }
+    
+    
+
+    
+}


[40/45] commons-rdf git commit: COMMONSRDF-56: Workaround for JSON-LD Literal comparisons

Posted by st...@apache.org.
COMMONSRDF-56: Workaround for JSON-LD Literal comparisons


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/e351d55d
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/e351d55d
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/e351d55d

Branch: refs/heads/COMMONSRDF-47
Commit: e351d55d1a1e529f88398c6233d3a01dd799c87a
Parents: dc4af99
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Wed Feb 8 22:36:26 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Wed Feb 8 22:36:26 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/jsonldjava/JsonLdGraphLike.java |  18 ++-
 .../commons/rdf/jsonldjava/JsonLdLiteral.java   |  12 +-
 .../rdf/jsonldjava/JsonLdComparisonTest.java    | 141 +++++++++++++++++++
 3 files changed, 162 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/e351d55d/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
index 1549109..e5fc75e 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdGraphLike.java
@@ -204,9 +204,23 @@ abstract class AbstractJsonLdGraphLike<T extends TripleLike> implements JsonLdGr
             if (predicateNode.isPresent() && predicateNode.get().compareTo(q.getPredicate()) != 0) {
                 return false;
             }
-            if (objectNode.isPresent() && objectNode.get().compareTo(q.getObject()) != 0) {
-                return false;
+            if (objectNode.isPresent()) {
+                if (object instanceof Literal && q.getObject().isLiteral()) { 
+                    // Special handling for COMMONSRDF-56, COMMONSRDF-51:
+                    // Less efficient wrapper to a Commons RDF Literal so 
+                    // we can use our RDF 1.1-compliant .equals()
+                    RDFTerm otherObj = factory.asRDFTerm(q.getObject());
+                    if (! (object.equals(otherObj))) {
+                        return false;
+                    }
+                } else {
+                    // JSONLD-Java's .compareTo can handle IRI, BlankNode and type-mismatch
+                    if (objectNode.get().compareTo(q.getObject()) != 0) {
+                        return false;
+                    }
+                }
             }
+            // All patterns checked, must be good!
             return true;
         };
     }

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/e351d55d/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
index 0d63c29..7b0aa45 100644
--- a/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
+++ b/jsonld-java/src/main/java/org/apache/commons/rdf/jsonldjava/JsonLdLiteral.java
@@ -87,17 +87,15 @@ class JsonLdLiteralImpl extends JsonLdTermImpl implements JsonLdLiteral {
 
     @Override
     public boolean equals(final Object obj) {
-        if (obj instanceof JsonLdLiteral) {
-            final JsonLdLiteral other = (JsonLdLiteral) obj;
-            return asJsonLdNode().compareTo(other.asJsonLdNode()) == 0;
-        }
+        // COMMONSRDF-56: Do **not** use 
+        // asJsonLdNode().compareTo(other.asJsonLdNode())
         if (obj instanceof Literal) {
             final Literal other = (Literal) obj;
-            return getLexicalForm().equals(other.getLexicalForm()) && getDatatype().equals(other.getDatatype())
+            return getLexicalForm().equals(other.getLexicalForm()) 
+                    && getDatatype().equals(other.getDatatype())
                     && getLanguageTag().map(JsonLdLiteralImpl::lowerCase)
-                    .equals(other.getLanguageTag().map(JsonLdLiteralImpl::lowerCase));
+                        .equals(other.getLanguageTag().map(JsonLdLiteralImpl::lowerCase));
         }
         return false;
-
     }
 }

http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/e351d55d/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java
----------------------------------------------------------------------
diff --git a/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java b/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java
new file mode 100644
index 0000000..f3981be
--- /dev/null
+++ b/jsonld-java/src/test/java/org/apache/commons/rdf/jsonldjava/JsonLdComparisonTest.java
@@ -0,0 +1,141 @@
+/**
+ * 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.
+ */
+package org.apache.commons.rdf.jsonldjava;
+
+import static org.junit.Assert.*;
+
+import java.util.Optional;
+
+import org.apache.commons.rdf.simple.Types;
+import org.junit.Test;
+
+/**
+ * COMMONSRDF-56: Test Literal comparisons with JSONLD-Java
+ */
+public class JsonLdComparisonTest {
+    
+    JsonLdRDF rdf = new JsonLdRDF();
+    
+    @Test
+    public void literalEqual() throws Exception {
+        JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+        JsonLdLiteral lit2 = rdf.createLiteral("Hello");
+        JsonLdLiteral lit3 = rdf.createLiteral("Hello", Types.XSD_STRING);
+        assertEquals(lit1, lit2);
+        assertEquals(lit1, lit3);
+    }
+
+    @Test
+    public void literalNotEqual() throws Exception {
+        JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+        JsonLdLiteral lit2 = rdf.createLiteral("Hello there");
+        assertNotEquals(lit1, lit2);
+    }
+
+    @Test
+    public void literalEqualLang() throws Exception {
+        JsonLdLiteral lit1 = rdf.createLiteral("Allo Allo", "fr");
+        JsonLdLiteral lit2 = rdf.createLiteral("Allo Allo", "fr");
+        assertEquals(lit1, lit2);
+    }
+    
+    @Test
+    public void literalNotEqualLang() throws Exception {
+        JsonLdLiteral lit1 = rdf.createLiteral("Hello", "en");
+        JsonLdLiteral lit2 = rdf.createLiteral("Hello", "en-us");
+        assertNotEquals(lit1, lit2);
+    }
+
+    @Test
+    public void literalEqualType() throws Exception {
+        JsonLdLiteral lit1 = rdf.createLiteral("1", Types.XSD_INTEGER);
+        JsonLdLiteral lit2 = rdf.createLiteral("1", Types.XSD_INTEGER);
+        assertEquals(lit1, lit2);
+    }
+
+    
+    @Test
+    public void literalNotEqualType() throws Exception {
+        JsonLdLiteral lit1 = rdf.createLiteral("1", Types.XSD_INTEGER);
+        JsonLdLiteral lit2 = rdf.createLiteral("2", Types.XSD_INTEGER);
+        JsonLdLiteral lit3 = rdf.createLiteral("1", Types.XSD_STRING);
+
+        assertNotEquals(lit1, lit2);
+        assertNotEquals(lit1, lit3);
+    }
+
+
+    @Test
+    public void grahContains() throws Exception {
+        JsonLdGraph graph = rdf.createGraph();
+        JsonLdIRI s = rdf.createIRI("http://example.com/s");
+        JsonLdIRI p = rdf.createIRI("http://example.com/p");
+        JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+        
+        graph.add(s, p, lit1);
+        assertTrue(graph.contains(s, p, rdf.createLiteral("Hello")));
+        assertTrue(graph.contains(s, p, rdf.createLiteral("Hello", Types.XSD_STRING)));
+        assertFalse(graph.contains(s, p, rdf.createLiteral("Hello", Types.XSD_NORMALIZEDSTRING)));
+        assertFalse(graph.contains(s, p, rdf.createLiteral("Hello", "en")));
+        assertFalse(graph.contains(s, p, rdf.createLiteral("Other")));
+    }
+    
+    @Test
+    public void datasetContains() throws Exception {
+        JsonLdDataset dataset = rdf.createDataset();
+        JsonLdIRI s = rdf.createIRI("http://example.com/s");
+        JsonLdIRI p = rdf.createIRI("http://example.com/p");
+        JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+        
+        dataset.add(null, s, p, lit1);
+        assertTrue(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello")));
+        assertTrue(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", Types.XSD_STRING)));
+        assertFalse(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", Types.XSD_NORMALIZEDSTRING)));
+        assertFalse(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Hello", "en")));
+        assertFalse(dataset.contains(Optional.empty(), s, p, rdf.createLiteral("Other")));
+    }
+    
+    @Test
+    public void datasetRemove() throws Exception {
+        JsonLdDataset dataset = rdf.createDataset();
+        JsonLdIRI s = rdf.createIRI("http://example.com/s");
+        JsonLdIRI p = rdf.createIRI("http://example.com/p");
+        JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+        
+        dataset.add(null, s, p, lit1);
+        assertTrue(dataset.contains(Optional.empty(), s, p, lit1));
+        dataset.remove(null, null, null, rdf.createLiteral("Other")); // should NOT match
+        assertTrue(dataset.contains(Optional.empty(), s, p, lit1));
+        dataset.remove(null, null, null, rdf.createLiteral("Hello", Types.XSD_STRING)); // SHOULD  match
+        assertFalse(dataset.contains(Optional.empty(), s, p, lit1));
+    }
+
+    @Test
+    public void datasetStream() throws Exception {
+        JsonLdDataset dataset = rdf.createDataset();
+        JsonLdIRI s = rdf.createIRI("http://example.com/s");
+        JsonLdIRI p = rdf.createIRI("http://example.com/p");
+        JsonLdLiteral lit1 = rdf.createLiteral("Hello");
+        JsonLdLiteral lit2 = rdf.createLiteral("Other");
+        
+        dataset.add(null, s, p, lit1);
+        assertTrue(dataset.stream(Optional.empty(), s, p, lit1).findAny().isPresent());        
+        assertFalse(dataset.stream(Optional.empty(), s, p, lit2).findAny().isPresent());        
+    }
+    
+}


[05/45] commons-rdf git commit: COMMONSRDF-51: annotated missing test

Posted by st...@apache.org.
COMMONSRDF-51: annotated missing test


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/6f11372b
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/6f11372b
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/6f11372b

Branch: refs/heads/COMMONSRDF-47
Commit: 6f11372bb98dbbbb1f9e4ca00921725080cac341
Parents: 3064d21
Author: Sergio Fern�ndez <wi...@apache.org>
Authored: Tue Jan 17 08:34:11 2017 +0100
Committer: Sergio Fern�ndez <wi...@apache.org>
Committed: Tue Jan 17 08:34:11 2017 +0100

----------------------------------------------------------------------
 api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/6f11372b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
index 5efcee1..52686d7 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractRDFTest.java
@@ -194,6 +194,7 @@ public abstract class AbstractRDFTest {
         assertEquals("\"Herbert Van de Sompel\"@vls", vls.ntriplesString());
     }
 
+    @Test
     public void testCreateLiteralLangCaseInsensitive() throws Exception {
         // COMMONSRDF-51: Literal langtag may not be in lowercase, but
         // must be COMPARED (aka .equals and .hashCode()) in lowercase
@@ -415,4 +416,5 @@ public abstract class AbstractRDFTest {
         final Triple triple = factory.createTriple(iri, iri, iri);
         assertEquals(Objects.hash(iri, iri, iri), triple.hashCode());
     }
+
 }


[11/45] commons-rdf git commit: COMMONSRDF-51: Check langtag equals also graph.add/contains/remove

Posted by st...@apache.org.
COMMONSRDF-51: Check langtag equals also graph.add/contains/remove


Project: http://git-wip-us.apache.org/repos/asf/commons-rdf/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-rdf/commit/50dc8861
Tree: http://git-wip-us.apache.org/repos/asf/commons-rdf/tree/50dc8861
Diff: http://git-wip-us.apache.org/repos/asf/commons-rdf/diff/50dc8861

Branch: refs/heads/COMMONSRDF-47
Commit: 50dc8861f3a0824168c8484d1c7a3535e49de57c
Parents: 7046ea1
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Mon Jan 23 11:37:19 2017 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Mon Jan 23 11:37:19 2017 +0000

----------------------------------------------------------------------
 .../commons/rdf/api/AbstractGraphTest.java      | 105 ++++++++++++++++++-
 1 file changed, 100 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-rdf/blob/50dc8861/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
----------------------------------------------------------------------
diff --git a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
index 7e32676..eba8888 100644
--- a/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
+++ b/api/src/test/java/org/apache/commons/rdf/api/AbstractGraphTest.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
@@ -46,7 +47,7 @@ import org.junit.Test;
  * <p>
  * This test uses try-with-resources blocks for calls to {@link Graph#stream()}
  * and {@link Graph#iterate()}.
- * 
+ *
  * @see Graph
  * @see RDF
  */
@@ -68,10 +69,10 @@ public abstract class AbstractGraphTest {
     protected Triple bobNameTriple;
 
     /**
-     * 
+     *
      * This method must be overridden by the implementing test to provide a
      * factory for the test to create {@link Graph}, {@link IRI} etc.
-     * 
+     *
      * @return {@link RDF} instance to be tested.
      */
     protected abstract RDF createFactory();
@@ -385,6 +386,100 @@ public abstract class AbstractGraphTest {
         }
     }
 
+    @Test
+    public void containsLanguageTagsCaseInsensitive() {
+        // COMMONSRDF-51: Ensure we can add/contains/remove with any casing
+        // of literal language tag
+        final Literal lower = factory.createLiteral("Hello", "en-gb");
+        final Literal upper = factory.createLiteral("Hello", "EN-GB");
+        final Literal mixed = factory.createLiteral("Hello", "en-GB");
+
+        final IRI example1 = factory.createIRI("http://example.com/s1");
+        final IRI greeting = factory.createIRI("http://example.com/greeting");
+
+        final Graph graph = factory.createGraph();
+        graph.add(example1, greeting, upper);
+
+        assertTrue(graph.contains(factory.createTriple(example1, greeting, upper)));
+        assertTrue(graph.contains(factory.createTriple(example1, greeting, lower)));
+        assertTrue(graph.contains(factory.createTriple(example1, greeting, mixed)));
+
+        // or as patterns
+        assertTrue(graph.contains(null, null, upper));
+        assertTrue(graph.contains(null, null, lower));
+        assertTrue(graph.contains(null, null, mixed));
+
+        // Remove should also honour any case
+        graph.remove(example1, greeting, mixed);
+        assertFalse(graph.contains(null, greeting, null));
+    }
+
+    @Test
+    public void containsLanguageTagsCaseInsensitiveTurkish() {
+        // COMMONSRDF-51: Special test for Turkish issue where
+        // "i".toLowerCase() != "i"
+        // See also:
+        // https://garygregory.wordpress.com/2015/11/03/java-lowercase-conversion-turkey/
+
+        // This is similar to the test in AbstractRDFTest, but on a graph
+        Locale defaultLocale = Locale.getDefault();
+        try {
+            Locale.setDefault(Locale.ROOT);
+            final Literal lowerROOT = factory.createLiteral("moi", "fi");
+            final Literal upperROOT = factory.createLiteral("moi", "FI");
+            final Literal mixedROOT = factory.createLiteral("moi", "fI");
+            final Graph g = factory.createGraph();
+            final IRI exampleROOT = factory.createIRI("http://example.com/s1");
+            final IRI greeting = factory.createIRI("http://example.com/greeting");
+            g.add(exampleROOT, greeting, mixedROOT);
+
+            Locale turkish = Locale.forLanguageTag("TR");
+            Locale.setDefault(turkish);
+            // If the below assertion fails, then the Turkish
+            // locale no longer have this peculiarity that
+            // we want to test.
+            Assume.assumeFalse("FI".toLowerCase().equals("fi"));
+
+            // Below is pretty much the same as in
+            // containsLanguageTagsCaseInsensitive()
+            final Literal lower = factory.createLiteral("moi", "fi");
+            final Literal upper = factory.createLiteral("moi", "FI");
+            final Literal mixed = factory.createLiteral("moi", "fI");
+
+            final IRI exampleTR = factory.createIRI("http://example.com/s2");
+            g.add(exampleTR, greeting, upper);
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, upper)));
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, upperROOT)));
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, lower)));
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, lowerROOT)));
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, mixed)));
+            assertTrue(g.contains(factory.createTriple(exampleTR, greeting, mixedROOT)));
+            assertTrue(g.contains(exampleTR, null, upper));
+            assertTrue(g.contains(exampleTR, null, upperROOT));
+            assertTrue(g.contains(exampleTR, null, lower));
+            assertTrue(g.contains(exampleTR, null, lowerROOT));
+            assertTrue(g.contains(exampleTR, null, mixed));
+            assertTrue(g.contains(exampleTR, null, mixedROOT));
+            g.remove(exampleTR, greeting, mixed);
+            assertFalse(g.contains(exampleTR, null, null));
+
+            // What about the triple we added while in ROOT locale?
+            assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, upper)));
+            assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, lower)));
+            assertTrue(g.contains(factory.createTriple(exampleROOT, greeting, mixed)));
+            assertTrue(g.contains(exampleROOT, null, upper));
+            assertTrue(g.contains(exampleROOT, null, lower));
+            assertTrue(g.contains(exampleROOT, null, mixed));
+            g.remove(exampleROOT, greeting, mixed);
+            assertFalse(g.contains(exampleROOT, null, null));
+
+
+        } finally {
+            Locale.setDefault(defaultLocale);
+        }
+
+    }
+
     private void notEquals(final BlankNodeOrIRI node1, final BlankNodeOrIRI node2) {
         assertFalse(node1.equals(node2));
         // in which case we should be able to assume
@@ -439,7 +534,7 @@ public abstract class AbstractGraphTest {
      * Create a different implementation of BlankNode to be tested with
      * graph.add(a,b,c); (the implementation may or may not then choose to
      * translate such to its own instances)
-     * 
+     *
      * @param name
      * @return
      */
@@ -493,7 +588,7 @@ public abstract class AbstractGraphTest {
      * An attempt to use the Java 8 streams to look up a more complicated query.
      * <p>
      * FYI, the equivalent SPARQL version (untested):
-     * 
+     *
      * <pre>
      *     SELECT ?orgName WHERE {
      *             ?org foaf:name ?orgName .