如何使用 cts:triple-range-query() return 一组 MarkLogic URI?
How to return a set of MarkLogic URIs using cts:triple-range-query()?
我有一个内容存储库,其中最新版本的文档使用 IsLatestVersion 三元组。
这是一个包含 isLatestVersion 三元组的文档示例。
Document URI: /Transaction/00000000000101000000/1.xml
<aptp:Transaction xmlns:aptp="http://sample.com/aptp">
<aptp:TransactionDate>2016-07-28</aptp:TransactionDate>
<aptp:TransactionType>Principal</aptp:TransactionType>
<aptp:Operation>Buy</aptp:Operation>
<sem:triple name="isLatestVersion"
xmlns:aptp="http://sample.com/aptp"
xmlns:sem="http://marklogic.com/semantics">
<sem:subject datatype="http://www.w3.org/2001/XMLSchema#string">
/Transaction/00000000000101000000/1.xml
</sem:subject>
<sem:predicate>isLatestVersion</sem:predicate>
<sem:object datatype="http://www.w3.org/2001/XMLSchema#boolean">true</sem:object>
</sem:triple>
</aptp:Transaction>
我想要以下代码片段 return 最新版本 uris 的序列。它目前 return 是一个空集。
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy";
let $uris :=
(
"/Transaction/00000000000101000000/1.xml",
"/Transaction/00000000000101000001/1.xml",
"/Transaction/111111/1.xml"
)
let $query := cts:triple-range-query($uris, "isLatestVersion", fn:true())
return
cts:uris("", (), $query)
我是不是遗漏了什么明显的东西?
一些想法:
- 考虑在
cts:triple-range-query
中省略 $uris。您可以传入空序列。
- 您可能需要将
"isLatestVersion"
包裹在 sem:iri
中,例如sem:iri("isLatestVersion")
.
- 确保三重索引已启用,但我认为如果您不启用它会抱怨。
HTH!
此代码片段运行良好。
declare function local:getLatestUris($uris)
{
let $query := cts:triple-range-query($uris, sem:iri("isLatestVersion"), fn:true())
return cts:uris((), (), $query)
};
local:getLatestUris((
"/Transaction/00000000000101000000/1.xml",
"/Transaction/00000000000101000001/1.xml",
"/Transaction/111111/1.xml"
))
我有一个内容存储库,其中最新版本的文档使用 IsLatestVersion 三元组。
这是一个包含 isLatestVersion 三元组的文档示例。
Document URI: /Transaction/00000000000101000000/1.xml
<aptp:Transaction xmlns:aptp="http://sample.com/aptp">
<aptp:TransactionDate>2016-07-28</aptp:TransactionDate>
<aptp:TransactionType>Principal</aptp:TransactionType>
<aptp:Operation>Buy</aptp:Operation>
<sem:triple name="isLatestVersion"
xmlns:aptp="http://sample.com/aptp"
xmlns:sem="http://marklogic.com/semantics">
<sem:subject datatype="http://www.w3.org/2001/XMLSchema#string">
/Transaction/00000000000101000000/1.xml
</sem:subject>
<sem:predicate>isLatestVersion</sem:predicate>
<sem:object datatype="http://www.w3.org/2001/XMLSchema#boolean">true</sem:object>
</sem:triple>
</aptp:Transaction>
我想要以下代码片段 return 最新版本 uris 的序列。它目前 return 是一个空集。
import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy";
let $uris :=
(
"/Transaction/00000000000101000000/1.xml",
"/Transaction/00000000000101000001/1.xml",
"/Transaction/111111/1.xml"
)
let $query := cts:triple-range-query($uris, "isLatestVersion", fn:true())
return
cts:uris("", (), $query)
我是不是遗漏了什么明显的东西?
一些想法:
- 考虑在
cts:triple-range-query
中省略 $uris。您可以传入空序列。 - 您可能需要将
"isLatestVersion"
包裹在sem:iri
中,例如sem:iri("isLatestVersion")
. - 确保三重索引已启用,但我认为如果您不启用它会抱怨。
HTH!
此代码片段运行良好。
declare function local:getLatestUris($uris)
{
let $query := cts:triple-range-query($uris, sem:iri("isLatestVersion"), fn:true())
return cts:uris((), (), $query)
};
local:getLatestUris((
"/Transaction/00000000000101000000/1.xml",
"/Transaction/00000000000101000001/1.xml",
"/Transaction/111111/1.xml"
))