首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QName for Triples (MarkLogic)

QName for Triples (MarkLogic)
EN

Stack Overflow用户
提问于 2019-02-19 08:28:05
回答 1查看 71关注 0票数 1

我一直在尝试各种方法从我的三元组访问lat和long QName。我的三重数据的一个例子是

代码语言:javascript
复制
<?xml  version="1.0" encoding="UTF-8"?>
<sem:triples xmlns:sem="http://marklogic.com/semantics">
  <sem:triple>
    <sem:subject>http://dbpedia.org/resource/Slantsy</sem:subject>
    <sem:predicate>http://www.w3.org/1999/02/22-rdf-syntax-ns#type</sem:predicate>
    <sem:object>http://www.opengis.net/gml/_Feature</sem:object>
  </sem:triple>
  <sem:triple>
    <sem:subject>http://dbpedia.org/resource/Slantsy</sem:subject>
    <sem:predicate>http://www.w3.org/2003/01/geo/wgs84_pos#lat</sem:predicate>
    <sem:object datatype="http://www.w3.org/2001/XMLSchema#double">59.11666666666667</sem:object>
  </sem:triple>
  <sem:triple>
    <sem:subject>http://dbpedia.org/resource/Slantsy</sem:subject>
    <sem:predicate>http://www.w3.org/2003/01/geo/wgs84_pos#long</sem:predicate>
    <sem:object datatype="http://www.w3.org/2001/XMLSchema#double">28.083333333333332</sem:object>
  </sem:triple>
  <sem:triple>
    <sem:subject>http://dbpedia.org/resource/Slantsy</sem:subject>
    <sem:predicate>http://www.georss.org/georss/point</sem:predicate>
    <sem:object xml:lang="en">59.11666666666667 28.083333333333332</sem:object>
  </sem:triple>
</sem:triples>

SPARQL的输出“描述”

代码语言:javascript
复制
@prefix xs: <http://www.w3.org/2001/XMLSchema#> .
@prefix p2: <http://www.w3.org/2003/01/geo/wgs84_pos#> .
<http://dbpedia.org/resource/Slantsy> <http://www.georss.org/georss/point> "59.11666666666667 28.083333333333332"@en ;
                                      a <http://www.opengis.net/gml/_Feature> ;
                                      p2:long "28.0833333333333"^^xs:double ;
                                      p2:lat "59.1166666666667"^^xs:double .

我在这个线程How to create and use GeoSpatial indexes in Marklogic from Sparql中看到了类似的情况。

访问Qname的

代码语言:javascript
复制
fn:QName("http://www.w3.org/2003/01/geo/wgs84_pos#", "lat")

因此,我尝试了一种类似的方法,并使用

代码语言:javascript
复制
cts:search(/sem:triples,
   cts:element-pair-geospatial-query(
     xs:QName("sem:triples"),
     fn:QName("http://www.w3.org/2001/01/geo/wgs84_pos#", "lat"),
     fn:QName("http://www.w3.org/2001/01/geo/wgs84_pos#", "long"),
     cts:circle(2000, cts:point(59,28)))
)

但是,我收到了一个似乎不正确的空查询。如有任何建议,将不胜感激。

===Update===终于按照grtjin的建议让它开始工作了。使用路径添加了地理空间索引。

代码语言:javascript
复制
/sem:triples/sem:triple[sem:predicate = 'http://www.georss.org/georss/point']/sem:object

并查询使用

代码语言:javascript
复制
cts:search(fn:doc(),
  cts:path-geospatial-query(
  "/sem:triples/sem:triple[sem:predicate = 'http://www.georss.org/georss/point']/sem:object",
  cts:circle(10, cts:point(59,28))
  )
)

它工作并返回适当的结果。

但是,我也尝试使用

代码语言:javascript
复制
cts:search(fn:doc()/sem:triples,
  cts:path-geospatial-query(
  "/sem:triple[sem:predicate = 'http://www.georss.org/georss/point']/sem:object",
  cts:circle(10, cts:point(59,28))
  )
)

尽管我期望这种方法能够工作,因为我应该使用指定的路径来查询每个sem:triples项以到达特定的lat、long point。相反,我收到了一个空查询。我明白什么地方不对劲了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-19 09:23:57

如果你能这样做的话,那就太好了,但不幸的是,元素对索引不是这样工作的。

首先,子元素必须是指示祖先的直接子元素,这就是为什么它说的是父母而不是祖先。

第二,不能将元素值作为目标值。包含lat和long的元素都是sem:object元素。

我建议用地理空间路径索引代替,在包含一个点的东西上,而你恰好有一个点。作为路径参考,我认为这是可行的:

代码语言:javascript
复制
sem:triple[sem:predicate = "http://www.georss.org/georss/point"]/sem:object

哈哈!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54761748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档