В eXist 4.4 / XQuery 3.1 я создаю функцию для сжатия нескольких файлов xml в zip-файл, используя compression:zip
.
У меня есть одна функция, которая собирает все URI для документов, подлежащих сжатию, schedule:get-document-uris-for-zip(xmlid as xs:string)
.Эта функция возвращает списки документов, подобные следующему:
/db/apps/deheresi/data/MS609-0001.xml
/db/apps/deheresi/data/MS609-0002.xml
/db/apps/deheresi/data/MS609-0003.xml
/db/apps/deheresi/data/MS609-0004.xml
/db/apps/deheresi/data/MS609-0005.xml
/db/apps/deheresi/data/MS609-0006.xml
/db/apps/deheresi/data/MS609-0007.xml
/db/apps/deheresi/data/MS609-0008.xml
/db/apps/deheresi/data/MS609-0009.xml
/db/apps/deheresi/data/MS609-0010.xml
Эта функция вызывается функцией сжатия следующим образом
declare function schedule:create-zip-by-batch()
{
let $batch := doc(concat($globalvar:URIdocuments,"document_collections.xml"))
for $entry in $batch//collection[@compile="y"]
let $zipobject := compression:zip(schedule:get-document-uris-for-zip($entry/string(@xml:id)),false())
let $zipstore := xmldb:store("/db/apps/deheresi/documents",
"MS609_tei.zip",
$zipobject)
return $zipstore
};
Это выдает ошибку cast
следующим образом, ноЯ не могу определить, как решить эту проблему ...
org.exist.xquery.value.StringValue cannot be cast to org.exist.xquery.value.AnyURIValue
Заранее большое спасибо.
Редактировать - я добавляю сюда часть функции schedule:get-document-uris-for-zip(xmlid as xs:string)
, которая выводитсписок URI.URI создаются путем конкатенации строк:
(: get names of documents which meet criteria :)
let $list := xmldb:get-child-resources("/db/apps/deheresi/data")[starts-with(., $y/string(@filename)) and ends-with(., $y/string(@ext))]
(: create URI for each document :)
return
for $n in $list
return concat("/db/apps/deheresi/data/",$n)