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/08 14:42:10 UTC

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

Repository: commons-rdf
Updated Branches:
  refs/heads/master 5e2430ff9 -> 6d4e333d9


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/master
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;


[2/9] 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/master
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


[8/9] 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/master
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());
+    }
     
 }


[6/9] 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/master
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());
     }
     
     


[9/9] 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/master
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(-)
----------------------------------------------------------------------



[4/9] 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/master
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)


[5/9] 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/master
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());
+    }
+    
+    
+
+    
+}


[3/9] 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/master
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());
     }
 
     


[7/9] 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/master
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 {
     }
     
     
+    
 }