带有 sparql 的 Marklogic Cts:search
Marklogic Cts:search with sparql
在 marklogic 中,三元组可以嵌入到现有文档中。我如何使用 cts 搜索查询 return 文档。文档示例可以是
<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'))
我得到一个空结果。关于为什么没有 returned 的任何想法?我正在使用 MarkLogic 7
cts:contains 聚焦到 ?o,它只包含 'Approved'。这就是 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 在特定图形中嵌入三元组。
HTH!
在 marklogic 中,三元组可以嵌入到现有文档中。我如何使用 cts 搜索查询 return 文档。文档示例可以是
<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'))
我得到一个空结果。关于为什么没有 returned 的任何想法?我正在使用 MarkLogic 7
cts:contains 聚焦到 ?o,它只包含 'Approved'。这就是 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 在特定图形中嵌入三元组。
HTH!