2016-06-24 34 views
3

XQueryを使用してテキストと異なる用語を探したいと思います。これは私のコードです:XQueryで関数を使用できませんでした(関数を使用できませんでした)

declare namespace rec="http://xxx.xxx/xxx"; 
declare namespace cts="http://marklogic.com/cts"; 

for $r in /rec:Record 
return 
distinctive-terms($r/rec:text,<options xmlns="cts:distinctive-terms"> <max-terms>3</max-terms></options>) 

私はimport module cts="http://marklogic.com/ctsdeclare namespace cts=" http://marklogic.com/ctsを変更しましたが、私は、私はctsの場所を見つけることができませんでした"... "からそれをインポートする場所を必要とし、次のエラー

1.0-ml] XDMP-UNDFUN: (err:XPST0017) Undefined function distinctive-terms() 

を取得します 誰かが私が何をすべきか知っていますか?

+0

文字列内のすべてのスペースは何ですか? marklogicのドキュメントでは、「http://marklogic.com/cts」でスペースを明示的に指定していません。 –

+0

btw、StackOverflow "cts"タグはAndroid互換性テストスイートに属しているため、類似の名前のMarkLogic名前空間には適していません。さまざまなタグが選択されている間にそのタグについてポップアップするblurbsを読むと便利です。 –

答えて

4

cts:distinctive-termsは組み込み関数なので、モジュールをインポートする必要はありません。 cts名前空間も組み込まれているため、宣言する必要はありません。ただし、関数接頭辞を使用する必要があります。それを宣言してもそれは変わりません。

ので:マリアは言ったものにさらにcts:distinctive-terms($r/rec:text,...)

2

は、ここでの関心のいくつかの情報です:

すべてがXQueryおよびMarkLogicにおけるXMLの名前空間です。マジックのように見えるかもしれませんが(MarkLogic - "rlko"は "Magic"と同じですが、ちょうど偶然です:)

XMLと同じようにデフォルトxQueryもそうです。 marklogicでは、それがすべてのxPathのグッズにマップされるfn Namespaceです。ボンネットの下に

は、それはあなたのモジュールでこれを定めると同じです:まだ

declare default function namespace "http://www.w3.org/2005/xpath-functions"; 

同時に、それはまた、名前空間で宣言されています。

declare namespace fn = "http://www.w3.org/2005/xpath-functions"; 

https://docs.marklogic.com/guide/xquery/namespaces#id_21104

したがって、MarkLogicのxQueryプロセッサで名前空間宣言なしで実行できる唯一の関数は、http://www.w3.org/2005/xpath-functions名前空間のものです。それでも、それはデフォルト設定によるものです。個人的には、私はfnを含むすべての名前空間を使用します。

他のすべてのネームスペースについては、それらを使用する必要があります。しかし、MarkLogicに統合されているため、ネームスペースをインポートする必要がないため、あらかじめ定義されているものは20以上あります。 https://docs.marklogic.com/guide/xquery/namespaces#id_21104

便利なライブラリと機能ライブラリ(さらには自分自身または第三者)を使用する場合、それらをインポートして参照ライブラリ(検索ライブラリの場合など)を参照する必要があります。私はすでに用意優れた答えに追加する情報の

0

もう一つのビット:

あなたは機能が組み込みであるかどうかを特定していない場合は、関数の一番下にある例(複数可)をご確認くださいマニュアルのリファレンスページを参照してください。これらの例は適切な使用法を示しています。

関数の例で名前空間宣言が表示されない場合、それは組み込み関数であり、名前空間を宣言したり、コード内にモジュールをインポートしたりする必要はありません。デビッド・エニス(David Ennis)が言及したように、もちろん、関数呼び出しで接頭辞を使用する必要があります。

関連する問題