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 <[email protected]> Authored: Mon Jun 15 18:12:10 2015 +0800 Committer: confidencesun <[email protected]> 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() ; }
