2017-02-25 50 views
1

我有一個文件存在於rewrite.xqy的同一級別,即它不存在於特定目錄內。當我宣佈爲它module namespace,我得到以下錯誤 -我們可以爲與rewrite.xqy處於同一目錄級別的文件定義模塊名稱空間嗎?

<error:message>Cannot evaluate library module</error:message> 
<error:format-string>XDMP-EVALLIBMOD: Cannot evaluate library module: 

這背後邏輯,當我刪除module namespace它工作得很好。這是我的文件 -

xquery version "1.0-ml"; 
module namespace adv = "http://***/***/adv"; 
import module namespace search = "http://marklogic.com/appservices/search" 
    at "/Marklogic/appservices/search/search.xqy"; 

'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">', 
xdmp:set-response-content-type("text/html; charset=utf-8"), 
<html xmlns="http://www.w3.org/1999/xhtml"> 

回答

1

錯誤

<error:message>Cannot evaluate library module</error:message> 
<error:format-string>XDMP-EVALLIBMOD: Cannot evaluate library module: 

的起始線意味着你試圖直接評估您的代碼/模塊導入它。 你怎麼得到這個錯誤? 對於xquery模塊,您不能直接調用它,您必須將其導入另一個文件(通常是您正在調用的那個文件)。

XQuery不允許單個文件既是主入口點又是模塊。 當你說它'工作得很好' - 這是一個停止的好地方。

3

當你定義一個模塊名稱空間時,你的模塊應該是一個library module和一組函數。儘管如此,你不會「運行」一個庫模塊。如果您嘗試運行此代碼,例如通過粘貼到QConsole中,您將得到錯誤消息:XDMP-EVALLIBMOD錯誤。

A main module預計將作爲XQuery程序執行。刪除模塊名稱空間module namespace adv = "http://***/***/adv";,它將無誤地執行。

或者您可以將代碼作爲庫模塊插入,並將邏輯作爲函數的主體,將該模塊導入主模塊並調用該函數。

+0

如果你只是想讓這個名稱空間可用於主模塊,可以這樣做:'declare namespace adv =「http:// ***/***/adv」;'。 –

相關問題