2016-01-11 81 views
0

我弄不明白有點瑣碎的事情!XQuery - 傳遞參數列表

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

明白了(感謝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進入收集正確的文件,並將它們添加到存檔。

+0

在XQuery中,所謂的「逗號分隔參數列表」被稱爲「序列」。函數可以將序列作爲參數。要確切瞭解任何特定功能,可以查閱eXist的功能文檔;對於'compression:zip()'來說,文檔位於http://exist-db.org/exist/apps/fundocs/view.html?uri=http://exist-db.org/xquery/compression&location= Java的:org.exist.xquery.modules.compression.CompressionModule#zip.2。請注意,'$ sources'參數必須是**一個或多個** xs:anyType類型的項目(足夠廣泛,可以包含數據庫URI或'元素。) – joewiz

+1

並找出解決方法! eXist中的epubs壓縮工作很好,一旦你得到它的工作。您可以在https://github.com/wolfgangmm/tei-simple-pm/blob/master/modules/epub.xql找到更多示例代碼。 – joewiz

+0

謝謝,是的,鏈接是靈感的源泉! –