You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/11/15 22:25:29 UTC
[1/3] jena git commit: JENA-1064: Add union graph support.
Repository: jena
Updated Branches:
refs/heads/master 78f91993a -> f00e659c5
JENA-1064: Add union graph support.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/bbce3220
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/bbce3220
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/bbce3220
Branch: refs/heads/master
Commit: bbce3220840a2afdce70d79cdb050440109658f9
Parents: 78f9199
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Nov 15 21:23:32 2015 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Nov 15 21:23:32 2015 +0000
----------------------------------------------------------------------
.../jena/sparql/core/DatasetGraphBaseFind.java | 70 +++++++++++++++-----
1 file changed, 53 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/bbce3220/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBaseFind.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBaseFind.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBaseFind.java
index 56c15bd..21b6415 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBaseFind.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphBaseFind.java
@@ -20,9 +20,12 @@ package org.apache.jena.sparql.core;
import java.util.Iterator ;
+import java.util.stream.Stream ;
import org.apache.jena.atlas.iterator.Iter ;
import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.sparql.core.mem.DatasetGraphInMemory ;
/**
* DatasetGraph framework.
@@ -31,7 +34,7 @@ import org.apache.jena.graph.Node ;
* @see DatasetGraphTriplesQuads
* @see DatasetGraphCollection
* @see DatasetGraphOne
- *
+ * @see DatasetGraphInMemory
*/
abstract public class DatasetGraphBaseFind extends DatasetGraphBase
{
@@ -39,8 +42,7 @@ abstract public class DatasetGraphBaseFind extends DatasetGraphBase
/** Implementation of find based on splitting into triples (default graph) and quads (named graph) */
@Override
- public Iterator<Quad> find(Node g, Node s, Node p , Node o)
- {
+ public Iterator<Quad> find(Node g, Node s, Node p, Node o) {
if ( Quad.isDefaultGraph(g))
return findInDftGraph(s, p, o) ;
if ( ! isWildcard(g) )
@@ -49,33 +51,67 @@ abstract public class DatasetGraphBaseFind extends DatasetGraphBase
}
@Override
- public Iterator<Quad> findNG(Node g, Node s, Node p , Node o)
- {
+ public Iterator<Quad> findNG(Node g, Node s, Node p , Node o) {
Iterator<Quad> qIter ;
if ( Quad.isUnionGraph(g))
+ qIter = findQuadsInUnionGraph(s, p, o) ;
+ else if ( isWildcard(g) )
qIter = findInAnyNamedGraphs(s, p, o) ;
- else if ( ! isWildcard(g) )
- qIter = findInSpecificNamedGraph(g, s, p, o) ;
+ else if ( Quad.isDefaultGraph(g) )
+ qIter = findInDftGraph(s, p, o) ;
else
- qIter = findInAnyNamedGraphs(s, p, o) ;
+ // Not wildcard, not union graph, not default graph.
+ qIter = findInSpecificNamedGraph(g, s, p, o) ;
if ( qIter == null )
return Iter.nullIterator() ;
return qIter ;
}
- protected Iterator<Quad> findAny(Node s, Node p , Node o)
- {
+ protected Iterator<Quad> findAny(Node s, Node p, Node o) {
// Default graph
- Iterator<Quad> iter1 = findInDftGraph(s, p, o) ;
- Iterator<Quad> iter2 = findInAnyNamedGraphs(s, p, o) ;
-
- if ( iter1 == null && iter2 == null )
- return Iter.nullIterator() ;
- // Copes with null in either position.
- return Iter.append(iter1, iter2) ;
+ Iterator<Quad> iter1 = findInDftGraph(s, p, o);
+ Iterator<Quad> iter2 = findInAnyNamedGraphs(s, p, o);
+ // Copes with null in either or both positions.
+ return Iter.append(iter1, iter2);
}
+ /** Find matches in the default graph.
+ * Return as quads; the default graph is {@link Quad#defaultGraphIRI}
+ * To get Triples, use {@code DatasetGraph.getDefaultGraph().find(...)}.
+ */
protected abstract Iterator<Quad> findInDftGraph(Node s, Node p , Node o) ;
+
+ /** Find matches in the notional union of all named graphs - return as triples.
+ * No duplicates - the union graph is a <em>set</em> of triples.
+ * See {@link #findInAnyNamedGraphs}, where there may be duplicates.
+ * <p>
+ * Implementations are encouraged to override this method. For example, it
+ * may be possible to avoid "distinct".
+ */
+ public Iterator<Triple> findInUnionGraph(Node s, Node p , Node o) {
+ return findUnionGraphTriples(s,p,o).iterator() ;
+ }
+
+ /** Find matches in the notional union of all named graphs - return as quads.
+ * No duplicates - the union graph is a <em>set</em> of triples.
+ * See {@link #findInAnyNamedGraphs}, where there may be duplicates.
+ * <p>
+ * Implementations are encouraged to override this method. For example, it
+ * may be possible to avoid "distinct".
+ */
+ public Iterator<Quad> findQuadsInUnionGraph(Node s, Node p , Node o) {
+ return findUnionGraphTriples(s,p,o).map(t -> new Quad(Quad.unionGraph, t)).iterator() ;
+ }
+
+ private Stream<Triple> findUnionGraphTriples(Node s, Node p , Node o) {
+ return Iter.asStream(findInAnyNamedGraphs(s,p,o)).map(Quad::asTriple).distinct() ;
+ }
+
+ /** Find in a specific named graph - {@code g} is a group term (IRI or bNode), not a wild card (or null). */
protected abstract Iterator<Quad> findInSpecificNamedGraph(Node g, Node s, Node p , Node o) ;
+ /** Find in any named graph - return quads.
+ * If a triple matches in two different graph, return a quad for each.
+ * See {@link #findInUnionGraph} for matching without duplicate triples.
+ */
protected abstract Iterator<Quad> findInAnyNamedGraphs(Node s, Node p , Node o) ;
}
[3/3] jena git commit: JENA-624,
JENA-1064: Union graph quads to be Quad.unionGraph.
Posted by an...@apache.org.
JENA-624, JENA-1064: Union graph quads to be Quad.unionGraph.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/f00e659c
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/f00e659c
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/f00e659c
Branch: refs/heads/master
Commit: f00e659c52d3b9daac4a0ffacf19be1b90c03d60
Parents: a03ac09
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Nov 15 21:24:52 2015 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Nov 15 21:24:52 2015 +0000
----------------------------------------------------------------------
.../org/apache/jena/sparql/core/mem/QuadTable.java | 6 +++++-
.../apache/jena/sparql/core/mem/QuadTableForm.java | 16 +++++++---------
.../sparql/core/mem/TestDatasetGraphInMemory.java | 12 +++++++-----
3 files changed, 19 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/f00e659c/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/QuadTable.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/QuadTable.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/QuadTable.java
index 7505d1a..579c1e2 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/QuadTable.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/QuadTable.java
@@ -62,6 +62,10 @@ public interface QuadTable extends TupleTable<Quad> {
default Stream<Quad> findInUnionGraph(final Node s, final Node p, final Node o) {
final Set<Triple> seen = new HashSet<>();
- return find(ANY, s, p, o).filter(q -> !q.isDefaultGraph() && seen.add(q.asTriple()));
+ return find(ANY, s, p, o).sequential()
+ .filter(q -> !q.isDefaultGraph())
+ .map(Quad::asTriple)
+ .filter(seen::add)
+ .map(t -> Quad.create(Quad.unionGraph, t)) ;
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/f00e659c/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/QuadTableForm.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/QuadTableForm.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/QuadTableForm.java
index 89383e3..c600a35 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/QuadTableForm.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/QuadTableForm.java
@@ -135,11 +135,10 @@ public enum QuadTableForm implements Supplier<QuadTable>,Predicate<Set<TupleSlot
@Override
public Stream<Quad> findInUnionGraph(final Node s, final Node p, final Node o) {
- final AtomicReference<Triple> mostRecentlySeen = new AtomicReference<>();
- return find(ANY, s, p, o).filter(currentQuad -> {
- final Triple currentTriple = currentQuad.asTriple();
- return !mostRecentlySeen.getAndSet(currentTriple).equals(currentTriple);
- });
+ final AtomicReference<Triple> mostRecentlySeen = new AtomicReference<>();
+ return find(ANY, s, p, o).map(Quad::asTriple).filter(t->{
+ return !mostRecentlySeen.getAndSet(t).equals(t);
+ }).map(t->Quad.create(Quad.unionGraph, t)) ;
}
@Override
@@ -238,10 +237,9 @@ public enum QuadTableForm implements Supplier<QuadTable>,Predicate<Set<TupleSlot
@Override
public Stream<Quad> findInUnionGraph(final Node s, final Node p, final Node o) {
final AtomicReference<Triple> mostRecentlySeen = new AtomicReference<>();
- return find(ANY, s, p, o).filter(currentQuad -> {
- final Triple currentTriple = currentQuad.asTriple();
- return !mostRecentlySeen.getAndSet(currentTriple).equals(currentTriple);
- });
+ return find(ANY, s, p, o).map(Quad::asTriple).filter(t->{
+ return !mostRecentlySeen.getAndSet(t).equals(t);
+ }).map(t->Quad.create(Quad.unionGraph, t)) ;
}
@Override
http://git-wip-us.apache.org/repos/asf/jena/blob/f00e659c/jena-arq/src/test/java/org/apache/jena/sparql/core/mem/TestDatasetGraphInMemory.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/mem/TestDatasetGraphInMemory.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/mem/TestDatasetGraphInMemory.java
index a5ad4c3..4a28dfb 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/mem/TestDatasetGraphInMemory.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/mem/TestDatasetGraphInMemory.java
@@ -239,15 +239,17 @@ public class TestDatasetGraphInMemory {
@Test
public void unionGraphWorksProperly() {
- final DatasetGraph dsg = emptyDataset();
+ DatasetGraph dsg = emptyDataset();
// quads from named graphs should appear in union
- final Quad q = Quad.create(createBlankNode(), createBlankNode(), createBlankNode(), createBlankNode());
+ Quad q = Quad.create(createBlankNode(), createBlankNode(), createBlankNode(), createBlankNode());
dsg.add(q);
- assertTrue(iter(dsg.find(unionGraph, ANY, ANY, ANY)).some(q::equals));
+ // Expected in the union graph
+ Quad q2 = Quad.create(unionGraph, q.asTriple());
+ assertTrue(iter(dsg.find(unionGraph, ANY, ANY, ANY)).some(q2::equals));
// no triples from default graph should appear in union
- final Triple t = Triple.create(createBlankNode(), createBlankNode(), createBlankNode());
+ Triple t = Triple.create(createBlankNode(), createBlankNode(), createBlankNode());
dsg.getDefaultGraph().add(t);
- assertFalse(iter(dsg.find(unionGraph, ANY, ANY, ANY)).some(t::equals));
+ assertFalse(iter(dsg.find(unionGraph, ANY, ANY, ANY)).some(Quad::isDefaultGraph)) ;
}
@Override
[2/3] jena git commit: Align to JENA-1064 : intermediate migration.
Posted by an...@apache.org.
Align to JENA-1064 : intermediate migration.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/a03ac090
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/a03ac090
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/a03ac090
Branch: refs/heads/master
Commit: a03ac090dff2b0b54bab54fa17196463806c0e7c
Parents: bbce322
Author: Andy Seaborne <an...@apache.org>
Authored: Sun Nov 15 21:24:04 2015 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sun Nov 15 21:24:04 2015 +0000
----------------------------------------------------------------------
.../org/apache/jena/sparql/core/mem/DatasetGraphInMemory.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/a03ac090/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/DatasetGraphInMemory.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/DatasetGraphInMemory.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/DatasetGraphInMemory.java
index d20651f..8b44741 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/DatasetGraphInMemory.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/DatasetGraphInMemory.java
@@ -190,14 +190,15 @@ public class DatasetGraphInMemory extends DatasetGraphTriplesQuads implements Tr
}
private Iterator<Quad> quadsFinder(final Node g, final Node s, final Node p, final Node o) {
- if (isUnionGraph(g)) return findInUnionGraph(s, p, o);
+ if (isUnionGraph(g)) return findInUnionGraph$(s, p, o);
return quadsIndex().find(g, s, p, o).iterator();
}
/**
* Union graph is the merge of named graphs.
*/
- public Iterator<Quad> findInUnionGraph(final Node s, final Node p, final Node o) {
+ // Temp - Should this be replaced by DatasetGraphBaseFind code?
+ private Iterator<Quad> findInUnionGraph$(final Node s, final Node p, final Node o) {
return access(() -> quadsIndex().findInUnionGraph(s, p, o).iterator());
}