XQuery——传递参数列表

XQuery – passing a list of parameters

一点小事都想不通!

我需要自动打包来自 TEI XML 的 ePub。我知道如何使用 compression 但无法以编程方式传递参数列表。问题是我想获取一个由一组 divs 组成的列表并将其作为参数传递给函数。

而不是

let $entries := (<entry>x</entry>, <entry>y</entry>)
compression:zip($entries, true())

我需要做类似

的事情
let $header := (<header>xyz</header>)
let $divs := (
  for $book in doc('./file.xml')
  return $book//tei:div[@n='1']
)
let $entries := (
  for $div in $divs
  return <entry>{$div}</entry>
 )
compression:zip($entries, $header, true())

我根本无法将提取的 divs 作为逗号分隔的参数列表传递(作为压缩需要)。如果我可以使用数组迭代或路径连接之类的东西,那就没问题了!

我和

很亲近
for $chapter at $count in doc('./bukwor.xml')//tei:div[@n='1']
  return
    <entry name="chapter-{$count}"> type="xml">{$chapter}</entry>

但还是不会变魔术

知道了(感谢 https://en.wikibooks.org/wiki/XQuery/DocBook_to_ePub)。

compression:zip 函数采用 comma-separated 个参数列表以及未分隔的列表。这样做是合法的

let $chaps := 
(
  for $chapter at $count in doc('./file.xml')//tei:div[@n='1']
  return
    <entry name="OEBPS/chapter-{$count}.xhtml" type="xml">{$chapter}</entry>
)
let $entries := 
(
  <entry name="mimetype" type="text" method="store">application/epub+zip</entry>,
  <entry>XYZ</entry>,
  $chaps
)

最后一个 $chaps 条目收集正确的文件并将它们添加到存档中。