Repository: jena Updated Branches: refs/heads/master ec0d19cc7 -> 17a2537bb
JENA-802 : Handle blank nodes in the same way that jena-text does Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/17a2537b Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/17a2537b Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/17a2537b Branch: refs/heads/master Commit: 17a2537bbe5fe7858e1d854c690e72a0108bd532 Parents: ec0d19c Author: Andy Seaborne <a...@apache.org> Authored: Tue Oct 21 19:43:21 2014 +0100 Committer: Andy Seaborne <a...@apache.org> Committed: Tue Oct 21 19:43:21 2014 +0100 ---------------------------------------------------------------------- .../jena/query/spatial/SpatialIndexContext.java | 5 +- .../jena/query/spatial/SpatialIndexLucene.java | 8 +-- .../jena/query/spatial/SpatialIndexSolr.java | 49 ++++++++-------- .../jena/query/spatial/SpatialQueryFuncs.java | 61 ++++++++++++++++++++ .../apache/jena/query/text/TextQueryFuncs.java | 2 +- 5 files changed, 91 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/17a2537b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexContext.java ---------------------------------------------------------------------- diff --git a/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexContext.java b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexContext.java index 63b9b7e..42c8b76 100644 --- a/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexContext.java +++ b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexContext.java @@ -24,6 +24,8 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; +import org.apache.jena.atlas.logging.Log ; + import com.hp.hpl.jena.graph.Node; import com.spatial4j.core.shape.Shape; @@ -46,7 +48,8 @@ public class SpatialIndexContext { return; } - String x = (s.isURI()) ? s.getURI() : s.getBlankNodeLabel(); + String x = SpatialQueryFuncs.subjectToString(s) ; + Log.info(getClass(), "Subject: "+x) ; if (defn.isSpatialPredicate(p) && SpatialValueUtil.isDecimal(o.getLiteral())) { http://git-wip-us.apache.org/repos/asf/jena/blob/17a2537b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexLucene.java ---------------------------------------------------------------------- diff --git a/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexLucene.java b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexLucene.java index cbaf99d..f515d6e 100644 --- a/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexLucene.java +++ b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexLucene.java @@ -42,8 +42,6 @@ import org.slf4j.Logger ; import org.slf4j.LoggerFactory ; import com.hp.hpl.jena.graph.Node ; -import com.hp.hpl.jena.graph.NodeFactory ; -import com.hp.hpl.jena.sparql.util.NodeFactoryExtra ; import com.spatial4j.core.shape.Point ; import com.spatial4j.core.shape.Shape ; @@ -219,7 +217,7 @@ public class SpatialIndexLucene implements SpatialIndex { Document doc = indexSearcher.doc(sd.doc); String[] values = doc.getValues(docDef.getEntityField()); for (String v : values) { - Node n = NodeFactory.createURI(v); + Node n = SpatialQueryFuncs.stringToNode(v) ; results.add(n); } } @@ -231,10 +229,6 @@ public class SpatialIndexLucene implements SpatialIndex { return docDef; } - private Node entryToNode(String v) { - // TEMP - return NodeFactoryExtra.createLiteralNode(v, null, null); - } private static void exception(Exception ex) { throw new SpatialIndexException(ex); http://git-wip-us.apache.org/repos/asf/jena/blob/17a2537b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexSolr.java ---------------------------------------------------------------------- diff --git a/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexSolr.java b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexSolr.java index 50f1b61..7363a3d 100644 --- a/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexSolr.java +++ b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialIndexSolr.java @@ -18,28 +18,27 @@ package org.apache.jena.query.spatial; -import java.util.ArrayList; -import java.util.List; - -import org.apache.lucene.spatial.SpatialStrategy; -import org.apache.lucene.spatial.prefix.RecursivePrefixTreeStrategy; -import org.apache.lucene.spatial.prefix.tree.GeohashPrefixTree; -import org.apache.lucene.spatial.prefix.tree.SpatialPrefixTree; -import org.apache.lucene.spatial.query.SpatialOperation; -import org.apache.solr.client.solrj.SolrQuery; -import org.apache.solr.client.solrj.SolrServer; -import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.response.QueryResponse; -import org.apache.solr.common.SolrDocument; -import org.apache.solr.common.SolrDocumentList; -import org.apache.solr.common.SolrInputDocument; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.hp.hpl.jena.graph.Node; -import com.hp.hpl.jena.graph.NodeFactory; -import com.hp.hpl.jena.sparql.util.NodeFactoryExtra; -import com.spatial4j.core.shape.Shape; +import java.util.ArrayList ; +import java.util.List ; + +import org.apache.lucene.spatial.SpatialStrategy ; +import org.apache.lucene.spatial.prefix.RecursivePrefixTreeStrategy ; +import org.apache.lucene.spatial.prefix.tree.GeohashPrefixTree ; +import org.apache.lucene.spatial.prefix.tree.SpatialPrefixTree ; +import org.apache.lucene.spatial.query.SpatialOperation ; +import org.apache.solr.client.solrj.SolrQuery ; +import org.apache.solr.client.solrj.SolrServer ; +import org.apache.solr.client.solrj.SolrServerException ; +import org.apache.solr.client.solrj.response.QueryResponse ; +import org.apache.solr.common.SolrDocument ; +import org.apache.solr.common.SolrDocumentList ; +import org.apache.solr.common.SolrInputDocument ; +import org.slf4j.Logger ; +import org.slf4j.LoggerFactory ; + +import com.hp.hpl.jena.graph.Node ; +import com.hp.hpl.jena.sparql.util.NodeFactoryExtra ; +import com.spatial4j.core.shape.Shape ; public class SpatialIndexSolr implements SpatialIndex { private static Logger log = LoggerFactory.getLogger(SpatialIndexSolr.class); @@ -129,9 +128,9 @@ public class SpatialIndexSolr implements SpatialIndex { List<Node> results = new ArrayList<Node>(); for (SolrDocument sd : solrResults) { - String uriStr = (String) sd.getFieldValue(docDef.getEntityField()); - // log.info("Entity: "+uriStr) ; - results.add(NodeFactory.createURI(uriStr)); + String str = (String) sd.getFieldValue(docDef.getEntityField()); + Node n = SpatialQueryFuncs.stringToNode(str) ; + results.add(n) ; } if (limit > 0 && results.size() > limit) http://git-wip-us.apache.org/repos/asf/jena/blob/17a2537b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialQueryFuncs.java ---------------------------------------------------------------------- diff --git a/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialQueryFuncs.java b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialQueryFuncs.java new file mode 100644 index 0000000..9a70651 --- /dev/null +++ b/jena-spatial/src/main/java/org/apache/jena/query/spatial/SpatialQueryFuncs.java @@ -0,0 +1,61 @@ +/** + * 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.jena.query.spatial; + +import com.hp.hpl.jena.graph.Node ; +import com.hp.hpl.jena.graph.NodeFactory ; +import com.hp.hpl.jena.rdf.model.AnonId ; + +public class SpatialQueryFuncs { + + static { System.out.println("SPATIAL DEBUG") ; } + + /** Create a string to put in a Lucene/Solr index for the subject node */ + public static String subjectToString(Node s) { + if ( s == null ) + throw new IllegalArgumentException("Subject node can not be null") ; + if ( ! (s.isURI() || s.isBlank() ) ) + throw new SpatialIndexException("Found a subject that is not a URI nor a blank node: "+s) ; + return nodeToString(s) ; + } + + /** Create a string to put in a Lucene/Solr index for a graph node */ + public static String graphNodeToString(Node g) { + if ( g == null ) + return null ; + if ( ! (g.isURI() || g.isBlank() ) ) + throw new SpatialIndexException("Found a graph label that is not a URI nor a blank node: "+g) ; + return nodeToString(g) ; + } + + private static String nodeToString(Node n) { + return (n.isURI() ) ? n.getURI() : "_:" + n.getBlankNodeLabel() ; + } + + /** Recover a Node from a stored Lucene/Solr string */ + public static Node stringToNode(String v) { + if ( v.startsWith("_:") ) { + v = v.substring("_:".length()) ; + return NodeFactory.createAnon(new AnonId(v)) ; + } + else + return NodeFactory.createURI(v) ; + } +} + http://git-wip-us.apache.org/repos/asf/jena/blob/17a2537b/jena-text/src/main/java/org/apache/jena/query/text/TextQueryFuncs.java ---------------------------------------------------------------------- diff --git a/jena-text/src/main/java/org/apache/jena/query/text/TextQueryFuncs.java b/jena-text/src/main/java/org/apache/jena/query/text/TextQueryFuncs.java index ac09b74..c7f34b4 100644 --- a/jena-text/src/main/java/org/apache/jena/query/text/TextQueryFuncs.java +++ b/jena-text/src/main/java/org/apache/jena/query/text/TextQueryFuncs.java @@ -26,7 +26,7 @@ import com.hp.hpl.jena.rdf.model.AnonId ; import com.hp.hpl.jena.sparql.core.Quad ; import com.hp.hpl.jena.sparql.util.FmtUtils ; -/** Functions relateing to text query */ +/** Functions relating to text query */ public class TextQueryFuncs { /** Create a string to put in a Lucene/Solr index for the subject node */