5

BaseX DBに2つのドキュメントを追加した場合、たとえばnormal.xml、とnormal2.xml、それぞれを個別に参照する方法はありますか?

関数については知っていdoc()ますが、データベース自体ではなく、ファイルシステムの場所を調べます。

たとえば、次のようにクエリを実行すると、見つからないdoc("normal.xml")/nameというエラーが表示normal.xmlされます。

私も試しました:basex:db("my-db-name")/doc("normal.xml")/nameそして同じエラーを受け取りました。

何か案は?

4

3 に答える 3

9

最終的にBaseX メーリング リストで質問したところ、次のような回答が得られました。

for $doc in collection('test-db')
    where matches(document-uri($doc), 'example.xml')
return $doc

また、一定時間内にデータを抽出したいドキュメントを参照する直接的な方法がない理由についても尋ねたところ、次のような回答がありました。

これは、XQuery データ モデルによるものです。XQuery には、データベース/コレクション内のファイルに関する正式な概念はありません (私が間違っていれば、Christian が訂正してくれるかもしれません)。処理したいノードを選択するのはユーザー次第です。

現在、コレクションをより直感的にナビゲートするためのアイデアを探しています。「collection('db/path-to/document.xml')」に似たもので、現在の W3C 勧告に引き続き準拠する必要があります。後続の document-uri() は通常十分に機能するため、これは優先順位リストで高すぎません。

でも助けてくれてありがとう。

于 2010-08-02T21:48:00.417 に答える
6

次のクエリが役立つ場合があります。

for $doc in collection('your-db-name')
let $path := base-uri($doc)
where ends-with($path, 'normal.xml')
return $doc/name
于 2010-07-30T18:34:36.153 に答える
4

あなたが知っていると仮定すると、doc()関数はあなたが必要とするすべてです。次のコマンドを使用してドキュメントを追加する場合、「mydb」という名前のデータベースを作成して開いたと仮定します。

ADD TO your_name /some/path/on/filesystem.xml

次のドキュメントは、次を使用していつでも開くことができます。

XQUERY doc('mydb/your_name')

ADD TOは、指定したファイル名を無視し、URIで指定した名前を使用します。ただし、注意が必要です。そのコマンドを実行するときに、「your_name」の一意性が保証されるわけではありません。また、一意でない場合、(doc)関数はBaseXエラー(XQuery標準の一部ではない)をスローして、複数のドキュメントに一致することを示します。

于 2012-09-14T20:50:05.353 に答える