7

MarkLogic を使用して、すべてのfn:関数にそのプレフィックスを付ける必要がないようにする方法はありますか? 私はインターネット上で、それが必要ないことを示すコードをたくさん見てきました。

物事はかなり冗長になることがありますね。 fn:not(fn:contains(...))、 それ以外のnot(contains(...))

考え?

ありがとう!

4

1 に答える 1

9

あなたと同じように、私fn:はすべての fn:functions の前に入力したくありません。

fn:通常の XQuery メイン モジュールでは、接頭辞は必要ありません。これがデフォルトの関数名前空間であり、接頭辞のないすべての関数に使用されるためです。ただし、ライブラリ モジュールでは、デフォルトの関数名前空間がライブラリ モジュールの名前空間に変更されるため、必要があります。これは、ライブラリ関数がプレフィックスなしで相互に呼び出すことができることを意味します。fn:

でも元に戻せます!これは、元に戻すためのヘッダー コードです。

xquery version "1.0-ml";
module namespace util = "http://markmail.org/util";
declare default function namespace "http://www.w3.org/2005/xpath-functions";

または、古い 0.9 ml を使用している場合:

xquery version "0.9-ml"
module "http://markmail.org/util"
declare namespace util = "http://markmail.org/util"
default function namespace = "http://www.w3.org/2003/05/xpath-functions"

モジュールを特定の名前空間に配置し、その名前空間に util を割り当ててから、デフォルトを通常の名前空間に戻しますfn:

この切り替えの後、プレフィックスのない関数呼び出しと定義はデフォルトでプレフィックスになりますfn:utilこれは、ライブラリ内のすべての関数が明示的にutil:接頭辞を使用する必要があることを意味します。(個人的には、とにかくきれいだと思います。)

于 2013-10-22T23:35:39.123 に答える