2014-07-18 126 views
1

正在關注@ DimitreNovatchev的文章Programming in XPath 3.0,並且使用BaseX GUI作爲測試環境,我嘗試了一些定義接受函數作爲參數的函數的示例。例如。與錯誤聲明XPath 3.0中的高階函數:必須聲明返回類型?

let $compose := 
     function($f as function(), $g as function()) 

(代碼剩下的就是這個錯誤不相關,但你可以把它看成Function Composition下的第三個例子。)

我從BaseX得到這個錯誤:

Error: 
Stopped at 43-compose.xpath, 2/39: 
[XPST0003] Expecting 'as', found ','. 

檢測到錯誤的位置位於逗號前的第二行。顯然,處理器期望$f參數聲明不僅僅是說$f應該是一個函數,還應該是函數的返回值。

我不知道這是否適合BaseX預期與否。據推測,Dimitre的例子在他在Balisage做演講之前就已經成功地進行了測試。那篇文章和BaseX發佈之間的XPath 3.0規範可能有所變化嗎?

回答

2

好的,找到了答案。我得到了Saxon EE的評估鍵,所以我能夠嘗試另一個處理器。對於未來的參考,這是命令行:

C:\Program Files\Saxon>java -cp saxon9ee.jar net.sf.saxon.Query -s:"input.xml" - 
q:"ex5.xpath" -qversion:3.0 

注意-qversion:3.0目前需要爲了得到任何3.0功能。

撒克遜人在同一點上拋出一個錯誤,但對如何解決它一個有益的建議:

Error on line 2 column 39 of ex5.xpath: 
XPST0003 XQuery syntax error near #... function($f as function(), $#: 
    function() is no longer allowed for a general function type: must be function(*) 

我改變function()function(*)地方一般功能型被通緝,和錯誤走了,無論是在BaseX還是在撒克遜。

很明顯,BaseX是正確的(但撒克遜的錯誤信息更有幫助,通常情況下!)。聽起來像最近更改in the spec。我從change log未能弄清楚相關的變化是什麼。但不管改變了什麼,規範目前都表示,FunctionTest必須在圓括號內有*,或者在其後面有as。 (這適用於作爲函數的參數聲明,但不適用於內聯函數本身。)