XQuery - 传递参数列表

时间:2016-01-11 13:17:21

标签: xquery exist-db

我无法弄清楚有点琐碎的事情!

我需要自动化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>

但仍然无法做到这一点。

1 个答案:

答案 0 :(得分:1)

得到它(感谢https://en.wikibooks.org/wiki/XQuery/DocBook_to_ePub)。

compression:zip函数采用逗号分隔的参数列表以及未分离的列表。这是合法的

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条目收集正确的文件并将其添加到存档。