2013-07-23 61 views
1

我想用JavaScript調用XQuery函數從XML文件中檢索數據。我能夠把這個簡單的功能不從任意文件中讀什麼:使用javascript調用XQuery

<script type="text/javascript" 
     src="mxqueryjs/mxqueryjs.nocache.js" 
     ></script> 
<script type="application/xquery"> 
    module namespace m = "http://www.xqib.org/module"; 

    declare function m:GetNearestLocations($node as node()+) { 
    let $message := "Hello XQuery!" 
    return $message 

    }; 
</script> 

有了這個JavaScript:

var output = xqib.call(
    'http://www.xqib.org/module', 
    'GetNearestLocations', 
    center.lat()); 

返回輸出爲預期的「Hello XQuery的!」。

現在我想導入一個數學模塊,以便我可以在從XML文件讀取數據時使用它的一些功能。

這裏是我有,但數學模塊不導入並導致XQST0059錯誤,說沒有加載模塊命名空間「http://www.w3.org/2005/xpath-functions/math」信息位置:

<script type="text/javascript" 
     src="mxqueryjs/mxqueryjs.nocache.js" 
     ></script> 
<script type="application/xquery"> 
    module namespace m = "http://www.xqib.org/module"; 
    import module namespace math 
    = "http://www.w3.org/2005/xpath-functions/math"; 

    declare function m:GetNearestLocations($node as node()+) { 
    let $message := "Hello XQuery!" 
    return $message 

    }; 
</script> 

什麼是奇怪這個是當我使用Stylus Studio X15 Entreprise Suite來測試導入工作的相同功能。

重要提示:我在導入或不導入數學模塊時使用相同的JavaScript調用,所以也許我的問題來自那裏,但是,我不知道如何解決這個問題。

如果您也可以指導我我該怎麼辦設置參數m的一點:GetNearestLocations,這樣我可以通過它的整數或字符串

非常感謝。

+1

作爲導入行的一部分,您是否需要''path/to/some-module.xqy''? – wst

+0

嗯,我不知道它做了什麼。我是否需要將模塊下載到「path/to/some-module.xqy」?如果是這種情況,我不知道如何下載它。 – CharleyXIV

+0

對,除非xqib中的數學模塊有特別之處,否則我認爲你需要實際引用一個XQY模塊來導入它。 http://www.w3.org/TR/xquery/#doc-xquery-ModuleImport – wst

回答

2

現在我想導入一個數學模塊,以便我可以在從XML文件讀取數據時使用它的一些功能。

這聽起來很合理。因此,您的第一個任務將是找到XQiB/MXQuery可以處理的名稱空間http://www.w3.org/2005/xpath-functions/math的數學模塊的實現,並將其安裝在您的服務器上,並從模塊導入語句指向它,如XQiB網站上的the module import example所示。

或者,您可以決定您可以使用http://www.zorba-xquery.com/zorba/math-functions中的數學函數,其中MXQuery(以及XQiB)似乎本機支持。 (我在the MXQuery documentation中看到這個,但在the XQiB documentation中看不到,所以我猜XQiB使用的是舊版本的MXQuery的理論上的可能性 - 但更有可能的是開發團隊比文檔模塊更適合他們的時間已在其他地方記錄)。

+0

你的意思是將它安裝在你的服務器上?我必須安裝這些功能?因爲我認爲這是我的情況所缺少的。 – CharleyXIV

+1

'你的服務器'我的意思是通過HTTP爲你的HTML文檔和mxqueryjs/mxqueryjs.nocache.js提供服務的機器。通過「安裝」,我的意思是「在服務器上的適當位置複製相關軟件」。您希望運行的XQuery函數將在客戶端執行,但是,您必須將它們安裝到您的服務器上,以便客戶端可以加載並運行它們 - 就像您必須在您的服務器上安裝mxqueryjs.nocache.js一樣服務器,以便讓XQiB在瀏覽器中運行。 (內置庫 - Zorba數學庫可能是一個 - 在安裝MXQuery時安裝)。 –