Cara mengimpor ruang nama modul umum di xquery

Saya memiliki beberapa file xquery namespace modul yang digunakan di banyak file. Saya ingin memiliki ruang nama dalam satu file xquery umum dan mengimpor file itu ke mana pun saya ingin menggunakannya.

Katakanlah misalnya,

Saya punya process-lib.xqy, util-lib.xqy dan query-lib.xqy. Saya biasa mengimpor ini dalam banyak file seperti berikut,

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";

Sekarang saya mencoba menggunakannya dalam satu file umum bernama common-import.xqy dan mengimpor file ini dalam banyak file.

ketika saya mencoba pendekatan ini,

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

Itu memunculkan pengecualian sebagai prefix util has no namespace binding.

Bagaimana cara mencapainya?


person Community    schedule 29.10.2015    source sumber
comment
Saya pikir Anda mengatakan bahwa common-import.xqy mengimpor util, proses, dan kueri, lalu di beberapa modul XQuery lainnya Anda hanya mengimpor common-import dan mencoba memanggil fungsi namespace util. Apakah itu benar?   -  person Dave Cassel    schedule 29.10.2015
comment
ya Dave.kamu benar.bisakah kita mencapai ini????   -  person    schedule 30.10.2015
comment
Lihat jawaban dirkk, itulah yang akan saya tulis.   -  person Dave Cassel    schedule 30.10.2015


Jawaban (1)


Ini tidak mungkin, setidaknya tidak dengan cara yang Anda inginkan dan memang seharusnya demikian. Spesifikasi XQuery tidak mengizinkan ini:

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.

Ini adalah keputusan desain yang disengaja. Jika Anda ingin memiliki akses dengan cara ini, Anda dapat menulis fungsi pembungkus untuk setiap fungsi yang ingin Anda akses, mis. di file common-import.xqy Anda, Anda dapat memiliki:

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

Namun tentu saja hal ini memerlukan sejumlah besar fungsi wrapper. Saya akan merekomendasikan Anda untuk tetap memasukkan semua perpustakaan yang diperlukan. Saya melihat tidak ada manfaatnya melakukan hal sebaliknya.

person dirkk    schedule 30.10.2015