21 Oracle XML DBリポジトリ・データへのアクセス
Oracle XML DBリポジトリ・データにアクセスして操作するには、FTPやHTTP(S)/WebDAVなどの標準プロトコルを使用する、Oracle XML DB Resource Application Program Interface (API)を使用する、リポジトリ・ビューRESOURCE_VIEW
とPATH_VIEW
を使用するなどのいくつかの方法があります。
- Oracle XML DBリポジトリの概要
Oracle XML DBリポジトリを使用すると、従来のリレーショナル・データベース構造ではなく、階層構造のデータベースにコンテンツを格納できます。このリポジトリでは、あらゆる種類のコンテンツを管理できますが、XMLコンテンツを持つリソースの管理に関連する特別な機能と最適化機能が用意されています。 - リポジトリの用語と提供されているリソース
Oracle XML DBリポジトリは、ファイルではなく、データベース・オブジェクトのファイル・システムと考えることができます。これは、すべてのXML Schemaおよびデータベース・スキーマをまたぐ、階層化された一連のデータベース・オブジェクトです。これらのデータベース・オブジェクトはパス名にマップされます。 - Oracle XML DBリポジトリ・リソース
Oracle XML DBリポジトリ・リソースは、Oracle XML DB XMLスキーマXDBResource.xsd
に準拠します。リソースの要素には、作成日、変更日、WebDAVロック、所有者、ACL、言語、キャラクタ・セットなどのWebDAV定義のプロパティを永続的に格納するために必要な要素が含まれます。 - リポジトリ・リソースへのナビゲーショナル・アクセスまたはパス・アクセス
Oracle XML DBリポジトリ・フォルダでは、多くのオペレーティング・システムで使用されるのと同じプロトコル標準をサポートしています。これによって、リポジトリ・フォルダは、サポートされているオペレーティング・システム環境で、ネイティブ・フォルダ(ディレクトリ)と同様に機能します。 - リポジトリ・リソースへの問合せベースのアクセス
PL/SQLパッケージDBMS_XDB_REPOS
は、Oracle XML DBリポジトリ・リソースを操作するサブプログラムを提供します。このAPIは、パブリック・ビューRESOURCE_VIEW
とPATH_VIEW
に基づいており、FTPやHTTP(S)/WebDAVなどのプロトコルを介してSQLによるリポジトリ・データへのアクセスを可能にします。 - リポジトリ・リソースへのサーブレット・アクセス
Oracle XML DBでは、JavaサーブレットAPIバージョン2.2を実装します。 - リポジトリ・リソースに対する操作
Oracle XML DBリポジトリ・リソースに格納されているデータを操作するには、Java、PL/SQL、インターネット・プロトコルおよびOracle XML DB Content Connector (非推奨)を使用します。最も一般的な操作およびこれらの使用に必要なデータベース権限について説明します。 - SQLを使用したリポジトリ・リソースのコンテンツへのアクセス
SQLでは、Oracle XML DBリポジトリの文書のコンテンツにアクセスするには、PL/SQLコンストラクタXDBURIType
を使用するか、RESOURCE_VIEW
および対応するリソース・ドキュメントを使用します。 - XML Schemaに基づく文書のコンテンツへのアクセス
XML Schemaに基づく文書のコンテンツにアクセスするには、スキーマに基づかない文書の場合と同様、対応するリソース・ドキュメントを使用します。または、XML SchemaをOracle XML DBに登録したときに定義したデフォルト表の行としてアクセスします。 - リポジトリの文書のコンテンツの更新
インターネット・プロトコルまたはSQLを使用してOracle XML DBリポジトリに格納された文書のコンテンツを更新できます。 - RESOURCE_VIEWおよびPATH_VIEW内のリソースの問合せ
ここでの例は、RESOURCE_VIEW
およびPATH_VIEW
と、Oracle SQL関数equals_path
およびunder_path
を使用したリポジトリのフォルダ限定の問合せを示しています。 - Oracle XML DBの階層リポジトリ索引
Oracle XML DBでは、Oracle XML DBリポジトリの階層索引を使用して、リポジトリのパスに基づく問合せと、フォルダ限定の問合せのパフォーマンスを最適化します。これは、Oracleドメイン索引として実装されます。
親トピック: Oracle XML DBリポジトリ
21.1 Oracle XML DBリポジトリの概要
Oracle XML DBリポジトリを使用すると、従来のリレーショナル・データベース構造ではなく、階層構造のデータベースにコンテンツを格納できます。このリポジトリでは、あらゆる種類のコンテンツを管理できますが、XMLコンテンツを持つリソースの管理に関連する特別な機能と最適化機能が用意されています。
従来、リレーショナル・データベースは、階層構造の管理や、パスまたはURLの検索には適していません。Oracle XML DBリポジトリを使用すると、データベース内のXMLコンテンツを階層構造に整理できます。ファイルやフォルダを使用して整理した場合と同様の問合せおよび管理が可能になります。
リレーショナル表/行/列隠喩は、高度に構造化されたデータの管理に効果的なモデルです。ドキュメント指向のXMLデータなど、半構造化されたデータまたは構造化されていないデータの管理には、あまり効果的ではない可能性があります。
たとえば、1冊の本を表の一連の行として表すのは容易ではありません。本は冊-章-節-段落のような階層として表すのが一般的で、その階層は一連のフォルダおよびサブフォルダとして表すことができます。
階層リポジトリ索引によって、フォルダとパスの検索が高速化されます。Oracle XML DBには、特許を取得した階層索引が含まれており、この階層索引によってOracle XML DBリポジトリ内のフォルダとパスの検索が高速化されます。階層リポジトリ索引はエンド・ユーザーに対して透過的で、Oracle XML DBでは、従来のファイル・システムと同等以上の速度でフォルダとパスの検索を実行できます。
図21-1に、典型的なツリーとして表示されるOracle XML DBリポジトリのフォルダおよびファイルの階層構造の例を示します。ツリーの上部は、ルート・フォルダ(/
)です。
注意:
フォルダ/sys
は、Oracle XML DBによって、システム定義のXML Schemaやアクセス制御リスト(ACL)などをメンテナンスするために使用されます。フォルダ/sysのデータを変更したり追加したりしない
でください。
Oracle XML DBリポジトリ内の内容には、SQL、PL/SQL、Java、Cの各言語に加えて、FTP、HTTP(S)、WebDAVなど標準の接続アクセス・プロトコルを使用してアプリケーションからアクセスできます。Oracle XML DBでは、文書中心の操作のために設計されたこれらのプロトコルに対するネイティブ・サポートがOracle Databaseに追加されます。これらのプロトコルをサポートすることにより、Oracle XML DBでは、Microsoft Windows Explorer、Microsoft Office、およびAltovaやAdobeなどのベンダーからの製品が、リポジトリに格納されたXMLコンテンツを直接操作できます。
リポジトリを使用すると、ファイル・システムに格納されているかのように、Oracle Databaseに格納されているXMLコンテンツに直接アクセスできます。リポジトリのファイルおよびフォルダに対するアクセス制御権限を設定できます。
こうした機能を使用できるのは、HTTPプロトコルに対する一連の拡張機能を定義しているIETF標準であるWebDAV上でリポジトリがモデル化されているためです。WebDAVによりHTTPサーバーはDAV対応クライアントに対するファイル・サーバーとして機能できます。たとえば、WebDAV対応エディタは、HTTP/WebDAVサーバーがファイル・システムであるかのように対話できます。
DAV標準では、ファイルやフォルダを示すためにリソースという用語が使用されます。WebDAVサーバーにより管理される各リソースは、URLで識別されます。リソースには、コンテンツの他に関連のメタデータがあります。
次のトピックでは、標準プロトコルを使用して、Oracle XML DBリポジトリ・フォルダのデータにアクセスする方法について説明します。Java、SQLおよびPL/SQLを使用してリポジトリ・オブジェクト階層にアクセスするために使用できるAPIについて説明します。
- Oracle XML DBで提供される名前レベル・ロック
Oracle XML DBリポジトリの主要なメリットの1つは、論理トランザクションでのリポジトリ操作でSQLを使用できることです。アプリケーションによって、複数のフォルダの更新を含む、実行時間の長いトランザクションが作成される場合があります。このリポジトリでは、高いレベルの同時実行性を実現するために、フォルダ・レベル・ロックではなく名前レベル・ロックを使用します - Oracle XML DBリポジトリ・リソースにアクセスする2つの方法
Oracle XML DBリポジトリ・リソースにアクセスして操作するには、特別なビューでSQLを使用するか、階層索引を使用してパスにナビゲートします。 - データベース・スキーマ(ユーザー・アカウント) XDBおよびOracle XML DBリポジトリ
XDB
はXMLType
表XDB$RESOURCE
を所有し、これには、Oracle XML DBリポジトリ内のすべてのリソース(ファイルおよびフォルダ)が含まれます。また、リポジトリを管理するためのすべてのメタデータも含まれます。
関連トピック
親トピック: Oracle XML DBリポジトリ・データへのアクセス
21.1.1 Oracle XML DBで提供される名前レベル・ロック
Oracle XML DBリポジトリの主要なメリットの1つは、論理トランザクションでのリポジトリ操作でSQLを使用できることです。アプリケーションによって、複数のフォルダの更新を含む、実行時間の長いトランザクションが作成される場合があります。このリポジトリでは、高いレベルの同時実行性を実現するために、フォルダ・レベル・ロックではなく名前レベル・ロックを使用します
リレーショナル・データベースを使用して階層フォルダ構造を保持する場合、フォルダに対して項目を追加または削除するときに高度な同時実行性を保証することは重要な問題です。従来のファイル・システムでは、トランザクションの概念はありません。各操作(ファイルの追加、サブフォルダの作成、ファイル名の変更、ファイルの削除など)は、基本トランザクションとして処理されます。操作が完了すると、ファイル・システムのすべてのユーザーに対して変更がすぐに反映されます。
この場合、更新されたフォルダまたはディレクトリ・ツリーに排他ロックを設定する従来のロック方針では、同時実行性に関する重大な問題がすぐに発生します。Oracle XML DBでは、フォルダ・レベル・ロックではなく名前レベル・ロックを提供して、これを解決します。サブフォルダまたはファイルの作成、名前の変更、移動、削除などのリポジトリ操作では、ターゲット・フォルダに対する排他書込みロックの付与は必要はありません。リポジトリは、フォルダ自体ではなくフォルダ内の名前をロックして、フォルダに対する同時操作を管理します。名前および変更タイプは、キューに入れられます。
トランザクションがコミットされた場合にのみ、フォルダがロックされてそのコンテンツが変更されます。したがって、Oracle XML DBでは、1つのフォルダのコンテンツに対して複数のアプリケーションが同時に更新を実行できます。また、キューを使用すると、2つのアプリケーションによる同じ名前のオブジェクトの作成を回避できるため、フォルダの同時実行性を管理できます。
同じトランザクションで1つのフォルダに対して複数の変更が行われる場合は、コミット時までフォルダの変更をキューに入れて、I/Oを最小限にすることもできます。これは、短時間の間に複数のアプリケーションが同じディレクトリ内にファイルを生成する場合に役立ちます。たとえば、トレース・ファイルやログ・ファイルを生成する場合、印刷または電子メール配信用にスプール・ディレクトリを保持する場合などです。
注意:
データベースによって適用されるトランザクション・セマンティクスの結果として、SQL文を使用して作成されたフォルダは、トランザクションがコミットされるまで他のデータベース・ユーザーから参照されません。Oracle XML DBリポジトリへの同時アクセスは、Oracle Databaseの同時実行性の制御に使用されるのと同じメカニズムを使用して制御されます。リポジトリのOracle Databaseとの統合により、XMLコンテンツに対する強力な管理オプションが提供されます。
親トピック: Oracle XML DBリポジトリの概要
21.1.2 Oracle XML DBリポジトリ・リソースにアクセスする2つの方法
Oracle XML DBリポジトリ・リソースにアクセスして操作するには、特別なビューでSQLを使用するか、階層索引を使用してパスにナビゲートします。
-
SQLアクセス。リソースのプロパティおよびパス名を公開し、階層アクセス演算子をOracle XML DB Schemaへマップする特別のビューを使用することにより行います。リポジトリ・リソースへの問合せベースのアクセスを参照してください。
-
ナビゲーションベースまたはパスベースのアクセス。リソースの階層索引が使用されます。各リソースは、階層内の場所を反映する、1つ以上の一意のパス名を持ちます。XPath式を使用して、任意のリポジトリ・リソースへナビゲートできます。
リポジトリ・リソースは、データベース内の既存の
XMLType
オブジェクトへの参照として作成できます。このようなデータベース・オブジェクトには、XPathを使用してナビゲートできます。リポジトリ・リソースへのナビゲーショナル・アクセスまたはパス・アクセスを参照してください。
関連項目:
-
アクセス方法の選択の詳細は、Oracle XML DBリポジトリへのアクセスを参照してください。
-
アクセス方法の比較の概要は、表21-3を参照してください。
Uniform Resource Locator(URL)を使用して、Oracle XML DBリソースにアクセスできます。URLには、オブジェクトのホスト名、プロトコル情報、パス名およびリソース名が含まれます。
親トピック: Oracle XML DBリポジトリの概要
21.1.3 データベース・スキーマ(ユーザー・アカウント) XDBおよびOracle XML DBリポジトリ
データベース・スキーマ(ユーザー・アカウント) XDB
はXMLType
表XDB$RESOURCE
を所有し、これには、Oracle XML DBリポジトリ内のすべてのリソース(ファイルおよびフォルダ)が含まれます。また、リポジトリを管理するためのすべてのメタデータも含まれます。
データベース・スキーマXDB
は、Oracle XML DBのインストール中に作成されます。このスキーマのプライマリ表はXDB$RESOURCE
というXMLType
表で、これには、Oracle XML DBリポジトリ内のリソース(ファイルまたはフォルダ)ごとに1行が含まれます。この表内の文書はリソース・ドキュメントと呼ばれます。Oracle XML DBのリソース・ドキュメントの構造を定義するXML Schemaは、URL http://xmlns.oracle.com/xdb/XDBResource.xsd
に登録されています。
データベース・スキーマ(ユーザー)XDB
が所有する表は内部です。次が推奨されます。
-
ユーザーXDB (およびOracle XML DBリポジトリ)のみが使用する
専用の表領域
を作成します。表領域が読取り専用でないことを確認してください。 -
ユーザーXDBが所有する表またはデータを直接操作
することはできません
。たとえば、それらを圧縮または圧縮解除しないでください。XDB
が所有する表またはデータを操作するには、Oracle XML DBが提供しているPL/SQLサブプログラムおよびデータベース・ビューのみを使用します。 -
どのような場合でも、ユーザーXDBは
絶対にロック解除しないでください
。
関連項目:
-
ユーザー
XDB
およびリポジトリ専用の表領域の作成の詳細は、パッケージDBMS_XDB_ADMINを参照してください。
親トピック: Oracle XML DBリポジトリの概要
21.2 リポジトリの用語と提供されているリソース
Oracle XML DBリポジトリは、ファイルではなくデータベース・オブジェクトのファイル・システムとして考えることができます。これは、すべてのXML Schemaおよびデータベース・スキーマをまたぐ、階層化された一連のデータベース・オブジェクトです。これらのデータベース・オブジェクトはパス名にマップされます。
このリポジトリは、単一のルート・ノード(/
)を持つ、連結された有向非循環脚注1グラフです。図式内の各リソースは、関連付けられた1つ以上のパス名を持ちます。リポジトリは、指定されたリソースへの複数のリンクをサポートします。
- リポジトリの用語
Oracle XML DBリポジトリで使用される用語には、リソース、リソース名、リソース・コンテンツ、フォルダまたはディレクトリ、パス名、パス要素、リンク名、アクセス制御リスト(ACL)およびXDBBinary要素があります。これらの用語の一部には、他のコンテキストでの共通の同義語が存在します。 - 事前定義されたリポジトリのファイルおよびフォルダ
Oracle XML DBリポジトリでは、特定のファイルおよびフォルダが事前定義されています。独自に使用するために追加のものを作成できます。
親トピック: Oracle XML DBリポジトリ・データへのアクセス
21.2.1 リポジトリの用語
Oracle XML DBリポジトリで使用される用語には、リソース、リソース名、リソース・コンテンツ、フォルダまたはディレクトリ、パス名、パス要素、リンク名、アクセス制御リスト(ACL)およびXDBBinary要素があります。これらの用語の一部には、他のコンテキストでの共通の同義語が存在します。
-
リソース: リポジトリ階層内のオブジェクトまたはノード。リソースは、オブジェクトのパス名とリソース名を含むUniform Resource Locator (URL)によって識別されます。
-
フォルダ: 他のリソースを含むことができるリソース。ディレクトリと呼ばれることもあります。
-
パス名: リソースへの絶対パスを表す階層形式の名前。リポジトリのルートを表すスラッシュ(
/
)と、それに続くスラッシュで区切られたゼロ個以上のパス要素で構成されています。「.
」または「..
」のみをパス要素とできませんが、それ以外の形であれば、ピリオド(.
)をパス要素で使用できます。パス要素は、データベース・キャラクタ・セットの任意の文字で構成されますが、スラッシュ(/)およびバックスラッシュ(\
)の他、構成パラメータ/xdbconfig/sysconfig/invalid-pathname-chars
を使用したOracle XML DBの構成ファイル/xdbconfig.xml
に指定された文字は除きます
。 -
リソース名(またはリンク名) - その親フォルダ内のリソースの名前。この名前が、パス名の中で最も右端のパス要素となります。リソース名は、それらを直接含むフォルダ内で一意である必要があり、大/小文字は区別されます。
-
リソース・コンテンツ: リソースの本体、つまりデータ。これは、リソースをファイルとして処理してそのコンテンツを要求したときに取得されるものです。型は常に
XMLType
です。 -
アクセス制御リスト (ACL) - プリンシパル(ユーザーまたはロール)に対するアクセス権限を1つ以上のリポジトリ・リソースに指定する、順序付けられたルールのリスト。
関連項目:
-
XDBBinary要素: バイナリデータを含むXML要素。Oracle XML DB XML Schemaで定義されています。
XDBBinary
要素は、非構造化バイナリ・データがOracle XML DBにアップロードされたときに、リポジトリに格納されます。
表21-1に示すとおり、Oracle XML DBで使用される多くの用語には、他のコンテキストでの共通の同義語が存在します。
表21-1 Oracle XML DBリポジトリの用語の同義語
同義語 | リポジトリの用語 | 用途 |
---|---|---|
コレクション |
フォルダ |
WebDAV |
ディレクトリ |
フォルダ |
オペレーティング・システム |
権限 |
権限 |
パーミッション |
権利 |
権限 |
様々 |
WebDAVフォルダ |
フォルダ |
Webフォルダ |
ロール |
グループ |
アクセス制御 |
リビジョン |
バージョン |
RCS、CVS |
ファイル・システム |
リポジトリ |
オペレーティング・システム |
階層 |
リポジトリ |
様々 |
ファイル |
リソース |
オペレーティング・システム |
バインディング |
リンク |
WebDAV |
親トピック: リポジトリの用語と提供されているリソース
21.2.2 事前定義されたリポジトリのファイルおよびフォルダ
Oracle XML DBリポジトリでは、特定のファイルおよびフォルダが事前定義されています。独自に使用するために追加のものを作成できます。
事前定義されたOracle XML DBリポジトリのファイルおよびフォルダを次に示します。
/dbfsFoot 2 /public /sys /sys/acls /sys/acls/all_all_acl.xml /sys/acls/all_owner_acl.xml /sys/acls/bootstrap_acl.xml /sys/acls/ro_all_acl.xml /sys/apps /sys/asm /sys/log /sys/schemas /sys/schemas/PUBLIC /sys/schemas/PUBLIC/www.w3.org /sys/schemas/PUBLIC/www.w3.org/2001 /sys/schemas/PUBLIC/www.w3.org/2001/xml.xsd /sys/schemas/PUBLIC/xmlns.oracle.com /sys/schemas/PUBLIC/xmlns.oracle.com/xdb /sys/schemas/PUBLIC/xmlns.oracle.com/xdb/XDBResource.xsd /sys/schemas/PUBLIC/xmlns.oracle.com/xdb/XDBSchema.xsd /sys/schemas/PUBLIC/xmlns.oracle.com/xdb/XDBStandard.xsd /sys/schemas/PUBLIC/xmlns.oracle.com/xdb/acl.xsd /sys/schemas/PUBLIC/xmlns.oracle.com/xdb/dav.xsd /sys/schemas/PUBLIC/xmlns.oracle.com/xdb/log /sys/schemas/PUBLIC/xmlns.oracle.com/xdb/stats.xsd /sys/schemas/PUBLIC/xmlns.oracle.com/xdb/xdbconfig.xsd /xdbconfig.xml
親トピック: リポジトリの用語と提供されているリソース
21.3 Oracle XML DBリポジトリ・リソース
Oracle XML DBリポジトリ・リソースは、XMLスキーマXDBResource.xsd
に準拠します。リソースの要素には、作成日、変更日、WebDAVロック、所有者、ACL、言語、キャラクタ・セットなどのWebDAV定義のプロパティを永続的に格納するために必要な要素が含まれます。
リソース索引には、リソースのコンテンツを含む、Contents
という特別な要素が含まれます。
リソースのXML Schemaでは、maxOccurs
属性が無制限のany
要素も定義します。any
要素は、Oracle XML DBのXML名前空間外のすべての要素を含むことができます。任意のインスタンス定義のプロパティをリソースと関連付けることができます。
- リポジトリ・データが格納される場所
Oracle XML DBは、Oracle XML DBリポジトリのデータを、アクセス可能な一連の表および索引に格納します。 - Oracle XML DBリポジトリへの文書の格納方法
登録されたXML Schemaに基づくXML文書がリポジトリにロードされると、文書が解析され、スキーマに従って一連のSQLオブジェクトに分解されます。ソースXML文書にリポジトリ・アクセスを提供するために、対応するリソース・ドキュメントが作成されます。 - リポジトリ・データ・アクセス制御
アクセス制御エントリ(ACE)で構成されるアクセス制御リスト(ACL)を使用すると、Oracle XML DBリポジトリ内のリソースへのアクセスを制御できます。ACEは、特定のプリンシパルに対する一連の権限を付与または拒否します。 - リポジトリのパス名の解決
フォルダをそのフォルダの内容に関連付けるデータは、Oracle XML DBの階層リポジトリ索引によって管理されます。これによって、オペレーティング・システムのファイル・システムで使用されるディレクトリ・メカニズムと同様に、パス名を評価するための高速なメカニズムが提供されます。パス名を解決するには、特定の権限が必要です。 - リンク・タイプ
Oracle XML DBにおけるリンクは、リポジトリ・リンクまたはドキュメント・リンクのいずれかです。リポジトリ・リンクには、ハード・リンクおよび弱いリンクがあります。ドキュメント・リンクについても、それらのターゲットがリポジトリ・リソースの場合は、ハード・リンクおよび弱いリンクがあります。
親トピック: Oracle XML DBリポジトリ・データへのアクセス
21.3.1 リポジトリ・データが格納される場所
Oracle XML DBは、Oracle XML DBリポジトリのデータを、アクセス可能な一連の表および索引に格納します。
XML Schemaを登録し、Oracle XML DBによって表が生成されるように要求した場合、表はユーザーのデータベース・スキーマに作成されます。このため、それらを参照または変更することができます。他のユーザーは、表を参照する権限を付与されないかぎり、その表を参照できません。
- 生成された表の名前
生成された表の名前は、Oracle XML DBによって割り当てられます。これらは、ユーザーのXML Schema文書(またはデフォルトのXML Schema文書)のxdb:defaultTable
属性を検索することによって取得できます。 - リポジトリ・リソース用のオブジェクト・リレーショナル記憶域の定義方法
リポジトリ・リソース用のオブジェクト・リレーショナル記憶域を定義するには、登録済のXML Schemaに準拠するデータをサブクラス化するか、格納します。 - Oracle ASM仮想フォルダ
Oracle Automatic Storage Management (Oracle ASM)の仮想フォルダ/sys/asm
のコンテンツは、Oracle ASMにより自動管理されるOracle ASMファイルおよびフォルダです。
親トピック: Oracle XML DBリポジトリ・リソース
21.3.1.1 生成された表の名前
生成された表の名前は、Oracle XML DBによって割り当てられます。これらは、ユーザーのXML Schema文書(またはデフォルトのXML Schema文書)のxdb:defaultTable
属性を検索することによって取得できます。
XML Schemaを登録する場合、Oracle XML DBによって作成されたデフォルト名でなく、ユーザー独自の表名を指定することもできます。表でXML記憶域が指定されている場合、文書はXML形式にエンコードされてから表内に格納されます。
関連トピック
親トピック: リポジトリ・データが格納される場所
21.3.1.2 リポジトリ・リソース用のオブジェクト・リレーショナル記憶域の定義方法
リポジトリ・リソース用のオブジェクト・リレーショナル記憶域を定義するには、登録済のXML Schemaに準拠するデータをサブクラス化するか、格納します。
リポジトリ・リソース用のオブジェクト・リレーショナル記憶域を定義する必要があるアプリケーションでは、次のいずれかの方法で行います。
-
Oracle XML DBリソース・タイプをサブクラス化します。Oracle XML DBリソースのサブクラス化には、
XDB$RESOURCE
表に対する権限が必要です。 -
参照可能な登録済XML Schemaに準拠するデータを格納します。
関連トピック
親トピック: リポジトリ・データが格納される場所
21.3.2 Oracle XML DBリポジトリへの文書の格納方法
登録されたXML Schemaに基づくXML文書がリポジトリにロードされると、文書が解析され、スキーマに従って一連のSQLオブジェクトに分解されます。ソースXML文書にリポジトリ・アクセスを提供するために、対応するリソース・ドキュメントが作成されます。
Oracle XML DBでは、XML文書を特別な方法で処理します。XML Schemaに基づくXML文書のコンテンツを格納するルールは、そのXML Schemaで定義されます。文書のコンテンツは、グローバル要素定義に関連付けられたデフォルト表に格納されます。
Oracle XML DBリポジトリには、JPEGイメージやWord文書など、XMLデータを含まないファイルも格納されます。各リソースのXML Schemaでは、使用可能な要素を定義し、ファイルのコンテンツをBLOB
インスタンスとして格納するか、またはCLOB
インスタンスとして格納するかを指定します。XML Schemaに基づかないXML文書のコンテンツは、CLOB
インスタンスとしてリポジトリに格納されます。
リポジトリ内のファイルまたはフォルダごとに、1つのリソースおよび1つのリンク・プロパティ文書が存在します。指定したドキュメントへのアクセス・パスが複数存在する場合は、リンクごとにリンク・プロパティ文書が存在します。リソース・ドキュメントおよびリンク・プロパティ文書は、両方ともXML文書として格納されます。これらの文書はすべてリポジトリ内の表に格納されます。
XMLファイルをリポジトリにロードすると、次の順序でイベントが発生します。
-
Oracle XML DBは、XML文書のルート要素を調べ、既知(登録済)のXML Schemaに関連付けられているかどうかを確認します。このとき、文書に
XMLSchema-instance
名前空間の名前空間宣言が含まれているかどうかが確認され、文書に関連付けられたXML Schemaを識別するschemaLocation
属性またはnoNamespaceSchemaLocation
属性が検索されます。 -
文書が既知のXML Schemaに基づいている場合は、XML SchemaのメタデータがXML Schemaのキャッシュからロードされます。
-
XML文書は解析され、XML Schemaから導出された一連のSQLオブジェクトに分解されます。
-
XMLファイルから作成されたSQLオブジェクトは、XML Schemaがデータベースに登録されたときに定義されたデフォルト表に格納されます。
-
リソース・ドキュメントは、処理された文書ごとに作成されます。これによって、リポジトリを使用して、文書のコンテンツにアクセスできます。XML Schemaに基づく
XMLType
インスタンスのリソース・ドキュメントには、XMLRef
要素が含まれています。この要素には、リソースに関連付けられたコンテンツが含まれるデフォルト表内の行を検索するときに使用できるXMLType
のREF
が含まれます。
親トピック: Oracle XML DBリポジトリ・リソース
21.3.3 リポジトリ・データ・アクセス制御
アクセス制御エントリ(ACE)で構成されるアクセス制御リスト(ACL)を使用すると、Oracle XML DBリポジトリ内のリソースへのアクセスを制御できます。ACEは、特定のプリンシパルに対する一連の権限を付与または拒否します。
プリンシパルとは、データベース・ユーザー、データベース・ロール、LDAPユーザー、LDAPグループ、またはリソースの所有者である特別なプリンシパルDAV::owner
です。リポジトリ内の各リソースは、ACLによって保護されます。ACLによって、ユーザーがリソースに対して持つ権限(read-properties
やupdate
など)が決まります。各リポジトリ操作には、現行ユーザーがその操作の実行を許可されているかどうかを判断するために、ACLの確認が含まれています。
デフォルトでは、新規のリソースはその親フォルダのACLを継承します。ただし、PL/SQLプロシージャDBMS_XDB_REPOS.setACL
を使用してリソースのACLを設定することもできます。Oracle XML DBのリソースのセキュリティの詳細は、リポジトリのアクセス制御を参照してください。
次の例で、現行ユーザーはQUINE
です。問合せでは、フォルダ/public
のリソースの数が戻されます。このフォルダには、f1
とf2
の2つのリソースのみが存在すると想定します。また、f1
のACLではread-properties
権限がQUINE
に付与されますが、f2
のACLではQUINE
に付与される権限はないと想定します。ユーザーがリソースを参照するには、そのリソースに対するread-properties
権限が必要です。QUINE
はf1
のみ参照できるため、問合せの結果は1
です。
SELECT count(*) FROM RESOURCE_VIEW r WHERE under_path(r.res, '/public') = 1; COUNT(*) -------- 1
親トピック: Oracle XML DBリポジトリ・リソース
21.3.4 リポジトリのパス名の解決
フォルダをそのフォルダの内容に関連付けるデータは、Oracle XML DBの階層リポジトリ索引によって管理されます。これによって、オペレーティング・システムのファイル・システムで使用されるディレクトリ・メカニズムと同様に、パス名を評価するための高速なメカニズムが提供されます。パス名を解決するには、特定の権限が必要です。
フォルダであるリソースでは、要素Resourceの
Container
属性がtrue
に設定されます。
フォルダ内のリソース名を解決するには、現行のユーザーに次の権限が必要です。
-
フォルダに対する
resolve
権限 -
フォルダのリソースに対する
read-properties
権限
ユーザーがこれらの権限を所有していない場合、access denied
エラーが発生します。そのリソースに対するread-properties
権限が拒否されている場合、フォルダのリストおよびその他の問合せによって行は戻されません。
注意:
パス名の解決におけるエラー処理では、ファイル・システムとの互換性に対して、無効なリソース名とフォルダでないリソースが区別されます。Oracle XML DBリソースは、SQLを使用してOracle XML DBリポジトリの外部からアクセスできるため、リソースを含むフォルダの読取りアクセスを制限しても、そのリソースへの読取りアクセスは制限されません。
関連項目:
XDBResource.xsd: Oracle XML DBリソースのためのXML Schema (要素Resource
およびその属性Container
の定義用)
親トピック: Oracle XML DBリポジトリ・リソース
21.3.5 リンク・タイプ
Oracle XML DBにおけるリンクは、リポジトリ・リンクまたはドキュメント・リンクのいずれかです。リポジトリ・リンクには、ハード・リンクおよび弱いリンクがあります。ドキュメント・リンクについても、それらのターゲットがリポジトリ・リソースの場合は、ハード・リンクおよび弱いリンクがあります。
- リポジトリ・リンクとドキュメント・リンク
リソースの他に、フォルダ・リソースは他のリソース(ファイルまたはフォルダ)へのリンクも含むことができます。これらのリポジトリ・リンクは、リポジトリの階層関係を表しています。一方、ドキュメント・リンクはXML文書間の任意のリンクで、必ずしもリポジトリ・リソースではありません。 - ハード・リンクおよび弱いリンク
リポジトリ・リソースをターゲットとするリンクには、ハード・リンクと弱いリンクがあります。ハード・リンクと弱いリンクでは、ターゲットとしているリソースに関する依存関係が異なります。ハード・リンクは、祖先のフォルダをターゲットにできませんが、弱いリンクはできます。リポジトリ・リンク・タイプを判断するためにリポジトリ・パス・ビューPATH_VIEW
に問い合せることができます。 - フォルダ階層の情報がない状況での弱いリンクの作成
弱いリンクは、ハード・リンクによって決定されるリポジトリ構造の上のマッピングを表しています。リソースへの弱いリンクは、そのパスではなくOIDを使用して作成できます。弱いリンクを使用すると、リソースを含むフォルダにアクセスせずにリソースにアクセスできます。 - 複数のハード・リンクを回避する方法およびタイミング
ハード・リンクの作成を制限し、フォルダまたはファイル(またはその両方)への複数のハード・リンクを許可しないようにできます。ファイル・リソースへの複数のハード・リンクを許可し、フォルダ・リソースへの複数のハード・リンクを許可しないことで、UNIXやLinuxなどのファイル・システムに近い動作を実現できます。
親トピック: Oracle XML DBリポジトリ・リソース
21.3.5.1 リポジトリ・リンクとドキュメント・リンク
リソースの他に、フォルダ・リソースは他のリソース(ファイルまたはフォルダ)へのリンクも含むことができます。これらのリポジトリ・リンクは、リポジトリの階層関係を表しています。一方、ドキュメント・リンクはXML文書間の任意のリンクで、必ずしもリポジトリ・リソースではありません。
リポジトリ・リンクは、フォルダ・リンクと呼ばれることもあります。これは、ドキュメント・リンクとは異なり、XLink標準およびXInclude標準で提供されるリンクに相当し、Oracle XML DBでもサポートされます(ただし、XLinkサポートは非推奨です)。リポジトリ・リンクは、フォルダと子の間をナビゲートするためのリポジトリ・リソース間のリンクです。ドキュメント・リンクは、リポジトリ・リソースとは限らないドキュメント間の任意のリンクです。
リポジトリ・リンクは、リポジトリの階層関係を表しています。一方ドキュメント・リンクは、それらを使用するアプリケーションによりセマンティクスが派生する任意の関係を表しています。リポジトリ・リンクは、リポジトリの階層関係を表しているため、ファイル・システムに関連するプロトコルを使用してナビゲートできます。ドキュメント・リンクではこのようなことはできません。ドキュメント・リンクは、任意の関係を表すことができるため、リポジトリの関係も表すことが可能です。このようにリソースをターゲットとしているドキュメント・リンクはさらに、ハード・リンクおよび弱いリンクに分けることができます。
関連項目:
ドキュメント・リンクの詳細は、Oracle XML DBでのXLinkおよびXIncludeの使用を参照してください。
親トピック: リンク・タイプ
21.3.5.2 ハード・リンクおよび弱いリンク
リポジトリ・リソースをターゲットとするリンクには、ハード・リンクと弱いリンクがあります。ハード・リンクと弱いリンクでは、ターゲットとしているリソースに関する依存関係が異なります。ハード・リンクは、祖先のフォルダをターゲットにできませんが、弱いリンクはできます。リポジトリ・リンク・タイプを判断するためにリポジトリ・パス・ビューPATH_VIEW
に問い合せることができます。
ハード・リンクおよび弱いリンクはともに、物理データへの参照(またはポインタ)であり、(内部的な)リポジトリ・リソースの識別子です。他のリンクのシンボリック名やパスを指すものではありません。これらのターゲットは、リンクが作成される時点で解決されます。ハード・リンクおよび弱いリンクは、リソースの識別子を直接指すので、ターゲットは必ず必要です。そのかわり、ターゲットの移動や名前の変更が行われても、有効性は保持されます。ハード・リンクおよび弱いリンクの作成や削除には、同じ権限が必要です。
ハード・リンクと弱いリンクの違いは、ターゲット・リソースの削除に関連するものです。ターゲット・リソースは、ハード・リンクに対して従属関係にあります。つまり、ハード・リンクのターゲットである間は削除できません。ハード・リンクを削除すると、次のいずれも成り立つ場合、リンクのターゲットであるリソースも削除されます。
-
リソースがバージョニングされていません。
-
削除するハード・リンクがそのリソースに対する最後の(したがって唯一の)ハード・リンクです。
弱いリンクには、リソースに対するこうした拘束力はありません。つまり、弱いリンクのターゲットであるリソースは(ハード・リンクのターゲットでないかぎり)削除できます。このため弱いリンクは、アクセスの頻度が高いリソースへのショートカットとして使用でき、それらのリソースの削除に影響しません。
ただし、弱いリンクには逆方向の依存性があります。弱いリンク(1つ以上)のターゲットになっているリソースを削除すると、それらの弱いリンクも自動的に削除されます。この意味でも、弱いリンクは参照先を失います。ハード・リンクおよび弱いリンクはいずれも、参照整合性を伴っています。つまり、リンクが存在すれば、そのターゲットも存在します。
ハード・リンクおよび弱いリンクには、この他にも違いがあります。祖先のフォルダへのハード・リンクは、循環を導入するため、許可されません。弱いリンクにはこのような制約はありません。弱いリンクは任意のフォルダをターゲットとでき、場合によっては循環が作成されます。Oracle XML DBリポジトリの(非環式)構造は、一連のハード・リンクによって定義されます。弱いリンクが表しているのは、その基本構造の上に追加されたマッピングです。
リポジトリ・リンク・タイプを判断するためにリポジトリ・パス・ビューPATH_VIEW
に問合せを行うことができます。リンク・タイプはリンク情報に含まれています。ルート要素LINK
の子要素LinkType
に含まれるこの情報は、PATH_VIEW
のXMLType
列LINK
に表示されます。例21-1に、これを示します。また、イベント・ハンドラ(LinkIn
、LinkTo
、UnlinkIn
、またはUnlinkFrom
)でコールバックgetLink()
を使用して、リポジトリ・リンク・タイプを判断できます。
関連項目:
PL/SQLファンクションgetLink
の詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください。
例21-1 PATH_VIEWへの問合せによるリンク・タイプの判断
SELECT RESID, XMLCast(XMLQuery('/LINK/LinkType' PASSING LINK RETURNING CONTENT)
AS VARCHAR2(24)) link_type
FROM PATH_VIEW WHERE equals_path(RES, '/home/QUINE/purchaseOrder.xml') = 1;
RESID LINK_TYPE
-------------------------------- ---------
DF9856CF2FE0829EE030578CCE0639C5 Weak
親トピック: リンク・タイプ
21.3.5.3 フォルダ階層の情報がない状況での弱いリンクの作成
弱いリンクは、ハード・リンクによって決定されるリポジトリ構造の上のマッピングを表しています。リソースへの弱いリンクは、そのパスではなくOIDを使用して作成できます。弱いリンクを使用すると、リソースを含むフォルダにアクセスせずにリソースにアクセスできます。
ある同僚が所有しているファイル・リソースを閲覧するとします。そのリソースにアクセスしそれを閲覧できるようにする場合、そのファイルの祖先のフォルダすべて
に関して権限<xdb:resolve>が付与されていないかぎり、そのリソースへのハード・リンクの作成はできません。この権限が付与されていれば、その同僚が所有するフォルダの名前、およびそのターゲット・リソースまでの階層構造をすべて知ることができます。
ただし、弱いリンクは基本的に、一連のハード・リンクによって定義されている実際のリポジトリ構造の上に追加されたマッピングを表しているため、リソースに対して、そのOIDを使用すれば、完全な名前のパス(URL)がなくても弱いリンクを作成できます。つまり、同僚が決めたファイルへのOIDパスを名前のパスのかわりに受け取れば、そのOIDパスを使用してドキュメントへの弱いリンクを作成できます。例21-2および例21-3に、これを示します。
例21-2は、ファイル・リソース/home/QUINE/purchaseOrder.xml
のOIDパスを出力したものです。ユーザーquine
はこれを使用してリソースへのOIDパスを取得し、そのパスをユーザーcurry
へ送信できます。またユーザーcurryは、リソースへの弱いリンクを作成できます(例21-3)。
例21-3では、ユーザーcurry
が、quinePurchaseOrder.xml
という名前の弱いリンクをフォルダ/home/CURRY
内に作成します。リンクのターゲットは、URL /home/QUINE/purchaseOrder.xml
に対応するOIDパスです。ユーザーcurry
は、ユーザーquine
には参照可能なリポジトリの構造を認識する必要はありません。
例21-2 リソースのOIDパスの取得
DECLARE
resoid RAW(16);
oidpath VARCHAR2(100);
BEGIN
SELECT RESID INTO resoid FROM RESOURCE_VIEW
WHERE equals_path(RES, '/home/QUINE/purchaseOrder.xml') = 1;
oidpath := DBMS_XDB_REPOS.createOIDPath(resoid);
DBMS_OUTPUT.put_line(oidpath);
END;
例21-3 OIDパスを使用した弱いリンクの作成
CALL DBMS_XDB_REPOS.link(/sys/oid/1BDCB46477B59C20E040578CCE0623D3
'/home/CURRY', 'quinePurchaseOrder.xml',
DBMS_XDB_REPOS.LINK_TYPE_WEAK);
親トピック: リンク・タイプ
21.3.5.4 複数のハード・リンクを回避する方法およびタイミング
ハード・リンクの作成を制限し、フォルダまたはファイル(またはその両方)への複数のハード・リンクを許可しないようにできます。ファイル・リソースへの複数のハード・リンクを許可し、フォルダ・リソースへの複数のハード・リンクを許可しないことで、UNIXやLinuxなどのファイル・システムに近い動作を実現できます。
これにより、事実上、各ファイル・リソースに対して正規のハード・リンクのパスが一意に作成され、アプリケーションの設計を単純化できます。さらに、リソースに対して複数のハード・リンクを作成しないことで、問合せのパフォーマンスを向上できます。
構成ファイルxdbconfig.xml
で次のブール型パラメータを使用して、複数のハード・リンクの作成を回避するよう構成できます。各パラメータのデフォルト値はtrue
で、複数のハード・リンクを作成できます。
-
folder-hard-links
:false
の場合、フォルダ・リソースへの複数のハード・リンクの作成を回避します。 -
non-folder-hard-links
:false
の場合、ファイル・リソースへの複数のハード・リンクの作成を回避します。
親トピック: リンク・タイプ
21.4 リポジトリ・リソースへのナビゲーショナル・アクセスまたはパス・アクセス
Oracle XML DBリポジトリのフォルダは、多くのオペレーティング・システムにより使用されている標準的なプロトコルをサポートしています。これによって、リポジトリ・フォルダは、サポートされているオペレーティング・システム環境で、ネイティブ・フォルダ(ディレクトリ)と同様に機能します。
例:
-
図21-2のように、ファイル・システムで他のファイルやフォルダにアクセスするときと同じように、Windows Explorerを使用してリポジトリのファイルおよびフォルダ(リソース)を開き、それにアクセスすることができます。
-
図21-3および図21-4に示すように、WebブラウザからHTTP(S)/WebDAVを使用してリポジトリ・データにアクセスします。
図21-3は、URL
http://xdbdemo:8080/
にアクセスしたときのブラウザを示しています。接続先のサーバーがxdbdemo
、HTTPポート番号が8080
です。図21-4は、データベースに格納されているXML文書(XSLスタイルシート)にHTTPを使用してアクセスしたときのブラウザを示しています。URLは
http://localhost:8080/home/SCOTT/poSource/xsl/purchaseOrder.xsl
です。
- インターネット・プロトコルを使用したOracle XML DBリソースへのアクセス
Oracle Net Servicesでは、データベース・リソースのアクセス方法が提供されます。インターネット・プロトコルをサポートしているOracle XML DBでは、データベース・リソースにアクセスする別の方法が提供されます。 - プロトコルおよびリソースAPIを使用したOracle ASMファイルへのアクセス (DBAの場合)
Oracle Automatic Storage Management (Oracle ASM)を使用すると、データベース・ファイルはディスク・グループに整理され、管理、データベースのミラー化およびI/Oバランシングが簡単になります。仮想リポジトリ・フォルダ/sys/asm
のOracle ASMファイルもリポジトリ・アクセスの対象となります。このアクセスはデータベース管理者(DBA)用に予約されています。開発者の使用は想定していません。
親トピック: Oracle XML DBリポジトリ・データへのアクセス
21.4.1 インターネット・プロトコルを使用したOracle XML DBリソースへのアクセス
Oracle Net Servicesでは、データベース・リソースのアクセス方法が提供されます。インターネット・プロトコルをサポートしているOracle XML DBでは、データベース・リソースにアクセスする別の方法が提供されます。
- Oracle XML DBのプロトコル・アクセスを使用できる場所
Oracle Net Servicesは、レコード指向のデータに対して最適化されています。インターネット・プロトコルは、バイナリ・ファイルやXMLテキスト・ドキュメントなどのストリーム指向のデータ用に設計されています。特定のシナリオでは、Net ServicesよりOracle XML DBのプロトコル・アクセスを使用することをお薦めします。 - Oracle XML DBへのプロトコル・アクセスの概要
Oracle XML DBへのプロトコル・アクセスには、接続、ユーザー認証、リクエスト解析およびJavaサーブレットの起動が含まれます。 - Oracle XML DBリソースの取得
プロトコルがリソースの取得を示した場合、リソースがXMLデータまたはRAW
フォームとしてストリームされることによって、リソースへのパス名が解決され、リソースがフェッチされます。 - Oracle XML DBリソースの格納
プロトコルが、XML文書であるリソースを格納することを示した場合、その関連付けられているXML Schema (存在する場合)は、文書を格納するデフォルト表を決定するために参照されます。 - インターネット・プロトコルおよびXMLType: ストリームへのXMLTypeの直接書込み
Oracle XML DBは、JavaXMLType
メソッドwriteToStream()
を使用することによって、XMLType
レベルでインターネット・プロトコルをサポートします。このメソッドはネイティブに実装され、XMLType
データをプロトコルのリクエスト・ストリームに直接書き込みます。
21.4.1.1 Oracle XML DBのプロトコル・アクセスを使用できる場所
Oracle Net Servicesは、レコード指向のデータに対して最適化されています。インターネット・プロトコルは、バイナリ・ファイルやXMLテキスト・ドキュメントなどのストリーム指向のデータ用に設計されています。特定のシナリオでは、Net ServicesよりOracle XML DBのプロトコル・アクセスを使用することをお薦めします。
-
ファイル・システムのようなデータベースを使用した、ファイル指向アプリケーションからデータベースへの直接アクセス
-
均一なデータ・アクセス方法(MS SQL Server、Exchange、Notes、多くのXMLデータベース、株価情報サービス、ニュース配信を含む多くのデータ・サーバーによってサポートされているHTTPを介したXMLなど)を必要とする異機種間アプリケーション・サーバー環境
-
XMLテキスト形式のデータを必要とするアプリケーション・サーバー環境
-
多くのアプリケーション処理を必要とせずに、クライアント側のXSLを使用して、データグラムをフォーマットするWebアプリケーション
-
データベース内で実行するJavaサーブレットを使用するWebアプリケーション
-
XML指向のストアド・プロシージャに対するWebアクセス
21.4.1.2 Oracle XML DBへのプロトコル・アクセスの概要
Oracle XML DBへのプロトコル・アクセスには、接続、ユーザー認証、リクエスト解析およびJavaサーブレットの起動が含まれます。
プロトコルを使用したOracle XML DBリソースへのアクセスは次のように行われます。
-
接続オブジェクトが確立されます。また、プロトコルによってリクエストの一部が読み取られる場合があります。
-
プロトコルによって、認証済のユーザーが既存のセッションを再利用できるか、または接続を再認証する必要があるか(通常はこちら)が決定されます。
-
既存のセッションがセッション・プールから取り出されるか、または新しいセッションが作成されます。
-
認証が行われず、リクエストがHTTPの
get
またはhead
の場合、セッションはANONYMOUS
ユーザーとして実行されます。セッションがすでにANONYMOUS
ユーザーとして認証されている場合は、そのまま既存のセッションを再利用できます。認証が行われている場合は、データベースの再認証ルーチンを使用して、接続が認証されます。 -
リクエストが解析されます。
-
(HTTPのみ)要求されたパス名がサーブレットにマップされる場合、サーブレットはJava仮想マシン(JVM)を使用して起動されます。サーブレット・コードがレスポンス・ストリームに対するレスポンスを書き出すか、または
XMLType
インスタンスにレスポンスを書き出すように要求します。
21.4.1.3 Oracle XML DBリソースの取得
プロトコルがリソースの取得を示した場合、リソースがXMLデータまたはRAW
フォームとしてストリームされることによって、リソースへのパス名が解決され、リソースがフェッチされます。
フェッチされるリソースは、XMLデータとしてストリームされます。ただし、XMLバイナリ・データ型であるXDBBinary
要素を含むリソースで、そのコンテンツがRAW
フォームでストリームされるものは除きます。
21.4.1.4 Oracle XML DBリソースの格納
プロトコルが、XML文書であるリソースを格納することを示した場合、その関連付けられているXML Schema (存在する場合)は、文書を格納するデフォルト表を決定するために参照されます。
Oracle XML DBは、文書のファイル名の拡張子が.xml
、.xsl
、.xsd
などであることを確認します。文書がXMLである場合、事前解析が実行されます。その場合、文書のルート要素のXML schemaLocation
およびnamespace
を判断するために十分なリソースが読み取られます。登録されたスキーマが、schemaLocation
URLに配置されていて、現在の文書のルート要素に対する定義を持っている場合、その要素に対して指定されたデフォルト表を使用して、リソースのコンテンツが格納されます。
21.4.1.5 インターネット・プロトコルおよびXMLType: ストリームへのXMLTypeの直接書込み
Oracle XML DBは、Java XMLType
メソッドwriteToStream()を使用することによって、XMLType
レベルでインターネット・プロトコルをサポートします。このメソッドはネイティブに実装され、XMLType
データをプロトコルのリクエスト・ストリームに直接書き込みます。
これによって、Javaデータ型を介したデータベース・データの変換およびJavaオブジェクトの作成に伴うJava VMの実行コストとオーバーヘッドが回避され、パフォーマンスが大幅に向上します。パフォーマンスをさらに向上させるには、Javaコードが多くのリーフ要素を検索せずにルートに近いXML要素ツリーのみを処理し、作成するJavaオブジェクトの数が相対的に少なくなるようにします。
21.4.2 プロトコルおよびリソースAPIを使用したOracle ASMファイルへのアクセス (DBAの場合)
Oracle Automatic Storage Management (Oracle ASM)を使用すると、データベース・ファイルはディスク・グループに整理され、管理、データベースのミラー化およびI/Oバランシングが簡単になります。仮想リポジトリ・フォルダ/sys/asm
のOracle ASMファイルもリポジトリ・アクセスの対象となります。このアクセスはデータベース管理者(DBA)用に予約されています。開発者の使用は想定していません。
この種のアクセスの典型的な使用方法は、データベース・インスタンス相互の間でのOracle ASMファイルのコピーです。たとえばDBAでは、WebDAVプロトコルを使用してGraphical User Interface(GUI)でフォルダ/sys/asm
を表示し、データ・ポンプ・ダンプセットのコピーを、Oracle ASMディスク・グループからオペレーティング・システムのファイル・システムにドラッグ・アンド・ドロップすることができます。
仮想フォルダ/sys/asm
は、デフォルトではOracle XML DBのインストール時に作成されます。データベースがOracle ASMを使用するよう構成されていない場合は、フォルダは空で、フォルダに関する操作は許可されません。
フォルダ/sys/asm
には、Oracle ASMの完全修飾ファイル名の構造で定義された階層に従うフォルダやサブフォルダが含まれます。
-
マウントされている各ディスク・グループに対応するサブフォルダが含まれます。
-
ディスク・グループ・フォルダには、そのディスク・グループを使用するデータベースに対応するサブフォルダが含まれます。ディスク・グループ・フォルダにはさらに、管理者によって作成されたOracle ASMエイリアスに対応するファイルやフォルダが含まれることがあります。
-
データベース・フォルダには、ファイル・タイプ・フォルダが含まれます。
-
ファイル・タイプ・フォルダには、バイナリのOracle ASMファイルが含まれます。
この階層を図21-5に示します。ただし、図を簡潔にするために、エイリアス用に作成されるディレクトリは省略しています。
仮想フォルダ/sys/asm
には、使用方法が次のように制限されます。次のことはできません。
-
SQLを使用した/sys/asmの
問合せ
-
通常のファイルの
/sys/asm
への配置(ここに置けるのはOracle ASMファイルのみ) -
Oracle ASMファイルの、他のOracle ASMディスク・グループや、Oracle ASM外部のフォルダへの移動(名前の変更)
-
既存のOracle ASMファイルまたはディレクトリへのハード・リンクの作成
また、次のことに注意してください。
-
フォルダ
/sys/asm
を表示するには、ロールDBA
の権限が必要です。 -
Oracle XML DBプロトコルを使用して
/sys/asm
にアクセスするには、SYS
以外のユーザーとしてログインする必要があります。
繰り返しますが、Oracle ASM仮想フォルダの操作はデータベース管理者による使用を想定したもので、開発者用ではありません。
関連項目:
-
/sys/asm
でFTPプロトコルを使用する例は、Oracle ASMファイルに対するFTPの使用を参照してください。 -
完全修飾Oracle ASMファイル名の構文や仮想フォルダ構造の詳細は、Oracle Automatic Storage Management管理者ガイドを参照してください。
21.5 リポジトリ・リソースへの問合せベースのアクセス
PL/SQLパッケージDBMS_XDB_REPOS
には、Oracle XML DBリポジトリ・リソースを操作するサブプログラムが用意されています。このAPIは、パブリック・ビューRESOURCE_VIEW
とPATH_VIEW
に基づいており、FTPやHTTP(S)/WebDAVなどのプロトコルを介してSQLによるリポジトリ・データへのアクセスを可能にします。
-
PATH_VIEW
- 一意のリポジトリ・パスごとに1つの行が存在します。 -
RESOURCE_VIEW
- リソースごとに1つの行が存在します。
リポジトリに格納された文書のメタデータおよびコンテンツはいずれも、これらのビューを介してアクセスして更新できます。ビューに対する操作では、XDB$RESOURCE
などの基礎となるリポジトリ表を使用します。
各ビューには仮想列RES
があります。列RES
を使用すると、リポジトリ・パス表記法に対応するSQL文を使用して、リソース・ドキュメントにアクセスして更新できます。
RESOURCE_VIEW
ビューには列ANY_PATH
があります。列ANY_PATH
には、リソースのコンテンツにアクセスするために現行ユーザーがPL/SQLコンストラクタXDBURIType
に渡すことができる有効なURLが含まれます。このコンテンツがバイナリ・データでない場合、リソースそのものにもコンテンツが含まれます。
表21-2に、ビューの相違点をまとめています。
表21-2 PATH_VIEWとRESOURCE_VIEWの違い
PATH_VIEW | RESOURCE_VIEW |
---|---|
リンク・プロパティを含みます |
リンク・プロパティを含みません |
リポジトリの一意の各パスに1つの行を持ちます。 |
リポジトリの各リソースに1つの行を持ちます。 |
これらのビューの行のデータ型は、XMLType
です。RESOURCE_VIEW
では、リソースに関連付けられる単一のパスは、そのリソースを参照している可能なパスの中から任意に選択されます。Oracle XML DBにはunder_path
などのSQL関数が用意されており、アプリケーションから特定のフォルダ内に(再帰的に)含まれているリソースを検索したり、リソースの深さを取得したりできます。
リポジトリ・ビュー上でDMLコードを使用すると、リソースのプロパティおよびコンテンツの挿入、名前の変更、削除および更新ができます。その他の操作(既存のリソースへのリンクの作成など)に対しては、プログラムAPIを使用する必要があります。
Oracle XML DBは、リンクの概念をサポートしています。リンクによって、指定した文書への複数のパスを定義できます。リンク・プロパティ文書と呼ばれる各XML文書では、(リソース固有ではなく)パス固有のメタデータ・プロパティが保持されます。リソースが作成されるたびに、最初のリンクも作成されます。
PATH_VIEW
は、リンク・プロパティ文書を公開します。PATH_VIEW
には、文書に対してアクセス可能なパスごとに1つのエントリがあります。PATH_VIEW
の列RES
には、このリンクの参照先のリソース・ドキュメントが含まれます。列PATH
には、リンクがリソースへのアクセスに使用できるパスが含まれます。列LINK
には、このPATH
のリンク・プロパティ文書(メタデータ)が含まれます。
関連項目:
-
ビュー
PATH_VIEW
の詳細についてBPT
を確認するには、Oracle Databaseリファレンスを参照してください。 -
ビュー
RESOURCE_VIEW
の詳細についてBPT
を確認するには、Oracle Databaseリファレンスを参照してください。
親トピック: Oracle XML DBリポジトリ・データへのアクセス
21.6 リポジトリ・リソースへのサーブレット・アクセス
Oracle XML DBは、JavaサーブレットAPIバージョン2.2を実装します。
サポートは、次の制限事項によって限定されます。
-
すべてのサーブレットが配布可能である必要があります。これらのサーブレットは、異なる仮想マシンで実行可能である必要があります。
-
WARおよび
web.xml
ファイルはサポートされていません。Oracle XML DBはこのファイルのXML構成のサブセットをサポートしています。XSLTスタイルシートをweb.xml
に適用して、サーブレットの定義を生成できます。外部ツールを使用して、web.xml
ファイルに定義されたサーブレットのデータベース・ロールを作成する必要があります。 -
JavaServer Pages(JSP)サポートをサーブレットとしてインストールし、手動で構成できます。
-
HTTPSession
および関連するクラスはサポートされません。 -
1つのサーブレット・コンテキスト(1つのWebアプリケーション)のみがサポートされます。
21.7 リポジトリ・リソースに対する操作
Oracle XML DBリポジトリ・リソースに格納されているデータを操作するには、Java、PL/SQL、インターネット・プロトコルおよびOracle XML DB Content Connector (非推奨)を使用します。最も一般的な操作およびこれらの使用に必要なデータベース権限について説明します。
次のいずれかの方法でリポジトリ・データにアクセスできます。
-
Oracle XML DB Resource APIs for Java
-
Oracle XML DB Resource View APIとOracle XML DB Resource API for PL/SQLの組合せ
-
インターネット・プロトコル(HTTP(S)、WebDAVおよびFTP)およびOracle XML DBプロトコル・サーバー
-
Oracle XML DB Content Connector (非推奨)、およびそれを介した標準のContent Repository API for Java (JCR)。
アクセスには、様々な方法を同等に使用できます。つまり、リポジトリにコンテンツを追加する方法と、リポジトリからコンテンツを取り出す方法は、自由に選択できます。たとえば、コンテンツをリポジトリに追加する際にSQLまたはPL/SQLを使用して、コンテンツを取り出す際にインターネット・プロトコルを使用できます。使用する方法が逆でも同様です。
表21-3に、一般的なOracle XML DBリポジトリの操作を示し、いくつかのアクセス方法を使用してこれらの操作をどのように実行できるかを説明します。この表ではそれぞれの方法に共通の機能を示しますが、それらすべての方法が、特定のタスクに対して同じように適しているわけではありません。特に説明がなければ、この表で使用される「リソース」とは、ファイル・リソースまたはフォルダ・リソースのいずれかを表します。
表21-3は、各操作に必要なリソース権限も示しています。
表21-3 Oracle XML DBリポジトリへのアクセス: APIオプション
データ・アクセス | SQLおよびPL/SQL | プロトコル | 必要なリソース権限 | JCRのサポート |
---|---|---|---|---|
リソースの作成 |
DBMS_XDB_REPOS.createResource( '/public/T1/testcase.txt', 'ORIGINAL text'); INSERT INTO RESOURCE_VIEW (ANY_PATH, RES) SELECT '/public/T1/copy1.txt', RES FROM RESOURCE_VIEW WHERE equals_path(RES, '/public/T1/testcase.txt') = 1; |
HTTP: FTP: |
親フォルダに対する |
あり |
リソース・コンテンツの更新 |
UPDATE RESOURCE_VIEW SET RES = XMLQuery( 'declare default element namespace "http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :) copy $i := $p1 modify (for $j in $i/Resource/Contents/text return replace value of node $j with $p2) return $i' PASSING RES AS "p1", 'NEW text' AS "p2" RETURNING CONTENT) WHERE equals_path(RES, '/public/T1/copy1.txt') = 1 |
HTTP: FTP: |
リソースに対する |
あり |
リソース・プロトコルの更新 |
UPDATE RESOURCE_VIEW SET RES = XMLQuery( 'declare default element namespace "http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :) copy $i := $p1 modify (for $j in $i/Resource/DisplayName return replace value of node $j with $p2) return $i' PASSING RES AS "p1", 'NewName1.txt' AS "p2" RETURNING CONTENT) WHERE equals_path(RES, '/public/T1/copy1.txt') = 1; |
WebDAV:
|
リソースに対する |
あり |
リソースACLの更新 |
EXEC DBMS_XDB_REPOS.setACL( '/public/T1/copy1.txt', '/sys/acls/all_owner_acl.xml'); |
適用外 |
リソースに対する |
なし |
リソースのリンク解除(最新のリンクの削除) |
EXEC DBMS_XDB_REPOS.deleteResource() または DELETE FROM RESOURCE_VIEW WHERE equals_path(RES, path) > 0 |
HTTP:
FTP: |
親フォルダに対する リソースに対する |
あり |
リソースへのすべてのリンクの強制削除 |
DBMS_XDB_REPOS.deleteResource() または DELETE FROM PATH_VIEW WHERE XMLCast( XMLQuery( 'declare namespace n1= "http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :) //n1:DisplayName' PASSING RES RETURNING CONTENT) AS VARCHAR2(256)) = 'My resource' |
FTP:
|
すべての親フォルダに対する リソースに対する |
あり |
リソースの移動 |
UPDATE PATH_VIEW SET path = '/public/T1/copy2.txt' WHERE equals_path(RES, '/public/T1/copy1.txt') = 1; |
WebDAV:
FTP: |
ソース親フォルダに対する ターゲット親フォルダに対する リソースに対する |
あり |
リソースのコピー |
INSERT INTO PATH_VIEW (path, RES, link) SELECT '/public/T1/copy3.txt', RES, link FROM PATH_VIEW WHERE equals_path(RES, '/public/T1/copy2.txt') = 1; |
WebDAV:
|
新規コピー: ターゲット親フォルダに対する リソースに対する 上書きコピー(置換): リソースに対する 既存のターゲット・リソースに対する |
あり |
既存リソースへのハード・リンクの作成 |
EXEC DBMS_XDB_REPOS.link('/public/T1/copy3.txt', '/public/T1', 'myhardlink'); |
該当なし |
親フォルダに対する リソースに対する |
なし |
既存リソースへの弱いリンクの作成 |
EXEC DBMS_XDB_REPOS.link( '/public/T1/copy3.txt', '/public/T1', 'myweaklink', DBMS_XDB_REPOS.LINK_TYPE_WEAK); |
該当なし |
親フォルダに対する リソースに対する |
なし |
リソースの所有者の変更 |
UPDATE RESOURCE_VIEW SET RES = XMLQuery( 'copy $i := $p1 modify (for $j in $i/Resource/Owner return replace value of node $j with $p2) return $i' PASSING RES AS "p1", 'U2' AS "p2" RETURNING CONTENT) WHERE equals_path(RES, '/public/T1/copy3.txt') = 1; |
該当なし |
リソースに対する |
あり |
リソース・コンテンツのバイナリ表現またはテキスト表現の取得 |
SELECT XDBURIType(path).getBLOB() FROM DUAL; SELECT XMLQuery( 'declare default element namespace "http://xmlns.oracle.com/xdb/XDBResource.xsd";(: :) $r/Resource/Contents' PASSING RES AS "r" RETURNING CONTENT) FROM RESOURCE_VIEW WHERE equals_path(RES, '/public/T1/copy2.text') = 1; |
HTTP: FTP: |
リソースに対する |
あり |
リソース・コンテンツの |
SELECT XDBURIType('/public/T1/res.xml').getXML FROM DUAL; SELECT XMLQuery( 'declare default element namespace "http://xmlns.oracle.com/xdb/XDBResource.xsd";(: :) $r/Resource/Contents/*' PASSING RES AS "r" RETURNING CONTENT) FROM RESOURCE_VIEW WHERE equals_path(RES, '/public/T1/res.xml') = 1; |
該当なし |
リソースに対する |
なし |
リソース・プロトコルの取得 |
SELECT XMLCast( XMLQuery( 'declare default element namespace "http://xmlns.oracle.com/xdb/XDBResource.xsd";(: :) $r/Resource/LastModifier' PASSING RES AS "r" RETURNING CONTENT) AS VARCHAR2(128)) FROM RESOURCE_VIEW WHERE equals_path(RES, '/public/T1/res.xml') = 1; |
WebDAV:
|
リソースに対する |
あり |
フォルダ内のリソースのリスト |
SELECT PATH FROM PATH_VIEW WHERE under_path(res, '/public/T1') = 1; |
WebDAV:
|
フォルダに対する |
あり |
フォルダの作成 |
Call DBMS_XDB_REPOS.createFolder('/public/T2'); |
WebDAV:
FTP: |
親フォルダに対する |
あり |
フォルダのリンク解除 |
DBMS_XDB_REPOS.deleteResource('/public/T2') |
HTTP:
FTP: |
親フォルダに対する リソースに対する |
あり |
フォルダおよびそのフォルダに対するすべてのリンクの強制削除 |
DBMS_XDB_REPOS.deleteResource( '/public/T2', DBMS_XDB.DELETE_RECURSIVE_FORCE); |
該当なし |
すべての親フォルダに対する フォルダ・リソースに対する |
あり |
行ロックされたリソースの取得 |
SELECT ... FROM RESOURCE_VIEW FOR UPDATE ...; |
該当なし |
リソースに対する |
なし |
リソースへのWebDAVロックの追加 |
EXEC DBMS_XDB_REPOS.LockResource( '/public/T1/res.xml', TRUE, TRUE); |
WebDAV:
FTP:
|
リソースに対する |
なし |
WebDAVロックの削除 |
DECLARE... BEGIN DBMS_XDB_REPOS.GetLockToken('/public/T1/res.xml', locktoken); DBMS_XDB_REPOS.UnlockResource( '/public/T1/res.xml', locktoken); END; |
WebDAV: FTP:
|
リソースに対する |
なし |
ファイル・リソースのチェックアウト |
EXEC DBMS_XDB_VERSION.checkOut( '/public/T1/res.xml'); |
該当なし |
リソースに対する |
なし |
ファイル・リソースのチェックイン |
EXEC DBMS_XDB_VERSION.checkIn( '/public/T1/res.xml'); |
該当なし |
リソースに対する |
なし |
ファイル・リソースのチェックアウトのキャンセル |
EXEC DBMS_XDB_VERSION.unCheckOut( '/public/T1/res.xml'); |
該当なし |
リソースに対する |
なし |
ファイル・リソースのバージョニング |
EXEC DBMS_XDB_VERSION.makeVersioned( '/public/T1/res.xml'); |
該当なし |
リソースに対する |
なし |
イベント・ハンドラの削除 |
|
該当なし |
リソースまたは親フォルダ(コンテキストによる)に対する |
なし |
変更のコミット |
COMMIT; |
各リクエスト後の自動コミット |
該当なし |
あり |
変更のロールバック |
ROLLBACK; |
該当なし |
該当なし |
あり |
表21-3にリストされている権限に加え、操作により影響を受ける各リソースに対しては権限xdb:read-properties
が必要です。また、その操作のターゲットとなるリソースに加え、リソースの親フォルダに影響を与える操作を実行するには、その親フォルダに対しても権限xdb:read-properties
が必要です。たとえば、あるリソースに対する削除操作は、削除するリソースおよびその親フォルダに影響を及ぼします。したがってこの場合は、対象のリソースおよびその親フォルダに対して権限xdb:read-properties
が必要です。
関連トピック
関連項目:
-
PL/SQLパッケージ
DBMS_XDB_REPOS
の詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください。 -
PL/SQLパッケージ
DBMS_XDB_VERSION
の詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください。 -
PL/SQLパッケージ
DBMS_XEVENT
の詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください。
親トピック: Oracle XML DBリポジトリ・データへのアクセス
21.8 SQLを使用したリポジトリ・リソースのコンテンツへのアクセス
SQLでは、Oracle XML DBリポジトリの文書のコンテンツにアクセスするには、PL/SQLコンストラクタXDBURIType
を使用するか、RESOURCE_VIEW
および対応するリソース・ドキュメントを使用します。
最も簡単な方法は、XDBURIType
を使用することです。このコンストラクタにURLを渡し、アクセスするリソースを指定します。このURLは、リポジトリのルートから始まると想定されます。オブジェクト型XDBURIType
には、リソースに関連付けることのできる様々な種類のコンテンツにアクセスするためのメソッドgetBLOB()
、getCLOB()
およびgetXML()
が用意されています。
例21-4では、コンストラクタXDBURIType
を使用してテキスト・ドキュメントのコンテンツにアクセスします。
文書のコンテンツには、RESOURCE_VIEW
および対応するリソース・ドキュメントを使用してもアクセスできます。例21-5では、これを実行してテキスト・ドキュメントのコンテンツにアクセスします。
XML文書(XML Schemaに基づくまたはXML Schemaに基づかない)のコンテンツには、この方法でもアクセスできます。例21-6では、XML文書のノードおよび対応するリソース・ドキュメントのノードが含まれたXPath式を使用して、PurchaseOrder
文書のコンテンツにアクセスします。
例21-6では、名前空間接頭辞r
を使用し、リソースの名前空間のメンバーであるノードをXPath式から識別しています。名前空間接頭辞r
は、SQL/XML関数XMLTable
のXMLNAMESPACES
句を使用して定義されます。発注書XML Schemaで名前空間が定義されておらず、名前空間接頭辞をPurchaseOrder
文書のノードに適用できないため、ここでは名前空間の宣言が必要になります。
関連項目:
XMLTable
のXMLNAMESPACES
句の詳細は、XQueryとOracle XML DBを参照してください。
例21-4 XDBURITYPEを使用したリポジトリ内のテキスト・ドキュメントへのアクセス
SELECT XDBURIType('/home/QUINE/NurseryRhyme.txt').getCLOB() FROM DUAL; XDBURITYPE('/HOME/QUINE/NURSERYRHYME.TXT').GETCLOB() ---------------------------------------------------- Mary had a little lamb Its fleece was white as snow and everywhere that Mary went that lamb was sure to go 1 row selected.
例21-5 RESOURCE_VIEWを使用したリソース・コンテンツへのアクセス
SELECT CONTENT FROM RESOURCE_VIEW, XMLTable(XMLNAMESPACES (default 'http://xmlns.oracle.com/xdb/XDBResource.xsd'), '/Resource/Contents' PASSING RES COLUMNS content CLOB PATH 'text') WHERE equals_path(RES, '/home/QUINE/NurseryRhyme.txt') = 1; CONTENT ------- Mary had a little lamb Its fleece was white as snow and everywhere that Mary went that lamb was sure to go 1 row selected.
例21-6 リソースと名前空間接頭辞を使用したXML文書へのアクセス
SELECT des.description FROM RESOURCE_VIEW rv, XMLTable(XMLNAMESPACES ('http://xmlns.oracle.com/xdb/XDBResource.xsd' AS "r"), '/r:Resource/r:Contents/PurchaseOrder/LineItems/LineItem' PASSING rv.RES COLUMNS description VARCHAR2(256) PATH 'Description') des WHERE equals_path(rv.RES, '/home/QUINE/PurchaseOrders/2002/Mar/SBELL-2002100912333601PDT.xml') = 1; DES.DESCRIPTION --------------------------------- A Night to Remember The Unbearable Lightness Of Being The Wizard of Oz 3 rows selected.
親トピック: Oracle XML DBリポジトリ・データへのアクセス
21.9 XML Schemaに基づく文書のコンテンツへのアクセス
XML Schemaに基づく文書のコンテンツにアクセスするには、スキーマに基づかない文書の場合と同様、対応するリソース・ドキュメントを使用します。または、XML SchemaをOracle XML DBに登録したときに定義したデフォルト表の行としてアクセスします。
最初の場合は、RESOURCE_VIEW
を使用して、XML Schemaに基づく様々な種類の文書を1つのSQL文で問い合せることができます。
- 結合でXMLRef要素を使用した、リソース・コンテンツへのアクセス
リソース・ドキュメントの要素XMLRef
は、SQL文で単一の操作の一部としてメタデータおよびコンテンツにアクセスまたは更新する必要があるときに必要な結合キーを提供します。
親トピック: Oracle XML DBリポジトリ・データへのアクセス
21.9.1 結合でXMLRef要素を使用した、リソース・コンテンツへのアクセス
リソース・ドキュメントの要素XMLRef
は、SQL文で単一の操作の一部としてメタデータおよびコンテンツにアクセスまたは更新する必要があるときに必要な結合キーを提供します。
ここでの例は、要素XMLRef
の値に基づく結合を使用して、リソース・コンテンツにアクセスする問合せを示しています。
例21-7では、Oracle XML DBリポジトリのパスに基づいて、defaultTable
の行を検索します。SQL関数ref
は、リソース・ドキュメントRES
内のXMLRef
要素の値に基づいて、デフォルト表内のターゲットの行を検索します。
例21-8では、メタデータ、パスおよびコンテンツに基づいて、XML文書からフラグメントを選択する方法を示します。この問合せは、/home/QUINE/PurchaseOrders/2002/Mar
の下にあり、部品番号715515009058の発注が含まれる文書に対して、要素Reference
の値を戻します。
通常、XML Schemaに基づくXML文書のコンテンツにアクセスするときは、RESOURCE_VIEW
またはPATH_VIEW
を単独で使用するよりも、RESOURCE_VIEW
またはPATH_VIEW
をデフォルト表と結合して使用した方が効率的です。リソース・ドキュメントとデフォルト表を明示的に結合することによって、Oracle XML DBは、SQL文が1種類のXML文書に対してのみ機能することを認識します。したがって、XPathのリライトを使用すれば、デフォルト表およびリソースに対する操作を最適化できます。
例21-7 SQL関数REFおよび要素XMLRefを使用した、リポジトリのリソース・データの問合せ
SELECT des.description
FROM RESOURCE_VIEW rv,
purchaseorder p,
XMLTable('$p/PurchaseOrder/LineItems/LineItem' PASSING p.OBJECT_VALUE AS "p"
COLUMNS description VARCHAR2(256) PATH 'Description') des
WHERE equals_path(rv.RES, '/home/QUINE/PurchaseOrders/2002/Mar/SBELL-2002100912333601PDT.xml')
= 1
AND ref(p) = XMLCast(XMLQuery('declare default element namespace
"http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
fn:data(/Resource/XMLRef)' PASSING rv.RES RETURNING CONTENT)
AS REF XMLType);
DES.DESCRIPTION
---------------------------------
A Night to Remember
The Unbearable Lightness Of Being
The Wizard of Oz
3 rows selected.
例21-8 メタデータ、パスおよびコンテンツに基づくXML文書のフラグメントの選択
SELECT XMLCast(XMLQuery('$p/PurchaseOrder/Reference'
PASSING po.OBJECT_VALUE AS "p" RETURNING CONTENT)
AS VARCHAR2(30))
FROM RESOURCE_VIEW rv, purchaseorder po
WHERE under_path(rv.RES, '/home/QUINE/PurchaseOrders/2002/Mar') = 1
AND ref(po) = XMLCast(
XMLQuery('declare default element namespace
"http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
fn:data(/Resource/XMLRef)'
PASSING rv.RES RETURNING CONTENT)
AS REF XMLType)
AND XMLExists('$p/PurchaseOrder/LineItems/LineItem/Part[@Id="715515009058"]'
PASSING po.OBJECT_VALUE AS "p");
XMLCAST(XMLQUERY('$P/PURCHASEO
------------------------------
CJOHNSON-20021009123335851PDT
LSMITH-2002100912333661PDT
SBELL-2002100912333601PDT
3 rows selected.
親トピック: XML Schemaに基づく文書のコンテンツへのアクセス
21.10 リポジトリの文書のコンテンツの更新
Oracle XML DBリポジトリに格納された文書のコンテンツは、インターネット・プロトコルまたはSQLを使用して更新できます。
- インターネット・プロトコルを使用したリポジトリのコンテンツの更新
最も一般的なコンテンツ作成ツールは、HTTP、FTPおよびWebDAVプロトコルをサポートしています。適切なアクセス権限が付与されている場合、Oracle XML DBリポジトリに格納されたコンテンツにアクセスして編集するには、更新する文書をターゲットとする簡単なURLのみが必要です。 - SQLを使用したリポジトリのコンテンツの更新
XQuery Updateを使用すると、Oracle XML DBリポジトリに格納された文書のコンテンツを更新できます。文書のコンテンツを変更するには、リソース・ドキュメントまたは文書のコンテンツを保持するデフォルト表を更新します。
親トピック: Oracle XML DBリポジトリ・データへのアクセス
21.10.1 インターネット・プロトコルを使用したリポジトリのコンテンツの更新
最も一般的なコンテンツ作成ツールは、HTTP、FTPおよびWebDAVプロトコルをサポートしています。適切なアクセス権限が付与されている場合、Oracle XML DBリポジトリに格納されたコンテンツにアクセスして編集するには、更新する文書をターゲットとする簡単なURLのみが必要です。
一般的なコンテンツ作成ツールでは、URLが指定されたHTTP動詞get
を使用して文書のコンテンツにアクセスでき、HTTP動詞put
を使用して、更新されたコンテンツを保存できます。
図21-6に、Microsoft WordのWebDAVサポートを使用して、Oracle XML DBリポジトリに格納された文書をMicrosoft Wordで更新および編集する方法を示します。
図21-6 Microsoft Wordを使用した、Oracle XML DBに格納されたコンテンツの更新および編集
「図21-6 Microsoft Wordを使用した、Oracle XML DBに格納されたコンテンツの更新および編集」の説明
Microsoft Wordなどの編集アプリケーションを使用してOracle XML DBに格納されたXML文書を更新すると、データベースは、文書の新しいコンテンツを含む入力ストリームを受け取ります。ただし、文書にどのような変更が加えられたかについて、WordなどのアプリケーションからOracle XML DBに伝達する方法はありません。このため、部分的に更新することはできません。文書全体を再度解析し、元の文書から導出されたすべてのオブジェクトを、新しいコンテンツから導出されたオブジェクトに置き換える必要があります。
親トピック: リポジトリの文書のコンテンツの更新
21.10.2 SQLを使用したリポジトリのコンテンツの更新
XQuery Updateを使用すると、Oracle XML DBリポジトリに格納された文書のコンテンツを更新できます。文書のコンテンツを変更するには、リソース・ドキュメントまたは文書のコンテンツを保持するデフォルト表を更新します。
- リソース・ドキュメントの更新によるリポジトリ内の文書の更新
ドキュメントのコンテンツを更新するには、SQLUPDATE
文およびSQL関数XMLQuery
とXQuery Updateを使用します。XQuery式が更新操作のターゲットとしてXMLQuery
に渡されます。 - デフォルト表の更新によるリポジトリ内のXML Schemaに基づく文書の更新
文書のコンテンツを管理するために使用するデフォルト表に対して更新操作を直接実行することによって、XML Schemaに基づく文書を更新できます。
親トピック: リポジトリの文書のコンテンツの更新
21.10.2.1 リソース・ドキュメントの更新によるリポジトリ内の文書の更新
ドキュメントのコンテンツを更新するには、SQL UPDATE
文およびSQL関数XMLQuery
とXQuery Updateを使用します。XQuery式が更新操作のターゲットとしてXMLQuery
に渡されます。
例21-9では、簡単なテキスト・ドキュメントのコンテンツを更新します。更新操作のターゲットとしてXMLQuery
に渡されたXQuery式により、要素/Resource/Contents/text
に属するテキスト・ノードが識別されます。
関連するリソースの更新によって文書のコンテンツを更新する方法のメリットは、Oracle XML DBリポジトリに格納されたあらゆる種類の文書を更新できることです。
例21-10では、対応するリソース・ドキュメントでSQL UPDATE
操作を実行して、XML文書のノードを更新します。ここでは、XQuery Updateを使用して、要素User
に関連付けられたテキスト・ノードの値を変更します。
例21-9 リソースでUPDATEとXQuery Updateを使用したテキスト・ドキュメントの更新
DECLARE
file BFILE;
contents CLOB;
dest_offset NUMBER := 1;
src_offset NUMBER := 1;
lang_context NUMBER := 0;
conv_warning NUMBER := 0;
BEGIN
file := bfilename('XMLDIR', 'tdadxdb-03-02.txt');
DBMS_LOB.createTemporary(contents, true, DBMS_LOB.SESSION);
DBMS_LOB.fileopen(file, DBMS_LOB.file_readonly);
DBMS_LOB.loadClobfromFile(contents,
file,
DBMS_LOB.getLength(file),
dest_offset,
src_offset,
nls_charset_id('AL32UTF8'),
lang_context,
conv_warning);
DBMS_LOB.fileclose(file);
UPDATE RESOURCE_VIEW
SET RES =
XMLQuery('declare default element namespace
"http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
copy $i := $p1 modify
(for $j in $i/Resource/Contents/text
return replace value of node $j with $p2)
return $i'
PASSING RES AS "p1", contents AS "p2" RETURNING CONTENT)
WHERE equals_path(res, '/home/QUINE/NurseryRhyme.txt') = 1;
DBMS_LOB.freeTemporary(contents);
END;
/
例21-10 リソースでUPDATEとXQuery Updateを使用したXMLノードの更新
UPDATE RESOURCE_VIEW
SET RES =
XMLQuery('declare namespace r="http://xmlns.oracle.com/xdb/XDBResource.xsd";
copy $i := $p1 modify
(for $j in $i/r:Resource/r:Contents/PurchaseOrder/User
return replace value of node $j with $p2)
return $i'
PASSING RES AS "p1", 'SKING' AS "p2" RETURNING CONTENT)
WHERE equals_path(res, '/home/QUINE/PurchaseOrders/2002/Mar/SBELL-2002100912333601PDT.xml')
= 1;
1 row updated.
SELECT XMLCast(XMLQuery(
'declare namespace ns="http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
$r/ns:Resource/ns:Contents/PurchaseOrder/User/text()'
PASSING RES AS "r" RETURNING CONTENT)
AS VARCHAR2(32))
FROM RESOURCE_VIEW
WHERE equals_path(RES,
'/home/QUINE/PurchaseOrders/2002/Mar/SBELL-2002100912333601PDT.xml')
= 1;
XMLCAST(XMLQUERY('DECLARENAMESPA
--------------------------------
SKING
1 row selected.
親トピック: SQLを使用したリポジトリのコンテンツの更新
21.10.2.2 デフォルト表の更新によるリポジトリ内のXML Schemaに基づく文書の更新
文書のコンテンツを管理するために使用するデフォルト表に対して更新操作を直接実行することによって、XML Schemaに基づく文書を更新できます。
メタデータに基づくパスまたは条件が含まれたWHERE
句を使用して文書を配置する必要がある場合、SQL UPDATE
文では、リソースとデフォルト表の間の結合を使用する必要があります。
一般に、XML Schemaに基づく文書のコンテンツを更新する場合は、RESOURCE_VIEW
またはPATH_VIEW
を単独で使用するよりも、RESOURCE_VIEW
またはPATH_VIEW
をデフォルト表と結合して使用するほうが効率的です。リソース・ドキュメントとデフォルト表を明示的に結合することによって、Oracle XML DBは、SQL文が1種類のXML文書に対してのみ機能することを認識します。これによって、デフォルト表およびリソースで部分更新を使用できます。
例21-11では、ターゲットの行をパスによって識別し、デフォルト表に対してXQuery Updateを使用します。更新される行は、REF
によって識別されます。REF
は、Oracle SQL関数equals_path
を使用して、リポジトリ・パスによって識別されます。これにより、更新対象は、指定されたパスで識別されるリソースに対応する行のみに制限されます。
例21-11 リポジトリ内のXML Schemaに基づく文書の更新
UPDATE purchaseorder p
SET p.OBJECT_VALUE =
XMLQuery('copy $i := $p1 modify
(for $j in $i/PurchaseOrder/User
return replace value of node $j with $p2)
return $i'
PASSING p.OBJECT_VALUE AS "p1", 'SBELL' AS "p2" RETURNING CONTENT)
WHERE ref(p) =
(SELECT XMLCast(XMLQuery('declare default element namespace
"http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
fn:data(/Resource/XMLRef)'
PASSING rv.RES RETURNING CONTENT) AS REF XMLType)
FROM RESOURCE_VIEW rv
WHERE equals_path(rv.RES,
'/home/QUINE/PurchaseOrders/2002/Mar/SBELL-2002100912333601PDT.xml')
= 1);
SELECT XMLCast(XMLQuery('$p/PurchaseOrder/User/text()'
PASSING p.OBJECT_VALUE AS "p" RETURNING CONTENT)
AS VARCHAR2(32))
FROM purchaseorder p, RESOURCE_VIEW rv
WHERE ref(p) = XMLCast(XMLQuery('declare default element namespace
"http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
fn:data(/Resource/XMLRef)' PASSING rv.RES RETURNING CONTENT)
AS REF XMLType)
AND equals_path(rv.RES, '/home/QUINE/PurchaseOrders/2002/Mar/SBELL-2002100912333601PDT.xml')
= 1;
XMLCAST(XMLQUERY('$P/PURCHASEO
------------------------------
SBELL
親トピック: SQLを使用したリポジトリのコンテンツの更新
21.11 RESOURCE_VIEWおよびPATH_VIEW内のリソースの問合せ
ここでの例は、RESOURCE_VIEW
およびPATH_VIEW
と、Oracle SQL関数equals_path
およびunder_path
を使用したリポジトリのフォルダ限定の問合せを示しています。
Oracle XML DBには、フォルダ限定の問合せを実行するために使用できるOracle SQL関数equals_path
およびunder_path
の2つが用意されています。このような問合せは、RESOURCE_VIEW
またはPATH_VIEW
を操作するSQL文を、Oracle XML DBのフォルダ階層内の特定の場所にある文書に制限します。
関数equals_path
は、SQL文を、指定したパスで識別される単一の文書に制限します。関数under_path
は、SQL文を、階層内の特定の場所より下位に存在する文書に制限します。
ここでの例は、RESOURCE_VIEW
およびPATH_VIEW
に格納されたリソース・ドキュメントに対する簡単なフォルダ限定の問合せを示しています。
例21-12の問合せでは、SQL関数equals_path
とRESOURCE_VIEW
を使用してリソースにアクセスしています。問い合せるリソースは、例21-9の更新操作で得られた結果です。例21-4と例21-5に示す元のリソースのテキストが、別の童謡「Hickory Dickory Dock...」の歌詞に置き換えられています。
例21-12に示すように、リソース・ドキュメントは、DAV標準で定義された一連のメタデータを取得するXML文書です。メタデータには、CreationDate
、Creator
、Owner
、ModificationDate
、DisplayName
などの情報が含まれています。リソース・ドキュメントのコンテンツは、SQL/XMLアクセスおよび問合せ関数を使用して、他のXML文書と同様の方法で問合せおよび更新ができます。
例21-13の問合せにより、Oracle XML DBリポジトリに格納された各XSLスタイルシートへのパスを検索します。これは.xsl
で終わるDisplayName
の検索を実行します。
例21-14の問合せでは、パス/home/QUINE/PurchaseOrders
の下に存在するリソース(ファイルおよびフォルダ)の数をカウントします。PATH_VIEW
ではなくRESOURCE_VIEW
を使用すると、複数リンクのターゲットであるリソースは1回のみカウントされます。SQL関数under_path
を使用すると、結果セットは、/home/QUINE/PurchaseOrders
で始まるパスを使用してアクセス可能な文書に制限されます。
例21-15の問合せは、パス/home/QUINE/PurchaseOrders/2002/Apr
で識別されるフォルダのコンテンツをリストします。この問合せによって、フォルダ内のディレクトリのリストを効率的に作成できます。
例21-16の問合せは、パス/home/QUINE/PurchaseOrders/2002/Apr
で識別されるフォルダに含まれる、関連するリソースのDisplayName
要素がS
で始まる一連のリンクをリストします。
例21-17の問合せにより、PurchaseOrder
文書を含む、Oracle XML DBリポジトリの各リソースへのパスを検索します。文書はXML Schema URLおよびリポジトリに格納されたスキーマに基づくXMLデータのグローバル要素を識別する、メタデータ・プロパティSchemaElement
に基づき識別されます。
例21-12 EQUALS_PATHおよびRESOURCE_VIEWを使用したリソースへのアクセス
SELECT XMLSerialize(DOCUMENT r.res AS CLOB)
FROM RESOURCE_VIEW r
WHERE equals_path(res, '/home/QUINE/NurseryRhyme.txt') = 1;
XMLSERIALIZE(DOCUMENTR.RESASCLOB)
--------------------------------------------------------------------------------
<Resource xmlns="http://xmlns.oracle.com/xdb/XDBResource.xsd"
Hidden="false"
Invalid="false"
Container="false"
CustomRslv="false"
VersionHistory="false"
StickyRef="true">
<CreationDate>2005-06-13T13:19:20.566623</CreationDate>
<ModificationDate>2005-06-13T13:19:22.997831</ModificationDate>
<DisplayName>NurseryRhyme.txt</DisplayName>
<Language>en-US</Language>
<CharacterSet>UTF-8</CharacterSet>
<ContentType>text/plain</ContentType>
<RefCount>1</RefCount>
<ACL>
<acl description=
"Private:All privileges to OWNER only and not accessible to others"
xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:dav="DAV:"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd"
shared="true">
<ace>
<grant>true</grant>
<principal>dav:owner</principal>
<privilege>
<all/>
</privilege>
</ace>
</acl>
</ACL>
<Owner>QUINE</Owner>
<Creator>QUINE</Creator>
<LastModifier>QUINE</LastModifier>
<SchemaElement>http://xmlns.oracle.com/xdb/XDBSchema.xsd#text</SchemaElement>
<Contents>
<text>Hickory Dickory Dock
The Mouse ran up the clock
The clock struck one
The Mouse ran down
Hickory Dickory Dock
</text>
</Contents>
</Resource>
1 row selected.
例21-13 リポジトリに格納されたXSLTスタイルシートへのパスの判別
SELECT ANY_PATH FROM RESOURCE_VIEW
WHERE XMLCast(XMLQuery(
'declare namespace ns="http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
$r/ns:Resource/ns:DisplayName'
PASSING RES AS "r" RETURNING CONTENT)
AS VARCHAR2(100))
LIKE '%.xsl';
ANY_PATH
-------------------------------------------
/home/MDSYS/epsg/sdoepsggrid2nadcon.xsl
/home/MDSYS/epsg/sdoepsggrid2ntv2/xsl
/source/schemas/poSource/xsl/empdept.xsl
/source/schemas/poSource/xsl/purchaseOrder.xsl
4 rows selected.
例21-14 パスの下に存在するリソースのカウント
SELECT count(*)
FROM RESOURCE_VIEW
WHERE under_path(RES, '/home/QUINE/PurchaseOrders') = 1;
COUNT(*)
----------
145
1 row selected.
例21-15 パス内のフォルダのコンテンツのリスト
SELECT PATH
FROM PATH_VIEW
WHERE under_path(RES, '/home/QUINE/PurchaseOrders/2002/Apr') = 1;
PATH
----------------------------------------------------------------------
/home/QUINE/PurchaseOrders/2002/Apr/AMCEWEN-20021009123336171PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/AMCEWEN-20021009123336271PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/EABEL-20021009123336251PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/PTUCKER-20021009123336191PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/PTUCKER-20021009123336291PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/SBELL-20021009123336231PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/SBELL-20021009123336331PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/SKING-20021009123336321PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/SMCCAIN-20021009123336151PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/SMCCAIN-20021009123336341PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/VJONES-20021009123336301PDT.xml
11 rows selected.
例21-16 フォルダに含まれているリンクのリスト
SELECT PATH
FROM PATH_VIEW
WHERE XMLCast(XMLQuery(
'declare namespace ns="http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
$r/ns:Resource/ns:DisplayName'
PASSING RES AS "r" RETURNING CONTENT)
AS VARCHAR2(100))
LIKE 'S%'
AND under_path(RES, '/home/QUINE/PurchaseOrders/2002/Apr') = 1;
PATH
----------------------------------------------------------------------
/home/QUINE/PurchaseOrders/2002/Apr/SBELL-20021009123336231PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/SBELL-20021009123336331PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/SKING-20021009123336321PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/SMCCAIN-20021009123336151PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/SMCCAIN-20021009123336341PDT.xml
5 rows selected.
例21-17 発注書のXML文書が含まれたリソースへのパスの検索
SELECT ANY_PATH
FROM RESOURCE_VIEW
WHERE XMLExists(
'declare namespace ns="http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
$r/ns:Resource[ns:SchemaElement=
"http://localhost:8080/source/schemas/poSource/xsd/purchaseOrder.xsd#PurchaseOrder"]'
PASSING RES AS "r");
この問合せは次のパスを戻します。それぞれのパスにPurchaseOrder
文書が含まれています。
ANY_PATH
-----------------------------------------------------------------------
/home/QUINE/PurchaseOrders/2002/Apr/AMCEWEN-20021009123336171PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/AMCEWEN-20021009123336271PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/EABEL-20021009123336251PDT.xml
/home/QUINE/PurchaseOrders/2002/Apr/PTUCKER-20021009123336191PDT.xml
...
132 rows selected.
親トピック: Oracle XML DBリポジトリ・データへのアクセス
21.12 Oracle XML DBの階層リポジトリ索引
Oracle XML DBでは、Oracle XML DBリポジトリの階層索引を使用して、リポジトリのパスに基づく問合せと、フォルダ限定の問合せのパフォーマンスを最適化します。これは、Oracleドメイン索引として実装されます。
従来のリレーショナル・データベースでは、パスベースのアクセスおよびフォルダ限定の問合せはCONNECT BY
操作を使用して実装します。このような問合せはコストがかかるため、パスベースのアクセスおよびフォルダ限定の問合せは、文書の数やフォルダ階層の深さが増すにつれて効率が下がる可能性があります。
この問題に対処するために、Oracle XML DBでは階層リポジトリ索引という新しい索引タイプが導入されました。これを使用すると、CONNECT BY
操作を使用しなくても、データベースでフォルダ限定の問合せを解決できます。したがって、Oracle XML DBでは、パスベースおよびフォルダ限定の問合せを効率的に実行できます。階層リポジトリ索引は、Oracleのドメイン索引として実装されます。これは、Oracle Text索引のサポートおよび他の多数の高度な索引タイプをデータベースに追加する場合の方法と同じです。
例21-18では、フォルダ限定の問合せで生成された実行計画の出力を示します。次に示すように、階層リポジトリ索引(XDBHI_IDX
)を使用して問合せを解決します。
例21-18 フォルダ限定の問合せの実行計画の出力
SELECT PATH
FROM PATH_VIEW
WHERE XMLCast(
XMLQuery(
'declare namespace ns="http://xmlns.oracle.com/xdb/XDBResource.xsd"; (: :)
$r/ns:Resource/ns:DisplayName'
PASSING RES AS "r" RETURNING CONTENT)
AS VARCHAR2(100))
LIKE 'S%'
AND under_path(RES, '/home/QUINE/PurchaseOrders/2002/Apr') = 1;
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------
Plan hash value: 2568289845
------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 17 | 3111 | 34 (6)| 00:00:01 |
| 1 | NESTED LOOPS | | 17 | 3111 | 34 (6)| 00:00:01 |
| 2 | NESTED LOOPS | | 17 | 2822 | 34 (6)| 00:00:01 |
| 3 | NESTED LOOPS | | 466 | 63842 | 34 (6)| 00:00:01 |
|* 4 | TABLE ACCESS BY INDEX ROWID | XDB$RESOURCE | 1 | 135 | 3 (0)| 00:00:01 |
|* 5 | DOMAIN INDEX | XDBHI_IDX | | | | |
| 6 | COLLECTION ITERATOR PICKLER FETCH| | | | | |
|* 7 | INDEX UNIQUE SCAN | XDB_PK_H_LINK | 1 | 28 | 0 (0)| 00:00:01 |
|* 8 | INDEX UNIQUE SCAN | SYS_C003900 | 1 | 17 | 0 (0)| 00:00:01 |
------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - filter(CAST("P"."SYS_NC00011$" AS VARCHAR2(100)) LIKE 'S%')
5 - access("XDB"."UNDER_PATH"(SYS_MAKEXML('8758D485E6004793E034080020B242C6',734,"XMLEXTRA"
,"XMLDATA"),'/home/QUINE/PurchaseOrders/2002/Apr',9999)=1)
7 - access("H"."PARENT_OID"=SYS_OP_ATG(VALUE(KOKBF$),3,4,2) AND
"H"."NAME"=SYS_OP_ATG(VALUE(KOKBF$),2,3,2))
8 - access("R2"."SYS_NC_OID$"=SYS_OP_ATG(VALUE(KOKBF$),3,4,2))
25 rows selected.
親トピック: Oracle XML DBリポジトリ・データへのアクセス
脚注の説明
脚注1:このグラフは、リポジトリ構造を定義するハード・リンクによって定義され、ハード・リンクを使用した循環は許可されません。ただし弱いリンクを使用して循環を導入できます。ハード・リンクおよび弱いリンクを参照してください。
脚注2:
リポジトリの/dbfs
フォルダでは、DBFSコンテンツにプロトコルでアクセスできます。DBFSの詳細は、Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイドを参照してください。