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/08/17 17:09:44 UTC

[05/50] [abbrv] jena git commit: reimplement Template, that does not affect the SPARQL 1.0 parser

reimplement Template, that does not affect the SPARQL 1.0 parser

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/2cb175d2
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/2cb175d2
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/2cb175d2

Branch: refs/heads/JENA-491-construct-quads
Commit: 2cb175d2305c02582eb24629d18d06bdc53ae4ba
Parents: 07c8b98
Author: confidencesun <co...@gmail.com>
Authored: Mon Jun 15 18:12:10 2015 +0800
Committer: confidencesun <co...@gmail.com>
Committed: Mon Jun 15 18:12:10 2015 +0800

----------------------------------------------------------------------
 .../sparql/lang/sparql_10/SPARQLParser10.java   | 80 ++++++--------------
 .../org/apache/jena/sparql/syntax/Template.java | 32 ++++++--
 2 files changed, 49 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/2cb175d2/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_10/SPARQLParser10.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_10/SPARQLParser10.java b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_10/SPARQLParser10.java
index c26f58d..d3049f7 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_10/SPARQLParser10.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/lang/sparql_10/SPARQLParser10.java
@@ -19,50 +19,12 @@
 
 package org.apache.jena.sparql.lang.sparql_10 ;
 
-import org.apache.jena.graph.Node;
-import org.apache.jena.query.Query;
-import org.apache.jena.sparql.core.Var;
-import org.apache.jena.sparql.expr.E_Add;
-import org.apache.jena.sparql.expr.E_Bound;
-import org.apache.jena.sparql.expr.E_Datatype;
-import org.apache.jena.sparql.expr.E_Divide;
-import org.apache.jena.sparql.expr.E_Equals;
-import org.apache.jena.sparql.expr.E_Function;
-import org.apache.jena.sparql.expr.E_GreaterThan;
-import org.apache.jena.sparql.expr.E_GreaterThanOrEqual;
-import org.apache.jena.sparql.expr.E_IsBlank;
-import org.apache.jena.sparql.expr.E_IsIRI;
-import org.apache.jena.sparql.expr.E_IsLiteral;
-import org.apache.jena.sparql.expr.E_IsURI;
-import org.apache.jena.sparql.expr.E_Lang;
-import org.apache.jena.sparql.expr.E_LangMatches;
-import org.apache.jena.sparql.expr.E_LessThan;
-import org.apache.jena.sparql.expr.E_LessThanOrEqual;
-import org.apache.jena.sparql.expr.E_LogicalAnd;
-import org.apache.jena.sparql.expr.E_LogicalNot;
-import org.apache.jena.sparql.expr.E_LogicalOr;
-import org.apache.jena.sparql.expr.E_Multiply;
-import org.apache.jena.sparql.expr.E_NotEquals;
-import org.apache.jena.sparql.expr.E_Regex;
-import org.apache.jena.sparql.expr.E_SameTerm;
-import org.apache.jena.sparql.expr.E_Str;
-import org.apache.jena.sparql.expr.E_Subtract;
-import org.apache.jena.sparql.expr.E_UnaryMinus;
-import org.apache.jena.sparql.expr.E_UnaryPlus;
-import org.apache.jena.sparql.expr.Expr;
-import org.apache.jena.sparql.expr.ExprList;
-import org.apache.jena.sparql.expr.ExprVar;
-import org.apache.jena.sparql.modify.request.QuadAcc;
-import org.apache.jena.sparql.path.Path;
-import org.apache.jena.sparql.syntax.Element;
-import org.apache.jena.sparql.syntax.ElementFilter;
-import org.apache.jena.sparql.syntax.ElementGroup;
-import org.apache.jena.sparql.syntax.ElementNamedGraph;
-import org.apache.jena.sparql.syntax.ElementOptional;
-import org.apache.jena.sparql.syntax.ElementTriplesBlock;
-import org.apache.jena.sparql.syntax.ElementUnion;
-import org.apache.jena.sparql.syntax.Template;
-import org.apache.jena.sparql.syntax.TripleCollector;
+import org.apache.jena.graph.* ;
+import org.apache.jena.query.* ;
+import org.apache.jena.sparql.core.Var ;
+import org.apache.jena.sparql.expr.* ;
+import org.apache.jena.sparql.path.* ;
+import org.apache.jena.sparql.syntax.* ;
 
 
 
@@ -917,8 +879,8 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
 
 // -------- Construct patterns
   final public Template ConstructTemplate() throws ParseException {
-                                 QuadAcc acc = new QuadAcc();
-                                 Template t = new Template(acc) ;
+                                 TripleCollectorBGP acc = new TripleCollectorBGP();
+                                 Template t = new Template(acc.getBGP()) ;
       setInConstructTemplate(true) ;
     jj_consume_token(LBRACE);
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -959,7 +921,7 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
     throw new Error("Missing return statement in function");
   }
 
-  final public void ConstructTriples(TripleCollector acc) throws ParseException {
+  final public void ConstructTriples(TripleCollectorMark acc) throws ParseException {
     TriplesSameSubject(acc);
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case DOT:
@@ -1005,7 +967,7 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
 
 // -------- Triple lists with property and object lists
 // -------- Without paths: entry: TriplesSameSubject
-  final public void TriplesSameSubject(TripleCollector acc) throws ParseException {
+  final public void TriplesSameSubject(TripleCollectorMark acc) throws ParseException {
                                                  Node s ;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case IRIref:
@@ -1047,7 +1009,7 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
     }
   }
 
-  final public void PropertyListNotEmpty(Node s, TripleCollector acc) throws ParseException {
+  final public void PropertyListNotEmpty(Node s, TripleCollectorMark acc) throws ParseException {
       Node p = null ;
     p = Verb();
     ObjectList(s, p, null, acc);
@@ -1079,7 +1041,7 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
     }
   }
 
-  final public void PropertyList(Node s, TripleCollector acc) throws ParseException {
+  final public void PropertyList(Node s, TripleCollectorMark acc) throws ParseException {
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case IRIref:
     case PNAME_NS:
@@ -1095,7 +1057,7 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
     }
   }
 
-  final public void ObjectList(Node s, Node p, Path path, TripleCollector acc) throws ParseException {
+  final public void ObjectList(Node s, Node p, Path path, TripleCollectorMark acc) throws ParseException {
                                                                    Node o ;
     Object(s, p, path, acc);
     label_14:
@@ -1113,10 +1075,11 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
     }
   }
 
-  final public void Object(Node s, Node p, Path path, TripleCollector acc) throws ParseException {
+  final public void Object(Node s, Node p, Path path, TripleCollectorMark acc) throws ParseException {
                                                                Node o ;
+      int mark = acc.mark() ;
     o = GraphNode(acc);
-    insert(acc, s, p, path, o) ;
+    insert(acc, mark, s, p, path, o) ;
   }
 
   final public Node Verb() throws ParseException {
@@ -1149,7 +1112,7 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
 
 // Anything that can stand in a node slot and which is
 // a number of triples
-  final public Node TriplesNode(TripleCollector acc) throws ParseException {
+  final public Node TriplesNode(TripleCollectorMark acc) throws ParseException {
                                           Node n ;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case LPAREN:
@@ -1168,7 +1131,7 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
     throw new Error("Missing return statement in function");
   }
 
-  final public Node BlankNodePropertyList(TripleCollector acc) throws ParseException {
+  final public Node BlankNodePropertyList(TripleCollectorMark acc) throws ParseException {
                                                     Token t ;
     t = jj_consume_token(LBRACKET);
       Node n = createBNode(t.beginLine, t.beginColumn) ;
@@ -1179,7 +1142,7 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
   }
 
 // ------- RDF collections
-  final public Node Collection(TripleCollector acc) throws ParseException {
+  final public Node Collection(TripleCollectorMark acc) throws ParseException {
       Node listHead = nRDFnil ; Node lastCell = null ; int mark ; Node n ; Token t ;
     t = jj_consume_token(LPAREN);
     label_15:
@@ -1189,8 +1152,9 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
          listHead = cell ;
       if ( lastCell != null )
         insert(acc, lastCell, nRDFrest, cell) ;
+      mark = acc.mark() ;
       n = GraphNode(acc);
-      insert(acc, cell, nRDFfirst, n) ;
+      insert(acc, mark, cell, nRDFfirst, n) ;
       lastCell = cell ;
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case IRIref:
@@ -1233,7 +1197,7 @@ public class SPARQLParser10 extends SPARQLParser10Base implements SPARQLParser10
   }
 
 // -------- Nodes in a graph pattern or template
-  final public Node GraphNode(TripleCollector acc) throws ParseException {
+  final public Node GraphNode(TripleCollectorMark acc) throws ParseException {
                                         Node n ;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case IRIref:

http://git-wip-us.apache.org/repos/asf/jena/blob/2cb175d2/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
index 24f6c66..c6a5b26 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/syntax/Template.java
@@ -34,16 +34,24 @@ import org.apache.jena.sparql.serializer.FormatterTemplate;
 import org.apache.jena.sparql.util.Iso;
 import org.apache.jena.sparql.util.NodeIsomorphismMap;
 
-/** Triples template. */
+/** Quads/Triples template. */
 
 public class Template 
 {
     static final int HashTemplateGroup     = 0xB1 ;
     private final QuadAcc qp ;
+    private final BasicPattern bgp;
     
     public Template(QuadAcc qp)
     { 
         this.qp = qp ;
+        this.bgp = null;
+    }
+    
+    public Template(BasicPattern bgp)
+    { 
+    	this.bgp = bgp;
+    	this.qp = null;
     }
 
 //    public void addTriple(Triple t) { quads.addTriple(t) ; }
@@ -55,10 +63,11 @@ public class Template
 //    public void addTriplePath(int index, TriplePath path)
 //    { throw new ARQException("Triples-only collector") ; }
 
-
-//    public BasicPattern getBGP()        { return bgp ; }
     public BasicPattern getBGP()
     { 
+    	if (this.bgp != null){
+    		return this.bgp;
+    	}
     	BasicPattern bgp = new BasicPattern();
     	for(Quad q: qp.getQuads()){
     		bgp.add(q.asTriple());
@@ -67,13 +76,25 @@ public class Template
     }
     public List<Triple> getTriples()
     { 
+    	if(this.bgp != null){
+    		return this.bgp.getList();
+    	}
     	List<Triple> triples = new ArrayList<Triple>();
     	for(Quad q: qp.getQuads()){
     		triples.add(q.asTriple());
     	}
     	return triples;
     }
-    public List<Quad> getQuads()		{ return qp.getQuads() ; }
+    public List<Quad> getQuads() {
+    	if( this.bgp != null){
+    		List<Quad> quads = new ArrayList<Quad>();
+    		for(Triple triple: this.bgp.getList()){
+    			quads.add( new Quad( Quad.tripleInQuad, triple ) ); 
+    		}
+    		return quads;
+    	}   	
+    	return qp.getQuads() ; 
+    }
     // -------------------------
 
     public void subst(Collection<Triple> acc, Map<Node, Node> bNodeMap, Binding b)
@@ -91,7 +112,7 @@ public class Template
     { 
         // BNode invariant hashCode. 
         int calcHashCode = Template.HashTemplateGroup ;
-        for ( Quad q : qp.getQuads() )
+        for ( Quad q : getQuads() )
             calcHashCode ^=  hash(q) ^ calcHashCode<<1 ; 
         return calcHashCode ;
     }
@@ -108,6 +129,7 @@ public class Template
 
     private static int hashNode(Node node)
     {
+    	if ( node == null ) return 37 ; 
         if ( node.isBlank() ) return 59 ;
         return node.hashCode() ;
     }