MarkLogi c не может присвоить переменную cts: document-query () - PullRequest
1 голос
/ 04 февраля 2020

Как я могу назначить переменную cts: document-query (). У меня есть пример кода для чтения из файловой системы, а затем назначить переменную для document-query (). Но это выдает ошибки.

case 1) работа без присвоения переменной для запроса-документа.

let $list-pdf := cts:search(/,cts:and-query((
                          cts:directory-query("/pdf/"),
                          cts:document-query(("/pdf/US1610547.pdf", "/pdf/US1696102.pdf", 
                         "/pdf/US1953345.pdf"))) 
 for $pdf in $list-pdf 
return base-uri($pdf)

возвращаемый результат:

 /pdf/US1610547.pdf
 /pdf/US1696102.pdf

Case 2 - I assign переменная к document-query () после чтения из файловой системы. MarkLogi c выдает мне ошибки.

let $pdf := xdmp:filesystem-file("/output/listpdf.txt")
let $pdfs := tokenize($pdf,"\n")
let $list-pdf := cts:search(/,cts:and-query((
                          cts:directory-query("/pdf/"),
                          cts:document-query(($pdfs))
                                                                    ))) 
for $pdf in $list-pdf 
return base-uri($pdf)

код ошибки возврата:

[1.0-ml] XDMP-URI: cts:document-query(("/pdf/US1610547.pdf", "/pdf/US1696102.pdf",...)) -- Invalid URI format: ""

1 Ответ

3 голосов
/ 04 февраля 2020

Сообщение об ошибке указывает, что результат токенизации включает в себя пустой строковый элемент среди последовательности URI:

-- Invalid URI format: ""

Вы можете применить предикат после токенизации, чтобы исключить пустые строки (или использовать более сложные логи c, в зависимости от того, насколько можно доверять вашим данным), то есть:

let $pdfs := tokenize($pdf,"\n")[. ne ""]
...