ヘッダーをスキップ
Oracle® XML DB開発者ガイド
11gリリース2 (11.2)
B70200-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

21 Oracle XML DBリポジトリのデータへのアクセス

この章では、FTP、HTTP(S)、WebDAVなどの標準プロトコルおよびその他のOracle XML DB Resource Application Program Interfaces (API)を使用して、Oracle XML DBリポジトリのデータにアクセスする方法を説明します。また、リポジトリ・データにアクセスおよび操作するためのSQLメカニズムとしてRESOURCE_VIEWおよびPATH_VIEWを使用する方法も説明します。様々なResource APIを使用したリポジトリ操作を比較する表を示します。

この章の内容は次のとおりです。

Oracle XML DBリポジトリの概要

Oracle XML DBリポジトリを使用すると、従来のリレーショナル・データベース構造ではなく、階層構造のデータベースにコンテンツを格納できます。

図21-1に、典型的なツリーとして表示されるOracle XML DBリポジトリのフォルダおよびファイルの階層構造の例を示します。ツリーの上部は、ルート・フォルダ(/)です。

図21-1 リポジトリの階層構造を示すフォルダ・ツリー

図21-1の説明が続きます
「図21-1 リポジトリの階層構造を示すフォルダ・ツリー」の説明


注意:

フォルダ/sysは、Oracle XML DBによって、システム定義のXML Schemaやアクセス制御リスト(ACL)などをメンテナンスするために使用されます。フォルダ/sysのデータを変更したり追加したりしないでください。

フォルダリングによって、アプリケーションでは、データベース・コンテンツがファイル・システムに格納されている場合と同様に、FTP、HTTP(S)およびWebDAVの標準プロトコルを使用して、データベース内の階層的に索引付けられたコンテンツにアクセスできます。リポジトリのフォルダおよびリソースに対するアクセス制御権限を設定できます。

この章では、標準プロトコルを使用して、Oracle XML DBリポジトリ・フォルダのデータにアクセスする方法の概要を説明します。Java、SQLおよびPL/SQLを使用してリポジトリ・オブジェクト階層にアクセスするために使用できるAPIについて説明します。

Oracle XML DBリポジトリ・リソースにアクセスする2つの方法

Oracle XML DBは、リソースにアクセスするための方法が2つあります。

  • ナビゲーションベースまたはパスベースのアクセス。リソースの階層索引が使用されます。各リソースは、階層内の場所を反映する、1つ以上の一意のパス名を持ちます。XPath式を使用して、任意のリポジトリ・リソースへナビゲートできます。

    リポジトリ・リソースは、データベース内の既存のXMLTypeオブジェクトへの参照として作成できます。このようなデータベース・オブジェクトには、XPathを使用してナビゲートできます。「リポジトリ・リソースへのナビゲーショナル・アクセスまたはパス・アクセス」を参照してください。

  • リポジトリへのSQLアクセス。リソースのプロパティおよびパス名を公開し、階層アクセス演算子をOracle XML DB Schemaへマップする特別のビューを使用することにより行います。「リポジトリ・リソースへの問合せベースのアクセス」を参照してください。


関連項目:


Uniform Resource Locator(URL)を使用して、Oracle XML DBリソースにアクセスできます。URLには、オブジェクトのホスト名、プロトコル情報、パス名およびリソース名が含まれます。

リポジトリの用語と提供されているリソース

Oracle XML DBリポジトリは、すべてのXML Schemaおよびデータベース・スキーマに対する一連のデータベース・オブジェクトです。これらのデータベース・オブジェクトはパス名にマップされます。リポジトリは、単一のルート・ノード(/)を持ち、リソースを連結、分岐した非環式脚注 1 で図式化したものです。図式内の各リソースは、関連付けられた1つ以上のパス名を持ちます。リポジトリは、指定されたリソースへの複数のリンクをサポートします。リポジトリは、ファイルではなくオブジェクトのファイル・システムと考えられます。

リポジトリの用語

次に、Oracle XML DBリポジトリで使用される用語について説明します。

  • リソース: リポジトリ階層内のオブジェクトまたはノード。リソースはURLで識別されます。

  • フォルダ: 他のリソースを含むことができるリソース。ディレクトリと呼ばれることもあります。

  • パス名: リソースへの絶対パスを表す階層形式の名前。リポジトリのルートを表すスラッシュ(/)と、それに続くスラッシュで区切られたゼロ個以上のパス要素で構成されています。「.」または「..」のみをパス要素とできませんが、それ以外の形であれば、ピリオド(.)をパス要素で使用できます。パス要素は、データベース・キャラクタ・セットの任意の文字で構成されます。ただし、スラッシュ(/)およびバックスラッシュ(\)の他、構成パラメータ/xdbconfig/sysconfig/invalid-pathname-charsを使用したOracle XML DBの構成ファイル/xdbconfig.xmlに指定された文字は除きます

  • リソース名(またはリンク名): 親フォルダ内のリソースの名前。この名前が、パス名の中で最も右端のパス要素となります。リソース名は、それらを直接含むフォルダ内で一意である必要があり、大/小文字は区別されます。

  • リソース・コンテンツ: リソースの本体、つまりデータ。これは、リソースをファイルとして処理してそのコンテンツを要求したときに取得されるものです。型は常にXMLTypeです。

  • XDBBinary要素: バイナリデータを含むXML要素。Oracle XML DB XML Schemaで定義されています。XDBBinary要素は、非構造化バイナリ・データがOracle XML DBにアップロードされたときに、リポジトリに格納されます。

  • アクセス制御リスト(ACL): 1つ以上の個別リソースへのアクセスを許可されたプリンシパル(ユーザーまたはロール)のセット。

表21-1に示すとおり、Oracle XML DBで使用される多くの用語には、他のコンテキストでの共通の同義語が存在します。

表21-1 Oracle XML DBリポジトリの用語の同義語

同義語 リポジトリの用語 用途

コレクション

フォルダ

WebDAV

ディレクトリ

フォルダ

オペレーティング・システム

権限

権限

権限

権利

権限

様々

WebDAVフォルダ

フォルダ

Webフォルダ

ロール

グループ

アクセス制御

リリース

バージョン

RCS、CVS

ファイル・システム

リポジトリ

オペレーティング・システム

階層

リポジトリ

様々

ファイル

リソース

オペレーティング・システム

バインド

リンク

WebDAV


提供されているファイルとフォルダ

次に、現行のOracle XML DBリポジトリで提供されるファイルおよびフォルダのリストを示します。これらの他に、必要に応じて、独自のフォルダまたはファイルを作成できます。

/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/XDBFolderListing.xsd
/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/log/ftplog.xsd
/sys/schemas/PUBLIC/xmlns.oracle.com/xdb/log/httplog.xsd
/sys/schemas/PUBLIC/xmlns.oracle.com/xdb/log/xdblog.xsd
/sys/schemas/PUBLIC/xmlns.oracle.com/xdb/stats.xsd
/sys/schemas/PUBLIC/xmlns.oracle.com/xdb/xdbconfig.xsd
/xdbconfig.xml

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リポジトリのデータを、アクセス可能な一連の表および索引に格納します。XML Schemaを登録し、Oracle XML DBによって表が生成されるように要求した場合、表はユーザーのデータベース・スキーマに作成されます。このため、それらを参照または変更することができます。他のユーザーは、表を参照する権限を付与されないかぎり、その表を参照できません。

生成された表の名前

生成された表の名前は、Oracle XML DBによって割り当てられ、ユーザーのXML Schema文書(またはデフォルトのXML Schema文書)のxdb:defaultTable属性を検索することによって取得できます。XML Schemaを登録する場合、Oracle XML DBによって作成されたデフォルト名でなく、ユーザー独自の表名を指定することもできます。表でXML記憶域が指定されている場合、文書はXML形式にエンコードされてから表内に格納されます。

リソース用の構造化記憶域の定義

リソース用の構造化記憶域を定義する必要があるアプリケーションでは、次のいずれかの操作で行います。

  • Oracle XML DBリソース・タイプをサブクラス化します。Oracle XML DBリソースのサブクラス化には、XDB$RESOURCE表に対する権限が必要です。

  • 参照可能な登録済XML Schemaに準拠するデータを格納します。

Oracle ASM仮想フォルダ

Oracle Automatic Storage Management(Oracle ASM)の仮想フォルダ/sys/asmには、前項の説明は当てはまりません。フォルダの内容は、Oracle ASMにより自動管理されるOracle ASMファイルとフォルダです。


関連項目:


パス名の解決

フォルダをそのフォルダの内容に関連付けるデータは、Oracle XML DBの階層リポジトリ索引によって管理されます。これによって、オペレーティング・システムのファイル・システムで使用されるディレクトリ・メカニズムと同様に、パス名を評価するための高速なメカニズムが提供されます。

フォルダであるリソースでは、要素ResourceContainer属性が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におけるリンクは、リポジトリ・リンクまたはドキュメント・リンクのいずれかです。リポジトリ・リンクには、ハード・リンクおよび弱いリンクがあります。ドキュメント・リンクについても、それらのターゲットがリポジトリ・リソースの場合は、ハード・リンクおよび弱いリンクがあります。これらの用語は、次の各項でさらに詳しく説明します。

リポジトリ・リンクとドキュメント・リンク

リソースの他に、フォルダ・リソースは他のリソース(ファイルまたはフォルダ)へのリンクも含むことができます。こうしたリポジトリ・リンク(フォルダ・リンクとも呼ばれる)は、XLink標準およびXInclude標準のリンクに相当するドキュメント・リンクと混同しないようにする必要があります。このドキュメント・リンクもOracle XML DBによりサポートされています。リポジトリ・リンクは、フォルダと子の間をナビゲートするためのリポジトリ・リソース間のリンクです。ドキュメント・リンクは、リポジトリ・リソースとは限らないドキュメント間の任意のリンクです。

リポジトリ・リンクは、リポジトリの階層関係を表しています。一方ドキュメント・リンクは、それらを使用するアプリケーションによりセマンティクスが派生する任意の関係を表しています。リポジトリ・リンクは、リポジトリの階層関係を表しているため、ファイル・システムに関連するプロトコルを使用してナビゲートできます。ドキュメント・リンクではこのようなことはできません。ドキュメント・リンクは、任意の関係を表すことができるため、リポジトリの関係も表すことが可能です。このようにリソースをターゲットとしているドキュメント・リンクはさらに、ハード・リンクおよび弱いリンクに分けることができます。


関連項目:

ドキュメント・リンクの詳細は、第23章「Oracle XML DBでのXLinkおよびXIncludeの使用」を参照してください。

ハード・リンクおよび弱いリンク

リポジトリ・リソースをターゲットとしているリンクには、ハード・リンク弱いリンクがあります。ハード・リンクおよび弱いリンクはともに、物理データへの参照(またはポインタ)であり、(内部的な)リポジトリ・リソースの識別子です。他のリンクのシンボリック名やパスを指すものではありません。これらのターゲットは、リンクが作成される時点で解決されます。ハード・リンクおよび弱いリンクは、リソースの識別子を直接指すので、ターゲットは必ず必要です。そのかわり、ターゲットの移動や名前の変更が行われても、有効性は保持されます。ハード・リンクおよび弱いリンクの作成や削除には、同じ権限が必要です。

ハード・リンクと弱いリンクの違いは、ターゲット・リソースの削除に関連するものです。ターゲット・リソースは、ハード・リンクに対して従属関係にあります。つまり、ハード・リンクのターゲットである間は削除できません。ハード・リンクを削除すると、次のいずれも成り立つ場合、リンクのターゲットであるリソースも削除されます。

  • リソースがバージョニングされていません。

  • 削除するハード・リンクがそのリソースに対する最後の(したがって唯一の)ハード・リンクです。

弱いリンクには、リソースに対するこうした拘束力はありません。つまり、弱いリンクのターゲットであるリソースは(ハード・リンクのターゲットでないかぎり)削除できます。このため弱いリンクは、アクセスの頻度が高いリソースへのショートカットとして使用でき、それらのリソースの削除に影響しません。

ただし、弱いリンクには逆方向の依存性があります。弱いリンク(1つ以上)のターゲットになっているリソースを削除すると、それらの弱いリンクも自動的に削除されます。この意味でも、弱いリンクは参照先を失います。ハード・リンクおよび弱いリンクはいずれも、参照整合性を伴っています。つまり、リンクが存在すれば、そのターゲットも存在します。

ハード・リンクおよび弱いリンクには、この他にも違いがあります。祖先のフォルダへのハード・リンクは、循環を導入するため、許可されません。弱いリンクにはこのような制約はありません。弱いリンクは任意のフォルダをターゲットとでき、場合によっては循環が作成されます。Oracle XML DBリポジトリの(非環式)構造は、一連のハード・リンクによって定義されます。弱いリンクが表しているのは、その基本構造の上に追加されたマッピングです。

リポジトリ・リンク・タイプを判断するためにリポジトリ・パス・ビューPATH_VIEWに問合せを行うことができます。リンク・タイプはリンク情報に含まれています。ルート要素LINKの子要素LinkTypeに含まれるこの情報は、PATH_VIEWXMLTypeLINKに表示されます。例21-1に、これを示します。また、イベント・ハンドラ(LinkInLinkToUnlinkIn、またはUnlinkFrom)でコールバックgetLink()を使用して、リポジトリ・リンク・タイプを判断できます。

例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

関連項目:


フォルダ階層の情報がない状況での弱いリンクの作成

ある同僚が所有しているファイル・リソースを閲覧するとします。そのリソースにアクセスしそれを閲覧できるようにする場合、そのファイルの祖先のフォルダすべてに関して権限<xdb:resolve>が付与されていないかぎり、そのリソースへのハード・リンクの作成はできません。この権限が付与されていれば、その同僚が所有するフォルダの名前、およびそのターゲット・リソースまでの階層構造をすべて知ることができます。

ただし、弱いリンクは基本的に、一連のハード・リンクによって定義されている実際のリポジトリ構造の上に追加されたマッピングを表しているため、リソースに対して、そのOIDを使用すれば、完全な名前のパス(URL)がなくても弱いリンクを作成できます。つまり、同僚が決めたファイルへのOIDパスを名前のパスのかわりに受け取れば、そのOIDパスを使用してドキュメントへの弱いリンクを作成できます。例21-2および例21-3に、これを示します。

例21-2は、ファイル・リソース/home/QUINE/purchaseOrder.xmlのOIDパスを出力したものです。ユーザーquineはこれを使用してリソースへのOIDパスを取得し、そのパスをユーザーcurryへ送信できます。またユーザーcurryは、リソースへの弱いリンクを作成できます(例21-3)。

例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.createOIDPath(resoid)
  DBMS_OUTPUT.put_line(oidpath);
END;

例21-3では、ユーザーcurryが、quinePurchaseOrder.xmlという名前の弱いリンクをフォルダ/home/CURRY内に作成します。リンクのターゲットは、URL /home/QUINE/purchaseOrder.xmlに対応するOIDパスです。ユーザーcurryは、ユーザーquineには参照可能なリポジトリの構造を認識する必要はありません。

例21-3 OIDパスを使用した弱いリンクの作成

CALL DBMS_XDB.Link(/sys/oid/1BDCB46477B59C20E040578CCE0623D3
                   '/home/CURRY', 'quinePurchaseOrder.xml',
                   DBMS_XDB.LINK_TYPE_WEAK);

複数のハード・リンクに関する制限

ハード・リンクの作成を制限し、フォルダまたはファイル(またはその両方)へのハード・リンクの複数作成を許可しない方が有効な場合があります。特に、ファイル・リソースへの複数のハード・リンクの作成を許可し、フォルダ・リソースへの複数のハード・リンクの作成を許可しないことで、UNIXやLinuxなどのファイル・システムに近い動作が実現されます。これにより、事実上、各ファイル・リソースに対して正規のハード・リンクのパスが一意に作成され、アプリケーションの設計を単純化できます。さらに、リソースに対して複数のハード・リンクを作成しないことで、問合せのパフォーマンスを向上できます。

構成ファイルxdbconfig.xmlで次のブール型パラメータを使用して、複数のハード・リンクの作成を回避するよう構成できます。各パラメータのデフォルト値はtrueで、複数のハード・リンクを作成できます。

  • folder-hard-links: falseの場合、フォルダ・リソースへの複数のハード・リンクの作成を回避します。

  • non-folder-hard-links: falseの場合、ファイル・リソースへの複数のハード・リンクの作成を回避します。

リポジトリ・リソースへのナビゲーショナル・アクセスまたはパス・アクセス

Oracle XML DBリポジトリのフォルダは、多くのオペレーティング・システムにより使用されている標準的なプロトコルをサポートしています。これによって、リポジトリ・フォルダは、サポートされているオペレーティング・システム環境で、ネイティブ・フォルダ(ディレクトリ)と同様に機能します。たとえば、次の操作を実行できます。

  • Windowsエクスプローラを使用して、Windows NTファイル・システムの他のディレクトリまたはリソースにアクセスする場合と同じ方法で、Oracle XML DBのフォルダおよびリソースを開いたり、アクセスできます(図21-2を参照してください)。

  • Webフォルダを参照する場合などは、Internet ExplorerブラウザからHTTP(S)またはWebDAVを使用して、Oracle XML DBリポジトリ・データにアクセスできます(図21-3を参照してください)。図21-3に、URL http://xdbdemo:8080/にアクセスしたWebブラウザを示しています。接続先サーバーはxdbdemoで、HTTPポート番号は8080です。


関連項目:

HTTPポート番号の構成の詳細は、「プロトコル・サーバーのパラメータの構成」を参照してください。

図21-2 WindowsエクスプローラでのOracle XML DBのフォルダ

図21-2の説明が続きます
「図21-2 WindowsエクスプローラでのOracle XML DBのフォルダ」の説明

図21-3 HTTPやWebDAVおよびナビゲーショナル・アクセスを使用した、IEブラウザからリポジトリ・データへのアクセス: Webフォルダの参照

図21-3の説明が続きます
「図21-3 HTTPやWebDAVおよびナビゲーショナル・アクセスを使用した、IEブラウザからリポジトリ・データへのアクセス: Webフォルダの参照」の説明

インターネット・プロトコルを使用したOracle XML DBリソースへのアクセス

Oracle Net Servicesでは、データベース・リソースのアクセス方法が提供されます。インターネット・プロトコルをサポートしているOracle XML DBでは、データベース・リソースにアクセスする別の方法が提供されます。

Oracle XML DBのプロトコル・アクセスを使用できる場所

Oracle Net Servicesは、レコード指向のデータに対して最適化されています。インターネット・プロトコルは、バイナリ・ファイルやXMLテキスト・ドキュメントなどのストリーム指向のデータ用に設計されています。次のような場合は、Oracle Net ServicesよりOracle XML DBのプロトコル・アクセスを使用することをお薦めします。

  • ファイル・システムのようなデータベースを使用した、ファイル指向アプリケーションからデータベースへの直接アクセス

  • 均一なデータ・アクセス方法(MS SQL Server、Exchange、Notes、多くのXMLデータベース、株価情報サービス、ニュース配信を含む多くのデータ・サーバーによってサポートされているHTTPを介したXMLなど)を必要とする異機種間アプリケーション・サーバー環境

  • XMLテキスト形式のデータを必要とするアプリケーション・サーバー環境

  • 多くのアプリケーション処理を必要とせずに、クライアント側のXSLを使用して、データグラムをフォーマットするWebアプリケーション

  • データベース内で実行するJavaサーブレットを使用するWebアプリケーション

  • XML指向のストアド・プロシージャに対するWebアクセス

プロトコル・アクセスの使用

プロトコルを使用したOracle XML DBリソースへのアクセスは次のように行われます。

  1. 接続オブジェクトが確立されます。また、プロトコルによってリクエストの一部が読み取られる場合があります。

  2. プロトコルによって、認証済のユーザーが既存のセッションを再利用できるか、または接続を再認証する必要があるか(通常はこちら)が決定されます。

  3. 既存のセッションがセッション・プールから取り出されるか、または新しいセッションが作成されます。

  4. 認証が行われず、リクエストがHTTPのgetまたはheadの場合、セッションはANONYMOUSユーザーとして実行されます。セッションがすでにANONYMOUSユーザーとして認証されている場合は、そのまま既存のセッションを再利用できます。認証が行われている場合は、データベースの再認証ルーチンを使用して、接続が認証されます。

  5. リクエストが解析されます。

  6. (HTTPのみ)要求されたパス名がサーブレットにマップされる場合、サーブレットはJava仮想マシン(VM)を使用して起動されます。サーブレット・コードがレスポンス・ストリームに対するレスポンスを書き出すか、またはXMLTypeインスタンスにレスポンスを書き出すように要求します。

Oracle XML DBリソースの取出し

プロトコルがリソースの取出しを示した場合、リソースへのパス名が解決されます。フェッチされているリソースは、常にXMLとして配信されます。ただし、XMLバイナリ・データ型として定義済の要素であるXDBBinary要素を含むリソースで、そのコンテンツがRAWフォームで配信されるものは除きます。

Oracle XML DBリソースの格納

プロトコルがリソースを格納する必要があることを示した場合、Oracle XML DBは、文書のファイル名の拡張子が.xml.xsl.xsdなどであることを確認します。文書がXMLである場合、事前解析が実行されます。その場合、文書のルート要素のXML schemaLocationおよびnamespaceを判断するために十分なリソースが読み取られます。登録されたスキーマが、schemaLocation URLに配置されていて、現在の文書のルート要素に対する定義を持っている場合、その要素に対して指定されたデフォルト表を使用して、リソースのコンテンツが格納されます。

インターネット・プロトコルおよびXMLTypeの使用: ストリームへのXMLTypeの直接書込み

Oracle XML DBは、Java XMLTypeメソッドwriteToStream()を使用することによって、XMLTypeレベルでインターネット・プロトコルをサポートします。このメソッドはネイティブに実装され、XMLTypeデータをプロトコルのリクエスト・ストリームに直接書き込みます。これによって、Javaデータ型を介したデータベース・データの変換およびJavaオブジェクトの作成に伴うJava VMの実行コストとオーバーヘッドが回避され、パフォーマンスが大幅に向上します。パフォーマンスをさらに向上させるには、Javaコードが多くのリーフ要素を検索せずにルートに近いXML要素ツリーのみを処理し、作成するJavaオブジェクトの数が相対的に少なくなるようにします。

プロトコルとリソースAPIを使用したOracle ASMファイルへのアクセス(DBA用)

Oracle Automatic Storage Management(Oracle ASM)を使用すると、データベース・ファイルはディスク・グループに整理され、管理が簡潔になるとともに、データベースのミラー化やI/Oバランシングなどの利用が可能になります。

プロトコルやリソースAPI(DBMS_XDBなど)を使用したリポジトリ・アクセスは、Oracle ASMのファイルも対象にします。これらのファイルには、仮想リポジトリ・フォルダ/sys/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-4に示します。ただし、図を簡潔にするために、エイリアス用に作成されるディレクトリは省略しています。

図21-4 Oracle ASM仮想フォルダの階層

図21-4の説明が続きます
「図21-4 Oracle ASM仮想フォルダの階層」の説明

仮想フォルダ/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仮想フォルダの操作はデータベース管理者による使用を想定したもので、開発者用ではありません。


関連項目:


リポジトリ・リソースへの問合せベースのアクセス

SQLによるOracle XML DBリポジトリへのアクセスを可能にするビューは2つあります。

  • PATH_VIEW

  • RESOURCE_VIEW

表21-2に、PATH_VIEWRESOURCE_VIEWの違いを示します。

表21-2 PATH_VIEWとRESOURCE_VIEWの違い

PATH_VIEW RESOURCE_VIEW

リンク・プロパティを含みます。

リンク・プロパティを含みません。

リポジトリの一意の各パスに1つの行を持ちます。

リポジトリの各リソースに1つの行を持ちます。


これら2つのリポジトリ・ビュー内の行の型はXMLTypeです。RESOURCE_VIEWでは、リソースに関連付けられる単一のパスは、そのリソースを参照している可能なパスの中から任意に選択されます。Oracle XML DBにはunder_pathなどのSQL関数が用意されており、アプリケーションから特定のフォルダ内に(再帰的に)含まれているリソースを検索したり、リソースの深さを取得したりできます。

リポジトリ・ビュー上でDMLを使用すると、リソースのプロパティおよびコンテンツの挿入、名前の変更、削除および更新ができます。その他の操作(既存のリソースへのリンクの作成など)に対しては、プログラムAPIを使用する必要があります。


関連項目:


リポジトリ・リソースへのサーブレット・アクセス

Oracle XML DBは、JavaサーブレットAPIバージョン2.2を実装します。ただし、次の例外があります。

  • すべてのサーブレットが配布可能である必要があります。これらのサーブレットは、異なる仮想マシンで実行可能である必要があります。

  • WARおよびweb.xmlファイルはサポートされていません。Oracle XML DBはこのファイルのXML構成のサブセットをサポートしています。XSLスタイルシートをweb.xmlに適用して、サーブレットの定義を生成できます。外部ツールを使用して、web.xmlファイルに定義されたサーブレットのデータベース・ロールを作成する必要があります。

  • JavaServer Pages(JSP)サポートをサーブレットとしてインストールし、手動で構成できます。

  • HTTPSessionおよび関連するクラスはサポートされません。

  • 1つのサーブレット・コンテキスト(1つのWebアプリケーション)のみがサポートされます。

リポジトリ・リソースに対する操作

Oracle XML DBリポジトリに格納されているデータは、次のいずれかを使用して操作できます。

  • 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は、各操作に必要なリソース権限も示しています。表にリストされている権限に加え、操作により影響を受ける各リソースに対しては権限xdb:read-propertiesが必要です。また、その操作のターゲットとなるリソースに加え、リソースの親フォルダに影響を与える操作を実行するには、その親フォルダに対しても権限xdb:read-propertiesが必要です。たとえば、あるリソースに対する削除操作は、削除するリソースおよびその親フォルダに影響を及ぼします。したがってこの場合は、対象のリソースおよびその親フォルダに対して権限xdb:read-propertiesが必要です。

表21-3 Oracle XML DBリポジトリへのアクセス: APIオプション

データ・アクセス SQLおよびPL/SQL プロトコル 必要なリソース権限 JCRのサポート

リソースの作成

DBMS_XDB.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:PUT;

FTP: PUT

親フォルダに対するDAV::bind

サポート

リソース・コンテンツの更新

UPDATE RESOURCE_VIEW
SET RES =
updateXML(
  RES,
  '/Resource/Contents/text/text()',
  'NEW text',
  'xmlns =
"http://xmlns.oracle.com/xdb/XDBResource.xsd')  
WHERE equals_path(RES,
                  '/public/T1/copy1.txt') = 1;

HTTP: PUT;

FTP: PUT

リソースに対するxdb:write-content

サポート

リソース・プロトコルの更新

UPDATE RESOURCE_VIEW
SET RES =
updateXML(
  RES,
  '/Resource/DisplayName/text()', 
  'NewName1.txt',
  'xmlns =
"http://xmlns.oracle.com/xdb/XDBResource.xsd')
WHERE equals_path(RES,
                  '/public/T1/copy1.txt') = 1;

WebDAV:

PROPPATCH;

リソースに対するDAV::write-properties

サポート

リソースACLの更新

EXEC DBMS_XDB.setACL(
  '/public/T1/copy1.txt',
  '/sys/acls/all_owner_acl.xml');

適用なし

リソースに対するDAV::write-acl

非サポート

リソースのリンク解除(最新のリンクの削除)

EXEC DBMS_XDB.deleteResource()
DELETE FROM RESOURCE_VIEW
  WHERE equals_path(RES, path) > 0

HTTP:

DELETE;

FTP:delete

親フォルダに対するDAV::unbind

リソースに対するxdb:unlink-from

サポート

リソースへのすべてのリンクの強制削除

DBMS_XDB.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:

quote

rm_rf

resource

すべての親フォルダに対するDAV::unbind

リソースに対するxdb:unlink-from

サポート

リソースの移動

UPDATE PATH_VIEW
  SET path = '/public/T1/copy2.txt'
  WHERE equals_path(RES,
                    '/public/T1/copy1.txt')
        = 1;

WebDAV:

MOVE;

FTP: rename

ソース親フォルダに対するDAV::unbind

ターゲット親フォルダに対するDAV::bind

リソースに対するxdb:unlink-fromおよびxdb:link-to

サポート

リソースのコピー

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:

COPY;

新規コピー:

ターゲット親フォルダに対するDAV::bind

リソースに対するDAV::read

上書きコピー(置換):

リソースに対するDAV::read

既存のターゲット・リソースに対するDAV::write-propertiesおよびDAV::write-content

サポート

既存リソースへのハード・リンクの作成

EXEC DBMS_XDB.link('/public/T1/copy3.txt', 
                   '/public/T1',
                   'myhardlink');

適用なし

親フォルダに対するDAV::bind

リソースに対するxdb:link-to

非サポート

既存リソースへの弱いリンクの作成

EXEC DBMS_XDB.link('/public/T1/copy3.txt', 
                   '/public/T1',
                   'myweaklink',
                   DBMS_XDB.LINK_TYPE_WEAK);

適用なし

親フォルダに対するDAV::bind

リソースに対するxdb:link-to

非サポート

リソースの所有者の変更

UPDATE RESOURCE_VIEW
  SET RES =
    updateXML(
      RES,
      '/Resource/Owner/text()',
      'U2')
  WHERE equals_path(RES, '/public/T1/copy3.txt')
        = 1;

適用なし

リソースに対するDAV::take-ownership

サポート

リソース・コンテンツのバイナリ表現またはテキスト表現の取得

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: GET;

FTP: get

リソースに対するxdb:read-contents

サポート

リソース・コンテンツのXMLType表現の取得

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;

適用なし

リソースに対するxdb:read-contents

非サポート

リソース・プロトコルの取得

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:

PROPFIND

(depth = 0);

リソースに対するxdb:read-properties

サポート

フォルダ内のリソースのリスト

SELECT PATH FROM PATH_VIEW
  WHERE under_path(res, '/public/T1') = 1;

WebDAV:

PROPFIND

(depth = 0);

フォルダに対するxdb:read-contents

サポート

フォルダの作成

Call DBMS_XDB.createFolder('/public/T2');

WebDAV:

MKCOL;

FTP: mkdir

親フォルダに対するDAV::bind

サポート

フォルダのリンク解除

DBMS_XDB.deleteResource('/public/T2')

HTTP:

DELETE;

FTP: rmdir

親フォルダに対するDAV::unbind

リソースに対するxdb:unlink-from

サポート

フォルダおよびそのフォルダに対するすべてのリンクの強制削除

DBMS_XDB.deleteResource(
  '/public/T2',
  DBMS_XDB.DELETE-RECURSIVE_FORCE);

適用なし

すべての親フォルダに対するDAV::unbind

フォルダ・リソースに対するxdb:unlink-from

サポート

行ロックされたリソースの取得

SELECT ... 
  FROM RESOURCE_VIEW
  FOR UPDATE ...;

適用なし

リソースに対するxdb:read-propertiesおよびxdb:read-contents

非サポート

リソースへのWebDAVロックの追加

EXEC DBMS_XDB.LockResource('/public/T1/res.xml',
                           TRUE,
                           TRUE);

WebDAV:

LOCK;

FTP:

quote lock

リソースに対するDAV::write-properties

非サポート

WebDAVロックの削除

DECLARE...
BEGIN 
  DBMS_XDB.GetLockToken('/public/T1/res.xml', 
                        locktoken); 
  DBMS_XDB.UnlockResource('/public/T1/res.xml',
                          locktoken);
END; 

WebDAV: UNLOCK;

FTP:

quote unlock

リソースに対するDAV::write-propertiesおよびDAV::unlock

非サポート

ファイル・リソースのチェックアウト

EXEC DBMS_XDB_VERSION.checkOut(
  '/public/T1/res.xml');

適用なし

リソースに対するDAV::write-properties

非サポート

ファイル・リソースのチェックイン

EXEC DBMS_XDB_VERSION.checkIn(
  '/public/T1/res.xml');

適用なし

リソースに対するDAV::write-properties

非サポート

ファイル・リソースのチェックアウトのキャンセル

EXEC DBMS_XDB_VERSION.unCheckOut(
  '/public/T1/res.xml');

適用なし

リソースに対するDAV::write-properties

非サポート

ファイル・リソースのバージョニング

EXEC DBMS_XDB_VERSION.makeVersioned(
  '/public/T1/res.xml');

適用なし

リソースに対するDAV::write-properties

非サポート

イベント・ハンドラの削除

DBMS_XEVENT.remove

適用なし

リソースまたは親フォルダ(コンテキストによる)に対するxdb:write-config

非サポート

変更のコミット

COMMIT;

各リクエスト後の自動コミット

適用なし

サポート

変更のロールバック

ROLLBACK;

適用なし

適用なし

サポート



関連項目:




脚注の凡例

脚注1: グラフは、リポジトリ構造を定義するハード・リンクによって定義され、ハード・リンクを使用した循環は許可されません。ただし弱いリンクを使用して循環を導入できます。「ハード・リンクおよび弱いリンク」を参照してください。