首页 > 解决方案 > SPARQL 属性搜索 (MarkLogic)

问题描述

我一直在尝试在 sparql 中进行属性搜索,现在我有一个解决方案,即使用 CTS 预先准备必要的 sem 三元组,如下面的代码所示

xquery version "1.0-ml";
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy";

sem:sparql('
SELECT *
WHERE {?s ?p ?o .}
',
(),
(),
cts:element-attribute-value-query(xs:QName("sem:subject"), xs:QName("attri_name"), "Robert")
)

但是,我想知道的是,我是否真的可以在一个简单的 sparql 查询中完成所有这些工作?也许诸如

sem:sparql('
SELECT *
WHERE {?s ?p ?o .
      FILTER (get all sem triples with attri_value for sem:subject that contains "Robert")}',
(),
(),
()
)

现在我知道FILTER cts:contains可以使用它,因为它返回一个布尔值(真/假)来帮助确定某个行是否符合条件,但这不能满足element-attribute-value-query. 同时,FILTER cts...在 SPARQL 查询中使用时,只会查询主要由文本/日期/时间数据组成的目标数据。

最后,可以在下面看到正在使用的数据的示例。

<?xml  version="1.0" encoding="UTF-8"?>
<sem:triples xmlns:sem="http://marklogic.com/semantics">
<sem:triple>
<sem:subject attri_name="Robert">http://dbpedia.org/resource/Robert_Shayne</sem:subject>
<sem:predicate>http://purl.org/dc/elements/1.1/description</sem:predicate>
<sem:object xml:lang="en">Film, Television actor</sem:object>
</sem:triple>
</sem:triples>

标签: sparqlmarklogicsemantics

解决方案


推荐阅读