Repository: jena Updated Branches: refs/heads/JENA-491-construct-quads c8528b7b9 -> d828c378a
http://git-wip-us.apache.org/repos/asf/jena/blob/2d09a7df/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadAcc.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadAcc.java b/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadAcc.java index bf97295..5728f24 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadAcc.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/modify/request/QuadAcc.java @@ -18,12 +18,13 @@ package org.apache.jena.sparql.modify.request; -import java.util.ArrayList ; -import java.util.Collections ; -import java.util.List ; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; -import org.apache.jena.atlas.lib.SinkToCollection ; -import org.apache.jena.sparql.core.Quad ; +import org.apache.jena.atlas.lib.SinkToCollection; +import org.apache.jena.sparql.core.BasicPattern; +import org.apache.jena.sparql.core.Quad; /** Accumulate quads (including allowing variables) during parsing. */ public class QuadAcc extends QuadAccSink @@ -60,5 +61,13 @@ public class QuadAcc extends QuadAccSink QuadAcc acc = (QuadAcc)other ; return quads.equals(acc.quads) ; } + + public BasicPattern getBGP(){ + BasicPattern bgp = new BasicPattern(); + for(Quad qd: this.quadsView){ + bgp.add(qd.asTriple()); + } + return bgp; + } } http://git-wip-us.apache.org/repos/asf/jena/blob/2d09a7df/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java index a1b65fd..1b08876 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FmtTemplate.java @@ -55,7 +55,7 @@ public class FmtTemplate extends FormatterBase out.incIndent(INDENT) ; out.pad() ; - formatTriples(template.getBGP()) ; + formatQuads(template.getQuads()) ; out.decIndent(INDENT) ; out.print("}") ; http://git-wip-us.apache.org/repos/asf/jena/blob/2d09a7df/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterBase.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterBase.java index fddb3a2..3eb26fc 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterBase.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/serializer/FormatterBase.java @@ -17,11 +17,14 @@ */ package org.apache.jena.sparql.serializer; -import org.apache.jena.atlas.io.IndentedWriter ; -import org.apache.jena.graph.Node ; -import org.apache.jena.graph.Triple ; -import org.apache.jena.sparql.core.BasicPattern ; -import org.apache.jena.sparql.util.FmtUtils ; +import java.util.List; + +import org.apache.jena.atlas.io.IndentedWriter; +import org.apache.jena.graph.Node; +import org.apache.jena.graph.Triple; +import org.apache.jena.sparql.core.BasicPattern; +import org.apache.jena.sparql.core.Quad; +import org.apache.jena.sparql.util.FmtUtils; public abstract class FormatterBase { @@ -43,6 +46,11 @@ public abstract class FormatterBase FmtUtils.formatPattern(out, pattern, context) ; } + protected void formatQuads(List<Quad> quads) + { + FmtUtils.formatQuads(out, quads, context) ; + } + protected void formatTriple(Triple tp) { out.print(slotToString(tp.getSubject())) ; @@ -51,7 +59,7 @@ public abstract class FormatterBase out.print(" ") ; out.print(slotToString(tp.getObject())) ; } - + protected String slotToString(Node n) { return FmtUtils.stringForNode(n, context) ; http://git-wip-us.apache.org/repos/asf/jena/blob/2d09a7df/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 61c8f96..bdd3142 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 @@ -18,29 +18,31 @@ package org.apache.jena.sparql.syntax; -import java.util.Collection ; -import java.util.List ; -import java.util.Map ; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; -import org.apache.jena.graph.Node ; -import org.apache.jena.graph.Triple ; -import org.apache.jena.sparql.core.BasicPattern ; -import org.apache.jena.sparql.engine.binding.Binding ; -import org.apache.jena.sparql.modify.TemplateLib ; -import org.apache.jena.sparql.serializer.FormatterTemplate ; -import org.apache.jena.sparql.util.Iso ; -import org.apache.jena.sparql.util.NodeIsomorphismMap ; +import org.apache.jena.graph.Node; +import org.apache.jena.graph.Triple; +import org.apache.jena.sparql.core.Quad; +import org.apache.jena.sparql.engine.binding.Binding; +import org.apache.jena.sparql.modify.TemplateLib; +import org.apache.jena.sparql.modify.request.QuadAcc; +import org.apache.jena.sparql.serializer.FormatterTemplate; +import org.apache.jena.sparql.util.Iso; +import org.apache.jena.sparql.util.NodeIsomorphismMap; /** Triples template. */ public class Template { static final int HashTemplateGroup = 0xB1 ; - private final BasicPattern bgp ; + private final QuadAcc qp ; - public Template(BasicPattern bgp) + public Template(QuadAcc qp) { - this.bgp = bgp ; + this.qp = qp ; } // public void addTriple(Triple t) { quads.addTriple(t) ; } @@ -53,13 +55,21 @@ public class Template // { throw new ARQException("Triples-only collector") ; } - public BasicPattern getBGP() { return bgp ; } - public List<Triple> getTriples() { return bgp.getList() ; } +// public BasicPattern getBGP() { return bgp ; } + public List<Triple> getTriples() + { + 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 void subst(Collection<Triple> acc, Map<Node, Node> bNodeMap, Binding b) { - for ( Triple t : bgp.getList() ) + for ( Triple t : getTriples() ) { t = TemplateLib.subst(t, b, bNodeMap) ; acc.add(t) ; @@ -72,17 +82,18 @@ public class Template { // BNode invariant hashCode. int calcHashCode = Template.HashTemplateGroup ; - for ( Triple t : bgp.getList() ) - calcHashCode ^= hash(t) ^ calcHashCode<<1 ; + for ( Quad q : qp.getQuads() ) + calcHashCode ^= hash(q) ^ calcHashCode<<1 ; return calcHashCode ; } - private static int hash(Triple triple) + private static int hash(Quad quad) { int hash = 0 ; - hash = hashNode(triple.getSubject()) ^ hash<<1 ; - hash = hashNode(triple.getPredicate()) ^ hash<<1 ; - hash = hashNode(triple.getObject()) ^ hash<<1 ; + hash = hashNode(quad.getSubject()) ^ hash<<1 ; + hash = hashNode(quad.getPredicate()) ^ hash<<1 ; + hash = hashNode(quad.getObject()) ^ hash<<1 ; + hash = hashNode(quad.getGraph()) ^ hash<<1 ; return hash ; } @@ -96,15 +107,15 @@ public class Template { if ( ! ( temp2 instanceof Template) ) return false ; Template tg2 = (Template)temp2 ; - List<Triple> list1 = this.bgp.getList() ; - List<Triple> list2 = tg2.bgp.getList() ; + List<Quad> list1 = this.getQuads() ; + List<Quad> list2 = tg2.getQuads() ; if ( list1.size() != list2.size() ) return false ; for ( int i = 0 ; i < list1.size() ; i++ ) { - Triple t1 = list1.get(i) ; - Triple t2 = list2.get(i) ; - Iso.tripleIso(t1, t2, labelMap) ; + Quad q1 = list1.get(i) ; + Quad q2 = list2.get(i) ; + Iso.quadIso(q1, q2, labelMap) ; } return true ; } http://git-wip-us.apache.org/repos/asf/jena/blob/2d09a7df/jena-arq/src/main/java/org/apache/jena/sparql/util/FmtUtils.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/FmtUtils.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/FmtUtils.java index aa1500c..6af1859 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/util/FmtUtils.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/FmtUtils.java @@ -18,28 +18,29 @@ package org.apache.jena.sparql.util; -import java.util.Locale ; -import java.util.regex.Pattern ; - -import org.apache.jena.atlas.io.IndentedWriter ; -import org.apache.jena.atlas.logging.Log ; -import org.apache.jena.graph.Node ; -import org.apache.jena.graph.Node_Literal ; -import org.apache.jena.graph.Triple ; -import org.apache.jena.iri.IRI ; -import org.apache.jena.iri.IRIFactory ; -import org.apache.jena.iri.IRIRelativize ; -import org.apache.jena.rdf.model.Model ; -import org.apache.jena.rdf.model.RDFNode ; -import org.apache.jena.rdf.model.Resource ; -import org.apache.jena.shared.PrefixMapping ; -import org.apache.jena.sparql.ARQConstants ; -import org.apache.jena.sparql.ARQInternalErrorException ; -import org.apache.jena.sparql.core.BasicPattern ; -import org.apache.jena.sparql.core.Prologue ; -import org.apache.jena.sparql.core.Quad ; -import org.apache.jena.sparql.serializer.SerializationContext ; -import org.apache.jena.vocabulary.XSD ; +import java.util.List; +import java.util.Locale; +import java.util.regex.Pattern; + +import org.apache.jena.atlas.io.IndentedWriter; +import org.apache.jena.atlas.logging.Log; +import org.apache.jena.graph.Node; +import org.apache.jena.graph.Node_Literal; +import org.apache.jena.graph.Triple; +import org.apache.jena.iri.IRI; +import org.apache.jena.iri.IRIFactory; +import org.apache.jena.iri.IRIRelativize; +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.RDFNode; +import org.apache.jena.rdf.model.Resource; +import org.apache.jena.shared.PrefixMapping; +import org.apache.jena.sparql.ARQConstants; +import org.apache.jena.sparql.ARQInternalErrorException; +import org.apache.jena.sparql.core.BasicPattern; +import org.apache.jena.sparql.core.Prologue; +import org.apache.jena.sparql.core.Quad; +import org.apache.jena.sparql.serializer.SerializationContext; +import org.apache.jena.vocabulary.XSD; /** Presentation forms of various kinds of objects. * Beware that bNodes are abbreviated to _:b0 etc. @@ -159,6 +160,24 @@ public class FmtUtils } } + public static void formatQuads(IndentedWriter out, List<Quad> quads, SerializationContext sCxt) + { + StringBuilder buffer = new StringBuilder() ; + boolean first = true ; + for (Quad quad : quads ) + { + if ( ! first ) + buffer.append("\n") ; + stringForQuad(buffer, quad, sCxt) ; + buffer.append(" ." ) ; + out.print(buffer.toString()) ; + buffer.setLength(0) ; + first = false ; + } + } + + + public static String stringForObject(Object obj) { if ( obj == null )
