วิธีนำเข้าเนมสเปซโมดูลทั่วไปใน xquery

ฉันมีไฟล์ xquery เนมสเปซโมดูลไม่กี่ไฟล์ซึ่งใช้ในหลายไฟล์ ฉันต้องการให้เนมสเปซอยู่ในไฟล์ xquery ทั่วไปไฟล์เดียวและนำเข้าไฟล์นั้นทุกที่ที่ฉันต้องการใช้

ยกตัวอย่างว่า

ฉันมี process-lib.xqy, util-lib.xqy และ query-lib.xqy ฉันเคยนำเข้าสิ่งเหล่านี้ในหลายไฟล์ดังนี้

import module namespace util = "util" at "util-lib.xqy";
import module namespace process = "process" at "process-lib.xqy";
import module namespace query = "query" at "query-lib.xqy";

ตอนนี้ฉันพยายามใช้มันในไฟล์ทั่วไปไฟล์เดียวชื่อ common-import.xqy และนำเข้าไฟล์นี้ในหลายไฟล์

เมื่อฉันลองใช้วิธีนี้

import module namespace common-import= "common-import" at "common-import.xqy";

มันส่งข้อยกเว้นเป็น prefix util has no namespace binding

จะบรรลุเป้าหมายนี้ได้อย่างไร?


person Community    schedule 29.10.2015    source แหล่งที่มา
comment
ฉันคิดว่าคุณกำลังบอกว่า common-import.xqy นำเข้า util, กระบวนการ และแบบสอบถาม จากนั้นในโมดูล XQuery อื่น ๆ ที่คุณกำลังนำเข้าเพียง common-import และพยายามเรียกใช้ฟังก์ชัน util เนมสเปซ ถูกต้องไหม?   -  person Dave Cassel    schedule 29.10.2015
comment
ใช่ Dave คุณพูดถูก เราจะทำสิ่งนี้สำเร็จได้ไหม????   -  person    schedule 30.10.2015
comment
ดูคำตอบของ dirkk นั่นคือสิ่งที่ฉันจะเขียน   -  person Dave Cassel    schedule 30.10.2015


คำตอบ (1)


สิ่งนี้เป็นไปไม่ได้ อย่างน้อยก็ไม่ใช่ในแบบที่คุณต้องการและถูกต้อง ข้อกำหนด XQuery ไม่อนุญาตสิ่งนี้:

Module imports are not transitive—that is, importing a module provides access only to function and variable declarations contained directly in the imported module. For example, if module A imports module B, and module B imports module C, module A does not have access to the functions and variables declared in module C.

นี่เป็นการตัดสินใจออกแบบโดยเจตนา หากคุณต้องการเข้าถึงด้วยวิธีนี้ คุณสามารถเขียนฟังก์ชัน wrapper สำหรับแต่ละฟังก์ชันที่คุณต้องการเข้าถึงได้ เช่น ในไฟล์ common-import.xqy ของคุณคุณอาจมี:

declare function common-import:test() { 
  util:test() 
};

แต่แน่นอนว่าสิ่งนี้อาจต้องใช้ฟังก์ชัน wrapper จำนวนมหาศาล ฉันอยากจะแนะนำให้คุณเพียงแค่ใส่ไลบรารี่ที่จำเป็นทั้งหมด ไม่เห็นประโยชน์ในการทำอย่างอื่นเลย

person dirkk    schedule 30.10.2015