この章では、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 Foldering機能を使用すると、従来のリレーショナル・データベース構造ではなく、階層構造のデータベースにコンテンツを格納できます。
図21-1に、典型的なツリーとして表示されるOracle XML DBリポジトリのフォルダおよびファイルの階層構造の例を示します。ツリーの上部は、ルート・フォルダ(/)です。
フォルダリングによって、アプリケーションでは、データベース・コンテンツがファイル・システムに格納されている場合と同様に、FTP、HTTP(S)およびWebDAVの標準プロトコルを使用して、データベース内の階層的に索引付けられたコンテンツにアクセスできます。
この章では、標準のプロトコルを使用して、Oracle XML DBリポジトリ・フォルダのデータにアクセスする方法の概要を説明します。Java、SQLおよびPL/SQLを使用してリポジトリ・オブジェクト階層にアクセスするために使用できるAPIについて説明します。
|
注意: フォルダ/sysは、Oracle XML DBによって、システム定義のXML Schemaやアクセス制御リスト(ACL)などをメンテナンスするために使用されます。フォルダ/sysのデータを変更したり追加したりしないでください。 |
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で使用される多くの用語には、他のコンテキストで使用される共通の同義語が存在します。
次に、現行の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リポジトリ・リソースは、XMLスキーマXDBResource.xsdに準拠します。リソースの要素には、作成日、変更日、WebDAVロック、所有者、ACL、言語、キャラクタ・セットなどのWebDAV定義のプロパティを永続的に格納するために必要な要素が含まれます。
リソース索引のContents要素
リソース索引には、リソースのコンテンツを含む、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 XML DBの階層リポジトリ索引によって管理されます。これによって、オペレーティング・システムのファイル・システムで使用されるディレクトリ・メカニズムと同様に、パス名を評価するための高速なメカニズムが提供されます。
フォルダであるリソースでは、Container属性がTRUEに設定されます。
フォルダ内のリソース名を解決するには、現行のユーザーに次の権限が必要です。
フォルダに対するresolve権限
フォルダのリソースに対するread-properties権限
ユーザーがこれらの権限を所有していない場合、access deniedエラーが発生します。そのリソースに対するread-properties権限が拒否されている場合、フォルダのリストおよびその他の問合せによって行は戻されません。
|
注意: パス名の解決におけるエラー処理では、ファイル・システムとの互換性に対して、無効なリソース名とフォルダでないリソースが区別されます。Oracle XML DBリソースは、SQLを使用してOracle XML DBリポジトリの外部からアクセスできるため、リソースを含むフォルダの読取りアクセスを制限しても、そのリソースへの読取りアクセスは制限されません。 |
フォルダかファイルかを問わず、Oracle XML DBの特定のリソースに対するアクセスを制御できます。
|
関連項目:
|
Oracle XML DBにおけるリンクは、リポジトリ・リンクまたはドキュメント・リンクのいずれかです。リポジトリ・リンクには、ハード・リンクおよび弱いリンクがあります。ドキュメント・リンクについても、それらのターゲットがリポジトリ・リソースの場合は、ハード・リンクおよび弱いリンクがあります。これらの用語は、次の各項でさらに詳しく説明します。
リソースの他に、フォルダ・リソースは他のリソース(ファイルまたはフォルダ)へのリンクも含むことができます。こうしたリポジトリ・リンク(フォルダ・リンクとも呼ばれる)は、XLink標準およびXInclude標準のリンクに相当するドキュメント・リンクと混同しないようにする必要があります。このドキュメント・リンクもOracle XML DBによりサポートされています。リポジトリ・リンクは、フォルダと子の間をナビゲートするためのリポジトリ・リソース間のリンクであるのに対し、ドキュメント・リンクは、リポジトリ・リソースとは限らないドキュメント間の任意のリンクです。
リポジトリ・リンクは、リポジトリの階層関係を表しています。一方ドキュメント・リンクは、それらを使用するアプリケーションによりセマンティクスが派生する任意の関係を表しています。リポジトリ・リンクは、リポジトリの階層関係を表しているため、ファイル・システムに関連するプロトコルを使用してナビゲートできますが、ドキュメント・リンクではこのようなことはできません。ドキュメント・リンクは、任意の関係を表すことができるため、リポジトリの関係も表すことが可能です。このようにリソースをターゲットとしているドキュメント・リンクはさらに、ハード・リンクおよび弱いリンクに分けることができます。
リポジトリ・リソースをターゲットとしているリンクには、ハード・リンクと弱いリンクがあります。ハード・リンクおよび弱いリンクはともに、物理データへの参照(またはポインタ)であり、(内部的な)リポジトリ・リソースの識別子です。したがって、他のリンクのシンボリック名やパスを指すものではありません。これらのターゲットは、リンクが作成される時点で解決されます。ハード・リンクおよび弱いリンクは、リソースの識別子を直接指すので、ターゲットは必ず必要です。そのかわり、ターゲットの移動や名前の変更が行われても、有効性は保持されます。ハード・リンクおよび弱いリンクの作成や削除には、同じ権限が必要です。
ハード・リンクと弱いリンクの違いは、ターゲット・リソースの削除に関連するものです。ターゲット・リソースは、ハード・リンクに対して従属関係にあります。つまり、ハード・リンクのターゲットである間は削除できません。ハード・リンクを削除すると、次のいずれも成り立つ場合、リンクのターゲットであるリソースも削除されます。
リソースがバージョニングされていません。
削除するハード・リンクがそのリソースに対する最後の(したがって唯一の)ハード・リンクです。
弱いリンクには、リソースに対するこうした拘束力はありません。つまり、弱いリンクのターゲットであるリソースは(ハード・リンクのターゲットでないかぎり)削除できます。このため弱いリンクは、アクセスの頻度が高いリソースへのショートカットとして使用でき、それらのリソースの削除に影響しません。
ただし、弱いリンクには逆方向の依存性があります。弱いリンク(1つ以上)のターゲットになっているリソースを削除すると、それらの弱いリンクも自動的に削除されます。この意味でも、弱いリンクは参照先を失います。ハード・リンクおよび弱いリンクはいずれも、参照整合性を伴っています。つまり、リンクが存在すれば、そのターゲットも存在します。
ハード・リンクおよび弱いリンクには、この他にも違いがあります。祖先のフォルダへのハード・リンクは、循環を導入するため、許可されません。弱いリンクにはこのような制約はありません。弱いリンクは任意のフォルダをターゲットとでき、場合によっては循環が作成されます。Oracle XML DBリポジトリの(非環式)構造は、一連のハード・リンクによって定義されます。弱いリンクが表しているのは、その基本構造の上に追加されたマッピングです。
リポジトリ・リンク・タイプを判断するためにリポジトリ・パス・ビューPATH_VIEWに問合せを行うことができます。リンク・タイプはリンク情報に含まれています。ルート要素LINKの子要素LinkTypeに含まれるこの情報は、PATH_VIEWのXMLType列LINKに表示されます。例21-1に、これを示します。また、イベント・ハンドラ(LinkIn、LinkTo、UnlinkIn、またはUnlinkFrom)でコールバック関数getLink()を使用して、リポジトリ・リンク・タイプを判断できます。
例21-1 PATH_VIEWへの問合せによるリンク・タイプの判断
SELECT RESID, extractValue(LINK, '/LINK/LinkType') 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 リソースのOIDパスの取得
この例は、ファイル・リソース/home/QUINE/purchaseOrder.xmlのOIDパスを出力したものです。ユーザーquineはこれを使用してリソースへのOIDパスを取得し、そのパスをユーザーcurryへ送信できます。またユーザーcurryは、リソースへの弱いリンクを作成できます(例21-3)。
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 OIDパスを使用した弱いリンクの作成
ここでは、ユーザーcurryが、quinePurchaseOrder.xmlという名前の弱いリンクをフォルダ/home/CURRY内に作成します。リンクのターゲットは、URL/home/QUINE/purchaseOrder.xmlに対応するOIDパスです(例21-3)。ユーザーcurryは、ユーザーquineには参照可能なリポジトリの構造を認識する必要はありません。
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は、リソースにアクセスするための方法が2つあります。
ナビゲーションベースまたはパスベースのアクセス:リソースの階層索引が使用されます。各リソースは、階層内の場所を反映する、1つ以上の一意のパス名を持ちます。XPath式を使用して、任意のリポジトリ・リソースへナビゲートできます。
リポジトリ・リソースは、リポジトリ内に物理的に存在しているか、またはデータベース内の既存のXMLTypeオブジェクトへの参照として作成できます。特に後者の場合は、XPathを使用して、そのような任意のデータベース・オブジェクトへナビゲートできます。「ナビゲーショナル・アクセスまたはパス・アクセス」を参照してください。
リポジトリへのSQLアクセスリソースのプロパティおよびパス名を公開し、階層アクセス演算子をOracle XML DB Schemaへマップする特別のビューを使用します。「問合せベースのアクセス」を参照してください。
|
関連項目:
|
Uniform Resource Locator(URL)を使用して、Oracle XML DBリソースにアクセスできます。URLには、オブジェクトのホスト名、プロトコル情報、パス名およびリソース名が含まれます。
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です。
図21-3 HTTPやWebDAVおよびナビゲーショナル・アクセスを使用した、IEブラウザからリポジトリ・データへのアクセス: Webフォルダの参照

Oracle Net Servicesでは、データベース・リソースのアクセス方法が提供されます。インターネット・プロトコルをサポートしている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リソースへのアクセスは次のように行われます。
接続オブジェクトが確立されます。また、プロトコルによってリクエストの一部が読み取られる場合があります。
プロトコルによって、認証済のユーザーが既存のセッションを再利用できるか、または接続を再認証する必要があるか(通常はこちら)が決定されます。
既存のセッションがセッション・プールから取り出されるか、または新しいセッションが作成されます。
認証が行われず、リクエストがHTTPのgetまたはheadの場合、セッションはANONYMOUSユーザーとして実行されます。セッションがすでにANONYMOUSユーザーとして認証されている場合は、そのまま既存のセッションを再利用できます。認証が行われている場合は、データベースの再認証ルーチンを使用して、接続が認証されます。
リクエストが解析されます。
(HTTPのみ)要求されたパス名がサーブレットにマップされる場合、サーブレットはJava仮想マシン(VM)を使用して起動されます。サーブレット・コードがレスポンス・ストリームに対するレスポンスを書き出すか、またはXMLTypeインスタンスにレスポンスを書き出すように要求します。
プロトコルがリソースの取出しを示した場合、リソースへのパス名が解決されます。フェッチされているリソースは、常にXMLとして配信されます。ただし、XMLバイナリ・データ型として定義済の要素であるXDBBinary要素を含むリソースで、そのコンテンツがRAWフォームで配信されるものは除きます。
プロトコルがリソースを格納する必要があることを示した場合、Oracle XML DBは、文書のファイル名の拡張子が.xml、.xsl、.xsdなどであることを確認します。文書がXMLである場合、事前解析が実行されます。その場合、文書のルート要素のXML schemaLocationおよびnamespaceを判断するために十分なリソースが読み取られます。登録されたスキーマが、schemaLocation URLに配置されていて、現在の文書のルート要素に対する定義を持っている場合、その要素に対して指定されたデフォルト表を使用して、リソースのコンテンツが格納されます。
Oracle XML DBは、XMLTypeに対してJavaメソッドwriteToStream()を使用することによって、XMLTypeレベルでインターネット・プロトコルをサポートします。このメソッドはネイティブに実装され、XMLTypeデータをプロトコルのリクエスト・ストリームに直接書き込みます。これによって、Javaデータ型を介したデータベース・データの変換およびJavaオブジェクトの作成に伴うJava VMの実行コストとオーバーヘッドが回避され、パフォーマンスが大幅に向上します。パフォーマンスをさらに向上させるには、Javaコードが多くのリーフ要素を検索せずにルートに近いXML要素ツリーのみを処理し、作成するJavaオブジェクトの数が相対的に少なくなるようにします。
自動ストレージ管理(ASM)を使用すると、データベース・ファイルはディスク・グループに整理され、管理が簡潔になるとともに、データベースのミラー化やI/Oバランシングなどの利用が可能になります。
プロトコルやリソースAPI(such as DBMS_XDB)を使用したリポジトリ・アクセスは、自動ストレージ管理(ASM)のファイルも対象にします。ASMファイルには、仮想リポジトリ・フォルダ/sys/asmからアクセスします。ただし、このアクセスはDBA用に予約されたもので、開発者の使用は想定していません。
この種のアクセスの典型的な使用方法は、データベース・インスタンス相互の間でのASMファイルのコピーです。たとえばDBAでは、WebDAVプロトコルを使用してGraphical User Interface(GUI)でフォルダ/sys/asmを表示し、データ・ポンプ・ダンプセットのコピーを、ASMディスク・グループからオペレーティング・システムのファイル・システムにドラッグ・アンド・ドロップすることができます。
仮想フォルダ/sys/asmは、デフォルトではOracle XML DBのインストール時に作成されます。データベースがASMを使用するよう構成されていない場合は、フォルダは空で、フォルダに関する操作は許可されません。
フォルダ/sys/asmには、ASMの完全修飾ファイル名の構造で定義された階層に従うフォルダやサブフォルダが含まれます。
マウントされている各ディスク・グループに対応するサブフォルダが含まれます。
ディスク・グループ・フォルダには、そのディスク・グループを使用するデータベースに対応するサブフォルダが含まれます。ディスク・グループ・フォルダにはさらに、管理者によって作成されたASMエイリアスに対応するファイルやフォルダが含まれることがあります。
データベース・フォルダには、ファイル・タイプ・フォルダが含まれます。
ファイル・タイプ・フォルダには、バイナリのASMファイルが含まれます。
この階層を図21-4に示します。ただし、図を簡潔にするために、エイリアス用に作成されるディレクトリは省略しています。
仮想フォルダ/sys/asmには、使用方法が次のように制限されます。次のことはできません。
SQLを使用した/sys/asmの問合せ
通常のファイルの/sys/asmへの配置(ここに置けるのはASMファイルのみ)
ASMファイルの、他のASMディスク・グループや、ASM外部のフォルダへの移動(名前の変更)
既存のASMファイルまたはディレクトリへのハード・リンクの作成
また、次の点があげられます。
フォルダ/sys/asmを表示するにはDBA権限が必要です。
Oracle XML DBプロトコルを使用して/sys/asmにアクセスするには、SYS以外のユーザーとしてログインする必要があります。
繰返しますが、ASM仮想フォルダの操作はDBAの使用を想定したもので、開発者用ではありません。
|
関連項目:
|
SQLによるOracle XML DBリポジトリへのアクセスを可能にするビューは2つあります。
PATH_VIEW
RESOURCE_VIEW
表21-2に、PATH_VIEWとRESOURCE_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のサポート |
|---|---|---|---|---|
|
リソースの作成脚注1 |
DBMS_XDB.createResource() INSERT INTO PATH_VIEW VALUES (path, res, linkprop); |
HTTP: FTP: |
親フォルダに対する |
サポート |
|
リソース・コンテンツの更新 |
UPDATE RESOURCE_VIEW
SET RES =
updateXML(
res,
'/Resource/Contents', lob)
WHERE equals_path(res, path) > 0
|
HTTP: FTP: |
リソースに対する |
サポート |
|
リソース・プロトコルの更新 |
UPDATE RESOURCE_VIEW
SET RES =
updateXML(
res, '/Resource/propname1',
newval,
'/Resource/propname2' ...)
WHERE equals_path(res, path) > 0
|
WebDAV: |
リソースに対する |
サポート |
|
リソースACLの更新 |
UPDATE RESOURCE_VIEW
SET RES =
updateXML(
res,
'/ Resource/ACL', XMLType)
WHERE equals_path(res, path) > 0
|
適用なし |
リソースに対する |
非サポート |
|
リソースのリンク解除(最新のリンクの削除) |
DBMS_XDB.deleteResource() DELETE FROM RESOURCE_VIEW WHERE equals_path(res, path) > 0 |
HTTP: FTP: |
親フォルダに対する リソースに対する |
サポート |
|
リソースへのすべてのリンクの強制削除 |
DBMS_XDB.deleteResource()
DELETE FROM PATH_VIEW
WHERE
extractValue(res,
'display_name')
= 'My resource'
|
FTP: |
すべての親フォルダに対する リソースに対する |
サポート |
|
リソースの移動 |
UPDATE PATH_VIEW SET path = newpath WHERE equals_path(res, path) > 0 |
WebDAV: FTP: |
ソース親フォルダに対する ターゲット親フォルダに対する リソースに対する |
サポート |
|
リソースのコピー |
INSERT INTO PATH_VIEW
SELECT newpath, res, link
FROM PATH_VIEW
WHERE equals_path(res, oldpath)
> 0
|
WebDAV: |
|
サポート |
|
既存リソースへのハード・リンクの作成 |
DBMS_XDB.link( srcpath IN VARCHAR2, linkfolder IN VARCHAR2, linkname IN VARCHAR2); |
なし |
親フォルダに対する リソースに対する |
非サポート |
|
既存リソースへの弱いリンクの作成 |
DBMS_XDB.link( srcpath IN VARCHAR2, linkfolder IN VARCHAR2, linkname IN VARCHAR2, DBMS_XDB.LINK_TYPE_WEAK); |
なし |
親フォルダに対する リソースに対する |
非サポート |
|
リソースの所有者の変更 |
UPDATE RESOURCE_VIEW
SET RES =
updateXML(
RES,
'/Resource/Owner/text()',
'new_owner')
WHERE equals_path(res,path) > 0
|
なし |
リソースに対する |
サポート |
|
リソース・コンテンツのバイナリ表現またはテキスト表現の取得 |
SELECT XDBURIType(path).getBLOB()
FROM DUAL;
SELECT p.res.extract(
'/Resource/Contents')
FROM RESOURCE_VIEW p
WHERE equals_path(res, path) > 0
|
HTTP: FTP: |
リソースに対する |
サポート |
|
リソース・コンテンツの |
SELECT
XDBURIType(path).getBLOB().getXML
FROM DUAL;
SELECT extract(
res,
'/Resource/Contents/*')
FROM RESOURCE_VIEW p
WHERE equals_path(Res, path) > 0
|
適用なし |
リソースに対する |
非サポート |
|
リソース・プロトコルの取得 |
SELECT extractValue(
res,
'/Resource/XXX')
FROM RESOURCE_VIEW
WHERE equals_path(res, path)
> 0
|
WebDAV: |
リソースに対する |
サポート |
|
フォルダ内のリソースのリスト |
SELECT PATH FROM PATH_VIEW
WHERE under_path(res, path, 1)
> 0
|
WebDAV: |
フォルダに対する |
サポート |
|
フォルダの作成 |
Call DBMS_XDB.createFolder(VARCHAR2) |
WebDAV: FTP: |
親フォルダに対する |
サポート |
|
フォルダのリンク解除 |
DBMS_XDB.deleteResource() DELETE FROM PATH_VIEW WHERE equals_path(res, path) > 0; |
HTTP: FTP: |
親フォルダに対する リソースに対する |
サポート |
|
フォルダおよびそのフォルダに対するすべてのリンクの強制削除 |
DBMS_XDB.deleteResource(VARCHAR2); |
適用なし |
すべての親フォルダに対する フォルダ・リソースに対する |
サポート |
|
行ロックされたリソースの取得 |
SELECT ... FROM RESOURCE_VIEW FOR UPDATE ...; |
適用なし |
リソースに対する |
非サポート |
|
リソースへのWebDAVロックの追加 |
DBMS_XDB.LockResource( path, true, true); |
WebDAV: FTP: |
リソースに対する |
非サポート |
|
WebDAVロックの削除 |
BEGIN
DBMS_XDB.GetLockToken(
path,
deltoken);
DBMS_XDB.UnlockToken(
path,
deltoken);
END;
|
WebDAV: FTP: |
リソースに対する |
非サポート |
|
ファイル・リソースのチェックアウト |
|
適用なし |
リソースに対する |
非サポート |
|
ファイル・リソースのチェックイン |
|
適用なし |
リソースに対する |
非サポート |
|
ファイル・リソースのチェックアウトのキャンセル |
|
適用なし |
リソースに対する |
非サポート |
|
ファイル・リソースのバージョニング |
|
適用なし |
リソースに対する |
非サポート |
|
イベント・ハンドラの削除 |
|
適用なし |
リソースまたは親フォルダ(コンテキストによる)に対する |
非サポート |
|
変更のコミット |
COMMIT; |
各リクエスト後の自動コミット |
適用なし |
サポート |
|
変更のロールバック |
ROLLBACK; |
適用なし |
適用なし |
サポート |
脚注1 リポジトリ・リソースへの問合せのパフォーマンスを最適化するため、リソース作成後にプロシージャDBMS_XDB_ADMIN.gatherRepositoryStatsを使用して、オプティマイザの統計を収集してください。gatherRepositoryStatsを使用するためには、権限ANALYZE ANYを持つXDBADMINロール、またはDBAロールが必要です。
|
関連項目:
|
Oracle XML DBのフォルダおよびリソースに対するアクセス制御権限を設定できます。
|
関連項目:
|
脚注の凡例
脚注1: グラフは、リポジトリ構造を定義するハード・リンクによって定義され、ハード・リンクを使用した循環は許可されません。ただし弱いリンクを使用して循環を導入できます。「ハード・リンクおよび弱いリンク」を参照してください。