4

在 marklogic 中,三元组可以嵌入到现有文档中。如何使用 cts 搜索查询返回文档。一个文档的例子可以是

<ContentVersion>
  <Name>Testing</Name>
  <Status>Approved</Status>
  <sem:triples xmlns:sem="http://marklogic.com/semantics">
   <sem:triple>
      <sem:subject>http://mycontent/content/Testing</sem:subject>
      <sem:predicate>is</sem:predicate>
      <sem:object>Approved</sem:object>
 </sem:triple>
</sem:triples>
</ContentVersion>

如果尝试以下查询

let $query := cts:word-query('Testing',"case-insensitive")
let $sparql := "PREFIX cts: <http://marklogic.com/cts#>
                DESCRIBE ?s 
                WHERE{ 
                   ?s ?p ?o .
                   FILTER cts:contains(?o, cts:word-query('Testing')) 
                }"
let $results := sem:sparql($sparql,(),("default-graph=magician"),($query))  
return(sem:rdf-serialize($results,'rdfxml'))

我得到一个空的结果。关于为什么什么都不返回的任何想法?我正在使用 MarkLogic 7

4

1 回答 1

7

cts:contains 集中在 ?o 上,它只包含“已批准”。这就是 sem:sparql 不返回结果的原因,而不是因为您以错误的方式使用 cts 查询。

(更新..)

为了确认该方法有效,我尝试了这个,它对我有用:

xquery version "1.0-ml";

let $xml := <ContentVersion>
  <Name>Testing</Name>
  <Status>Approved</Status>
  <sem:triples xmlns:sem="http://marklogic.com/semantics">
   <sem:triple>
      <sem:subject>http://mycontent/content/Testing</sem:subject>
      <sem:predicate>is</sem:predicate>
      <sem:object>Approved</sem:object>
 </sem:triple>
</sem:triples>
</ContentVersion>
return xdmp:document-insert("/test.xml", $xml, (), "magician")
;

let $query := cts:word-query('Testing',"case-insensitive")
let $sparql := "PREFIX cts: <http://marklogic.com/cts#>
                DESCRIBE ?s 
                WHERE{ 
                   ?s ?p ?o .
                   FILTER cts:contains(?o, cts:word-query('Approved')) 
                }"
let $results := sem:sparql($sparql,(),("default-graph=magician"),($query))  
return $results

使用 QC 对任何启用了三重索引的数据库运行此操作。

你确定你用集合'magician'插入你的文档吗?这就是如何使用 MarkLogic 在特定图形中嵌入三元组。

于 2016-02-04T16:35:39.550 回答