2016-09-09 4 views
1

У меня есть репозиторий контента, где в последних версиях документов используется тройка IsLatestVersion.Как вернуть набор MarkLogic URI с помощью cts: triple-range-query()?

Это пример документа с тройкой 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> 

Я хотел бы получить следующий фрагмент кода, чтобы вернуть последовательность последней версии uris. В настоящее время он возвращает пустой набор.

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) 

Я пропустил что-то очевидное?

+0

Я вижу, что мне просто нужно добавить sem: iri ("isLatestVersion") к запросу. –

ответ

4

Несколько мыслей:

  • Рассмотрим опуская $ URIs в cts:triple-range-query. Вместо этого вы можете пройти в пустой последовательности.
  • Возможно, вам необходимо обернуть "isLatestVersion" в sem:iri, например. sem:iri("isLatestVersion").
  • Убедитесь, что включен тройной индекс, хотя я думаю, что он пожаловался бы, если бы вы этого не сделали.

HTH!

2

Этот фрагмент кода работает хорошо.

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" 
)) 
Смежные вопросы