この章では、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リポジトリを使用すると、従来のリレーショナル・データベース構造ではなく、階層構造のデータベースにコンテンツを格納できます。
図21-1に、典型的なツリーとして表示されるOracle XML DBリポジトリのフォルダおよびファイルの階層構造の例を示します。ツリーの上部は、ルート・フォルダ(/
)です。
フォルダリングによって、アプリケーションでは、データベース・コンテンツがファイル・システムに格納されている場合と同様に、FTP、HTTP(S)およびWebDAVの標準プロトコルを使用して、データベース内の階層的に索引付けられたコンテンツにアクセスできます。リポジトリのフォルダおよびリソースに対するアクセス制御権限を設定できます。
この章では、標準プロトコルを使用して、Oracle XML DBリポジトリ・フォルダのデータにアクセスする方法の概要を説明します。Java、SQLおよびPL/SQLを使用してリポジトリ・オブジェクト階層にアクセスするために使用できるAPIについて説明します。
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で使用される多くの用語には、他のコンテキストでの共通の同義語が存在します。
次に、現行の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
という特別な要素が含まれます。
リソースの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の階層リポジトリ索引によって管理されます。これによって、オペレーティング・システムのファイル・システムで使用されるディレクトリ・メカニズムと同様に、パス名を評価するための高速なメカニズムが提供されます。
フォルダであるリソースでは、要素Resource
のContainer
属性がtrue
に設定されます。
フォルダ内のリソース名を解決するには、現行のユーザーに次の権限が必要です。
フォルダに対するresolve
権限
フォルダのリソースに対するread-properties
権限
ユーザーがこれらの権限を所有していない場合、access denied
エラーが発生します。そのリソースに対するread-properties
権限が拒否されている場合、フォルダのリストおよびその他の問合せによって行は戻されません。
注意: パス名の解決におけるエラー処理では、ファイル・システムとの互換性に対して、無効なリソース名とフォルダでないリソースが区別されます。Oracle XML DBリソースは、SQLを使用して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, 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
には参照可能なリポジトリの構造を認識する必要はありません。
ハード・リンクの作成を制限し、フォルダまたはファイル(またはその両方)へのハード・リンクの複数作成を許可しない方が有効な場合があります。特に、ファイル・リソースへの複数のハード・リンクの作成を許可し、フォルダ・リソースへの複数のハード・リンクの作成を許可しないことで、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
です。
図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は、Java XMLType
メソッドwriteToStream()
を使用することによって、XMLType
レベルでインターネット・プロトコルをサポートします。このメソッドはネイティブに実装され、XMLType
データをプロトコルのリクエスト・ストリームに直接書き込みます。これによって、Javaデータ型を介したデータベース・データの変換およびJavaオブジェクトの作成に伴うJava VMの実行コストとオーバーヘッドが回避され、パフォーマンスが大幅に向上します。パフォーマンスをさらに向上させるには、Javaコードが多くのリーフ要素を検索せずにルートに近いXML要素ツリーのみを処理し、作成するJavaオブジェクトの数が相対的に少なくなるようにします。
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に示します。ただし、図を簡潔にするために、エイリアス用に作成されるディレクトリは省略しています。
仮想フォルダ/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_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のサポート |
---|---|---|---|---|
リソースの作成 |
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: FTP: |
親フォルダに対する |
サポート |
リソース・コンテンツの更新 |
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: FTP: |
リソースに対する |
サポート |
リソース・プロトコルの更新 |
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:
|
リソースに対する |
サポート |
リソースACLの更新 |
EXEC DBMS_XDB.setACL( '/public/T1/copy1.txt', '/sys/acls/all_owner_acl.xml'); |
適用なし |
リソースに対する |
非サポート |
リソースのリンク解除(最新のリンクの削除) |
EXEC DBMS_XDB.deleteResource() DELETE FROM RESOURCE_VIEW WHERE equals_path(RES, path) > 0 |
HTTP:
FTP: |
親フォルダに対する リソースに対する |
サポート |
リソースへのすべてのリンクの強制削除 |
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:
|
すべての親フォルダに対する リソースに対する |
サポート |
リソースの移動 |
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.link('/public/T1/copy3.txt', '/public/T1', 'myhardlink'); |
適用なし |
親フォルダに対する リソースに対する |
非サポート |
既存リソースへの弱いリンクの作成 |
EXEC DBMS_XDB.link('/public/T1/copy3.txt', '/public/T1', 'myweaklink', DBMS_XDB.LINK_TYPE_WEAK); |
適用なし |
親フォルダに対する リソースに対する |
非サポート |
リソースの所有者の変更 |
UPDATE RESOURCE_VIEW SET RES = updateXML( RES, '/Resource/Owner/text()', 'U2') 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.createFolder('/public/T2'); |
WebDAV:
FTP: |
親フォルダに対する |
サポート |
フォルダのリンク解除 |
DBMS_XDB.deleteResource('/public/T2') |
HTTP:
FTP: |
親フォルダに対する リソースに対する |
サポート |
フォルダおよびそのフォルダに対するすべてのリンクの強制削除 |
DBMS_XDB.deleteResource( '/public/T2', DBMS_XDB.DELETE-RECURSIVE_FORCE); |
適用なし |
すべての親フォルダに対する フォルダ・リソースに対する |
サポート |
行ロックされたリソースの取得 |
SELECT ... FROM RESOURCE_VIEW FOR UPDATE ...; |
適用なし |
リソースに対する |
非サポート |
リソースへのWebDAVロックの追加 |
EXEC DBMS_XDB.LockResource('/public/T1/res.xml', TRUE, TRUE); |
WebDAV:
FTP:
|
リソースに対する |
非サポート |
WebDAVロックの削除 |
DECLARE... BEGIN DBMS_XDB.GetLockToken('/public/T1/res.xml', locktoken); DBMS_XDB.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; |
適用なし |
適用なし |
サポート |
関連項目:
|
脚注の凡例
脚注1: グラフは、リポジトリ構造を定義するハード・リンクによって定義され、ハード・リンクを使用した循環は許可されません。ただし弱いリンクを使用して循環を導入できます。「ハード・リンクおよび弱いリンク」を参照してください。