この章では、Oracle XML DBリポジトリのリソースでXLinkおよびXincludeを使用する方法について説明します。内容は次のとおりです。
ドキュメント指向、またはコンテンツ管理アプリケーションでは原則として、ドキュメント間の関係が追跡されます。これらの関係は通常、様々な形のリンクとして表され、操作されます。このようなリンクは、ドキュメント・コンテンツや、マウス・クリックなどのユーザー操作に対するレスポンスなどを含め、様々な面でアプリケーションの動作に影響を与えます。
W3C勧告では、XMLリポジトリで管理されるドキュメントに関して、このような場合に適した次の2つの仕様を推奨しています。
XLink: リソース間のリンクの様々なタイプを定義します。これらのリンクにより、ドキュメント間の任意の関係をモデル化できます。ドキュメントの場所については、リポジトリの内部と外部のどちらでもかまいません。
XInclude: 複数のXML文書またはXMLフラグメントのコンテンツを単一の情報セットにまとめる方法を定義します。これにより、包含関係をモデル化した複合ドキュメントを作成できます。複合ドキュメントとは、別のドキュメントを含めるドキュメントのことです。つまり、ドキュメントまたはドキュメント・フラグメントを含めるファイル・リソースです。含められるオブジェクトは、同じリポジトリ内のファイル・リソース、またはリポジトリの外部にあるドキュメントやフラグメントです。
これらの標準はそれぞれ非常に一般的なものであり、XML文書間の関係をモデル化する以外にも使用されます。XLinkを使用してリンクされたドキュメントや、XIncludeを使用してXML文書に含められたドキュメントは、必ずしもXML文書である必要はありません。
XLinkやXIncludeを使用してドキュメント間の関係を表すことにより、アプリケーションの柔軟性が高まるだけでなく、コンポーネント・ドキュメントが再利用しやすくなり、それに対するファイングレインな操作(アクセス制御、バージョニング、メタデータなど)が可能になります。XMLのデータ構造(祖先-子階層)を使用してモデル化された関係は、相対的に固定されたものですが、XLinkやXIncludeを使用してモデル化された関係は、容易に変更されます。
注意: XML Schemaに基づくドキュメントでXLinkやXIncludeの属性を使用可能にするには、XML Schemaでこれらの属性を明示的に宣言するか、または任意の属性の使用を許可する必要があります。 |
関連項目:
|
この項では、XLinkおよびXIncludeのリンク・タイプ、およびそれらのリンクとOracle XML DBリポジトリのリンクとの関係について説明します。XLinkリンクは、リポジトリ・リンクよりも一般的です。XLinkリンクには、単純リンクと拡張リンクがあります。Oracle XML DBでは単純XLinkリンクのみサポートしており、拡張リンクはサポートされていません。
XLinkリンクおよびXIncludeリンクを使用すると、ドキュメント間の任意の関係がモデル化されます。関係の意味と動作は、リンクを使用するアプリケーションに依存します。リンク自体によっては決定されません。XLinkリンクおよびXIncludeリンクは、Oracle XML DBのドキュメント・リンクにマップできます。Oracle XML DBリポジトリのリソースをターゲットとするドキュメント・リンクは、(構成オプションに応じて)ハード・リンクか弱いリンクかのいずれかになります。この点については、リポジトリ・リンクと同様です。ただし、リポジトリ・リンクはFTPやHTTPなどのファイル・システムに関連するプロトコルによってナビゲートできるのに対し、ドキュメント・リンクはこうしたプロトコルではナビゲートできません。ドキュメント・リンクをナビゲートするには、XPath 2.0関数fn:doc
を使用します。
XLinkおよびXIncludeでは、他のドキュメントへのリンクを設定できます。XIncludeの場合、属性href
およびxpointer
を使用してターゲット・ドキュメントを指定します。
XLinkリンクには、単純リンクと拡張リンクがあります。単純リンクは、ソースからターゲットへの単方向にのみ機能します。拡張リンク(複合リンクともいう)では、複数のドキュメント間の関係を、様々な方向でモデル化できます。単純リンクと拡張リンクはどちらも、リンク・メタデータを含む場合があります。XLinkリンクをXMLデータ内で表すには、事前定義された接頭辞xlink
を持つ名前空間http://www.w3.org/1999/xlink
の様々な属性を使用します。単純リンクは、XMLデータ内ではxlink:type = "simple"
のように属性type
と値simple
を使用して表されます。拡張XLinkリンクは、xlink:type = "extended"
で表されます。
サード・パーティの拡張XLinkリンクは、関係がモデル化されるいずれのドキュメントにも含まれません。そのためサード・パーティのリンクは、パイナリ・ファイルなど、それ自体ではリンクの表現手段を持たないドキュメントの関連付けに使用できます。
単純XLinkリンクのソース側(つまりリンクを含むドキュメント)は、XML文書である必要があります。単純リンクのターゲット側には任意のドキュメントを使用できます。拡張リンクには、こうした制約はありません。例23-3は、単純リンクの例を示したものです。リンクのターゲットは、属性xlink:href
により表されています。
XIncludeは、複数のXML文書の情報セットを単一の情報セットにマージする構文および処理モデルに関するW3C勧告です。他のドキュメントを含める場合は要素xi:include
を使用し、属性href
の値としてそのURIを指定します。要素xi:include
はネストできます。つまり、含められたドキュメント自体も、別のドキュメントを含めることができます。
(ただし、包含が循環しているとOracle XML DBでエラーが発生します。リソースは作成されますが、包含を展開するとエラーが発生します。)
このようにXIncludeによって、複合ドキュメント(他のXML文書またはXMLフラグメントを含めたリポジトリ・ファイル・リソース)を作成できます。含められるオブジェクトは、同じリポジトリ内のファイル・リソース、またはリポジトリの外部にあるドキュメントやフラグメントです。
1冊の本をコンテンツ管理システムで管理すると想定すると、その本は典型的な複合ドキュメントの1つと考えられます。それぞれの本には、各章ドキュメントが含められます。各章ドキュメントは、それぞれのURLを持つ別々のオブジェクトとして管理できます。章ドキュメントに対しては、それぞれ固有のメタデータおよびアクセス制御の設定が可能であり、バージョニングも可能です。1冊の本は、章ドキュメントの特定のバージョンを含める(参照する)場合があります。同一の章ドキュメントは、複数の本のドキュメントに含め、再利用できます。包含関係はXIncludeによりモデル化されるため、コンテンツ管理が容易になります。たとえば、1つの本の中である章を別の章に差し替えることも容易です。
例23-1は、4つのドキュメントを含むXMLのBook
要素を示したものです。また、これらのドキュメントの1つであるpart1.xml
も示されています。ドキュメントpart1.xml
には、章を表す別のドキュメントが含まれています。
例23-1 本のドキュメントに部および章を含めるためのXIncludeの使用方法
本を表す最上位のドキュメントには、要素Book
があります。
<Book xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include href=toc.xml"/> <xi:include href=part1.xml"/> <xi:include href=part2.xml"/> <xi:include href=index.xml"/> </Book>
本の主要部分であるファイル(リソース)part2.xml
には、複数の章ドキュメントを含むPart
要素があります。
<?xml version="1.0"?> <Part xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include href="chapter5.xml"/> <xi:include href="chapter6.xml"/> <xi:include href="chapter8.xml"/> <xi:include href="chapter9.xml"/> </Part>
XIncludeには、その他に次の機能もあります。
プレーン・テキストの包含: 属性parse
に値text
を指定したparse = "text"
を使用し、未解析の非XMLテキストを含めることができます。
XMLフラグメントの包含: xi:include
要素のxpointer
属性を使用し、ドキュメント全体ではなくXMLフラグメントを指定して、それを含めることができます。
フォールバック処理: 含まれたドキュメントのURIにアクセスできないエラー、xi:include
構文エラー、xpointer
参照がNULLを戻すエラーなどが発生した場合、XIncludeでは、xi:fallback
要素に指定されている処理が実行されます。通常は、含まれる代替要素を指定します。この代替要素では、他ドキュメントを含めるために、これ自体がxi:include
を使用します。
Oracle XML DBでは単純XLinkリンクのみサポートしており、拡張XLinkリンクはサポートされていません。
XLinkの属性を含むXML文書が、リソース・コンテンツまたはユーザー定義のリソース・メタデータとしてOracle XML DBリポジトリに追加された場合は、リポジトリまたは個々のリポジトリ・リソースの構成に基づいて特殊な処理が実行される場合があります。この処理は、リソース構成ドキュメントXDBResConfig.xsd
の要素XLinkConfig
によって指定されます。たとえば、XLinkリンクを無視したり、XLinkリンクをOracle XML DBのドキュメント・リンクにマップするようにリソースを構成できます。後者の場合は、構成でドキュメント・リンクをハード・リンクにするか弱いリンクにするかを指定できます。ハード・ドキュメント・リンクおよび弱いドキュメント・リンクにはそれぞれ、ハード・リポジトリ・リンクおよび弱いリポジトリ・リンクと同じプロパティがあります。
ドキュメント・リンクの作成や更新に必要な権限は、リポジトリ・リンクの作成や更新に必要な権限と同じです。ドキュメントを部分的に更新する場合でも、ドキュメント全体の削除や再挿入を行う場合と同じ権限が必要です。たとえばドキュメント・リンクを1つしか更新しない場合でも、そのリンクを含むドキュメントにリンクされている各ドキュメントの削除権限と挿入権限が必要です。
構成によりXLinkリンクがドキュメント・リンクにマップされている場合は、XLinkリンクを含むドキュメントがリポジトリに追加されるたびに、XLink情報が抽出され、システム・リンク表に格納されます。リンクのターゲット(リンク先)の場所は、リソースOIDに基づくダイレクト・パスに置き換えられます。構成では、ドキュメント取得の際にOIDパスを名前付きパス(URL)に置き換えるかどうかも指定できます。名前付きパスのかわりにOIDパスを使用すると、通常は、リソース・コンテンツを取得する場合も含め、リンク処理の際のパフォーマンスが向上します。
XLinkは、リソース・コンテンツ内では使用できますが、リソース・メタデータ内では使用できません。
Oracle XML DBでは、複合ドキュメント管理の標準メカニズムとしてXInclude1.0をサポートしています。ただし、属性xpointer
およびドキュメント・フラグメントの包含はサポートしていません。包含対象は完全なドキュメントのみです(属性href
を使用)。
XIncludeを使用すると、既存のコンテンツを含めたXML文書を作成できます。また、XInclude包含参照を含む一連のリポジトリ・リソースを作成し、スキーマに基づかないXML文書の暗黙的な分解を構成することもできます。
含められるドキュメントのコンテンツは、XMLデータまたはプレーン・テキスト(属性parse = "text"
を使用)である必要があります。XIncludeでは、バイナリ・コンテンツは直接含めることはできません。ただし、XLinkを使用してバイナリ・コンテンツにリンクできます。
XIncludeは、リソース・コンテンツ内では使用できますが、リソース・メタデータ内では使用できません。
Oracle XML DBリポジトリから複合ドキュメントを取得する際、次のいずれかを選択できます。
xi:include
要素を残した状態で、そのまま取得します。これがデフォルトの動作です。
xi:include
要素を再帰的にそのターゲットに置き換えた(つまり、すべての包含を展開した)後に取得します。いずれかのxi:include
要素が解決できない場合はエラーが発生します。
展開された形でドキュメントを取得するために、PL/SQLコンストラクタXDBURIType
を使用して、値'1'
または'3'
を2番目の引数(フラグ)として渡します。例23-2に、これを示します。XDBURIType
コンストラクタの2番目の引数として渡せるのは、次のいずれかの値です。
1
: Xinclude包含をすべて展開した後で結果を戻します。これらの包含をXIncludeの標準的なフォールバック・セマンティクスに基づいて解決できない場合はエラーが発生します。
2
: ドキュメント取得時に発生する可能性のあるすべてのエラーが抑止されます。たとえば、参照先がないhref
ポインタなどのエラーです。
3
: 1
と2
を指定した場合の処理が同時に行われます。
例23-2では、リポジトリ・フォルダpublic/bookdir
にあるすべてのドキュメントを取得し、それぞれの包含を展開します。
例23-2 XDBURITypeによるドキュメントの包含の展開
SELECT XDBURIType(ANY_PATH, '1').getXML() FROM RESOURCE_VIEW
WHERE under_path(RES, '/public/bookdir') = 1;
XDBURITYPE(ANY_PATH,'1').GETXML()
---------------------------------
<Book>
<Title>A book</Title>
<Chapter id="1">
<Title>Introduction</Title>
<Body>
<Para>blah blah</Para>
<Para>foo bar</Para>
</Body>
</Chapter>
<Chapter id="2">
<Title>Conclusion</Title>
<Body>
<Para>xyz xyz</Para>
<Para>abc abc</Para>
</Body>
</Chapter>
</Book>
<Chapter id="1">
<Title>Introduction</Title>
<Body>
<Para>blah blah</Para>
<Para>foo bar</Para>
</Body>
</Chapter>
<Chapter id="2">
<Title>Conclusion</Title>
<Body>
<Para>xyz xyz</Para>
<Para>abc abc</Para>
</Body>
</Chapter>
3 rows selected.
(ここに示されている結果は、例23-8のリソースbookfile.xml
と、それに含まれているリソースchap1.xml
およびchap2.xml
に対応するものです。)
関連項目:
|
複合ドキュメントの検証は、XML文書の検証と同じ方法で行います。ただし、複合ドキュメントの検証は、xi:include
要素をそのまま使用するか、ターゲットに置き換えた形で行うかを選択できます。
また、展開されていない形での検証と展開された形での検証に、別々のXML Schemaを使用するように選択できます。たとえば、あるXML Schemaを使用して、最初は記憶域構造を設定できるよう展開せずに検証を行い、次に展開したドキュメントの格納後に、別のXML Schemaを使用して検証できます。
複合ドキュメントは、リソースと同じ方法で更新できます。その場合、リソースが新規の値で置き換えられます。したがって、リソースを削除し、リソースを挿入する処理に相当します。つまり、元のリソース内のxi:include
要素は削除されます。置換後の(挿入された)ドキュメント内のxi:include
要素は、挿入時に定義された構成に従って通常どおり処理されます。
複合ドキュメントは、それぞれ個別のリソースで構成されます。したがって、このようなリソースのバージョンニング、ロックおよびアクセス制御も、それぞれ個別に行われます。
バージョン管理されたリソース(VCR)へのドキュメント・リンクは、常にターゲット・リソースの最新バージョン、または現在のワークスペース内で選択されたバージョンに解決されます。ただし、OIDベースのパスでターゲット・リソースを識別すると、特定のバージョンを明示的に参照できます。
xi:include
要素を含むドキュメントをロックしても、含まれているドキュメントはロックされません。また、含まれているドキュメントをロックしても、それを含むドキュメントはロックされません。
展開した形で複合ドキュメントを取得する場合は、常に各参照ドキュメントのアクセス制御リスト(ACL)がチェックされます。このチェックには、現行ユーザーの権限(起動者の権限)を使用します。含まれているドキュメントのいずれかについて権限が不十分な場合、展開はキャンセルされエラーが発生します。
読取り専用のパブリック・ビューDOCUMENT_LINKS
に問い合せ、XLinkリンクおよびXIncludeリンクから導出されたドキュメント・リンクについてのシステム情報を取得できます。このビューでは、それぞれのリンクについて次の各列に情報が表示されます。
SOURCE_ID
: ソース・リソースのOID。RAW(16)
。
TARGET_ID
: ターゲット・リソースのOID。RAW(16)
。
TARGET_PATH
: 常にNULL
。今後の使用のために確保されています。VARCHAR2(4000)
。
LINK_TYPE
: ドキュメント・リンクのタイプ。Hard
またはWeak
。VARCHAR2(8)
。
LINK_FORM
: 元のリンクの形式。XLink
またはXInclude
。VARCHAR2(8)
。
SOURCE_TYPE
: 常にResource Content
。VARCHAR2(17)
。
次の条件を満たしている場合のみ、リソースに関する情報をこのビューから取得できます。
リソースがリンク・ソースであり、それに対して権限read-contents
またはread-properties
が付与されていること。
リソースがリンク・ターゲットであり、それに対して権限read-properties
が付与されていること。
関連項目: パブリック・ビューDOCUMENT_LINKS の詳細は、『Oracle Databaseリファレンス』を参照してください。 |
例23-3は、リソース作成時にXLinkリンクを処理する方法、およびドキュメント・リンクに関するシステム情報をビューDOCUMENT_LINKS
から取得する方法を示したものです。リソースが格納されているフォルダは、XLinkリンクをハード・ドキュメント・リンクにマップするように構成されているとみなされます。
例23-3 XLinkリンクからマップされたドキュメント・リンクの問合せ
DECLARE b BOOLEAN; BEGIN b := DBMS_XDB.createResource( '/public/hardlinkdir/po101.xml', '<PurchaseOrder id="101" xmlns:xlink="http://www.w3.org/1999/xlink"> <Company xlink:type="simple" xlink:href="/public/hardlinkdir/oracle.xml">Oracle Corporation</Company> <Approver xlink:type="simple" xlink:href="/public/hardlinkdir/quine.xml">Willard Quine</Approver> </PurchaseOrder>'); b := DBMS_XDB.createResource( '/public/hardlinkdir/po102.xml', '<PurchaseOrder id="102" xmlns:xlink="http://www.w3.org/1999/xlink"> <Company xlink:type="simple" xlink:href="/public/hardlinkdir/oracle.xml">Oracle Corporation</Company> <Approver xlink:type="simple" xlink:href="/public/hardlinkdir/curry.xml">Haskell Curry</Approver> <ReferencePO xlink:type="simple" xlink:href="/public/hardlinkdir/po101.xml"/> </PurchaseOrder>'); END; / SELECT r1.ANY_PATH source, r2.ANY_PATH target, dl.LINK_TYPE, dl.LINK_FORM FROM DOCUMENT_LINKS dl, RESOURCE_VIEW r1, RESOURCE_VIEW r2 WHERE dl.SOURCE_ID = r1.RESID and dl.TARGET_ID = r2.RESID; SOURCE TARGET LINK_TYPE LINK_FORM ----------------------------- ------------------------------ --------- --------- /public/hardlinkdir/po101.xml /public/hardlinkdir/oracle.xml Hard XLink /public/hardlinkdir/po101.xml /public/hardlinkdir/quine.xml Hard XLink /public/hardlinkdir/po102.xml /public/hardlinkdir/oracle.xml Hard XLink /public/hardlinkdir/po102.xml /public/hardlinkdir/curry.xml Hard XLink /public/hardlinkdir/po102.xml /public/hardlinkdir/po101.xml Hard XLink
例23-4は、すべてのドキュメント・リンクを表示するビューDOCUMENT_LINKS
に対する問合せを示します。
例23-4 XIncludeリンクからマップされたドキュメント・リンクの問合せ
DECLARE ret BOOLEAN; BEGIN ret := DBMS_XDB.createResource( '/public/hardlinkdir/book.xml', '<Book xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include href="/public/hardlinkdir/toc.xml"/> <xi:include href="/public/hardlinkdir/part1.xml"/> <xi:include href="/public/hardlinkdir/part2.xml"/> <xi:include href="/public/hardlinkdir/index.xml"/> </Book>'); END; SELECT r1.ANY_PATH source, r2.ANY_PATH target, dl.LINK_TYPE, dl.LINK_FORM FROM DOCUMENT_LINKS dl, RESOURCE_VIEW r1, RESOURCE_VIEW r2 WHERE dl.SOURCE_ID = r1.RESID and dl.TARGET_ID = r2.RESID; SOURCE TARGET LINK_TYPE LINK_FORM ------ ------ --------- --------- /public/hardlinkdir/book.xml /public/hardlinkdir/toc.xml Hard XInclude /public/hardlinkdir/book.xml /public/hardlinkdir/part1.xml Hard XInclude /public/hardlinkdir/book.xml /public/hardlinkdir/part2.xml Hard XInclude /public/hardlinkdir/book.xml /public/hardlinkdir/index.xml Hard XInclude
リポジトリ・リソースの他の処理と同様に、Oracle XML DBリポジトリ・リソースのXLinkおよびXInclude処理を構成します。「リソースの構成」を参照してください。この項の後半では、他のリソースのXLinkおよびXInclude処理を構成する場合にリソースとして使用するリソース構成ファイルについて説明します。
リソース構成ファイルは、パス/sys/schemas/PUBLIC/xmlns.oracle.com/xdb/XDBResConfig.xsd
にあるOracle XML DBリポジトリでアクセス可能な、XML Schema XDBResConfig.xsd
準拠のXMLファイルです。XLinkおよびXIncludeの処理を構成するにはそれぞれ、要素ResConfig
の子要素XLinkConfig
およびXIncludeConfig
を使用します。これらのうち、いずれかの要素が存在しない場合、その要素に対応するタイプのリンクは処理できません。
XLinkConfig
およびXIncludeConfig
の両方で、属性UnresolvedLink
と、子要素LinkType
およびPathFormat
を使用できます。また要素XIncludeConfig
では、子要素ConflictRule
も使用できます。ただし、LinkType
要素のコンテンツがNone
の場合、PathFormat
要素およびConflictRule
要素は使用できません。
XLinkConfig
およびXIncludeConfig
には、事前条件は定義できません。新規リソースのXLinkリンクおよびXIncludeリンクの処理は、リポジトリ・リソースの作成時に親フォルダのResConfig
要素によって指定されます。親フォルダにResConfig
要素がない場合は、リポジトリ全般の構成が適用されます。
リソース構成ファイルの変更内容は、構成ファイルの変更後に作成または更新されたドキュメントにのみ適用されます。既存ドキュメント内のリンクを処理するには、適切なリソース構成パラメータを指定した上で、PL/SQLプロシージャDBMS_XDB.processLinks
を使用します。
LinkConfig
要素には、Error
(デフォルト値)またはSkip
の値のUnresolvedLink
属性を使用できます。これは、ドキュメントをリポジトリに挿入する(リソースを作成する)際、XLinkリンクまたはXIncludeリンクを解決できない場合の処理を指定します。Error
を指定すると、エラーが発生し、現在の操作がロールバックされます。Skip
を指定すると、XLinkリンクまたはXIncludeリンクの処理がスキップされます。処理がスキップされると、対応するドキュメント・リンクを含まずにリソースが作成され、そのリソースのHasUnresolvedLinks
属性がtrue
に設定されます。これは、リソースに未解決リンクが含まれていることを表すものです。
弱いリンクの循環を含むリソースを作成する場合は特に、属性UnresolvedLink
の値としてSkip
を指定すると便利です。この値を指定しない場合は、リソース作成中に未解決リンクのエラーが発生します。スキップされたリンクは、リソースおよびそれにリンクするすべてのリソースが作成された後に、PL/SQLプロシージャDBMS_XDB.processLinks
を使用して処理できます。このプロシージャによってすべてのXLinkリンクおよびXIncludeリンクが解決されると、属性HasUnresolvedLinks
はfalse
に設定されます。
削除済リソースへの弱いリンクのあるリソースには、リソース要素HasUnresolvedLinks
もtrue
に設定されます。このため、リソースを削除すると、そのリソースに対する弱いリンクも事実上削除されます。特に、リソースへの最後のハード・リンクを削除した場合は、リソースそのものも削除され、削除されたリソースを弱いリンクで示すすべてのリソースで、属性HasUnresolvedLinks
がtrue
に設定されます。
リソース構成ファイルのLinkType
要素を使用して、ドキュメントのOracle XML DBリポジトリへの格納の際、XLinkリンクまたはXIncludeリンクが検出された場合に作成されるドキュメント・リンクのタイプを指定します。LinkType
要素に指定できる値(要素のコンテンツ)は次のとおりです。
None
(デフォルト): XLinkリンクおよびXIncludeリンクが無視され、対応するドキュメント・リンクは作成されません。
Hard
: XLinkリンクまたはXIncludeリンクが、リポジトリ・ドキュメント内のハード・ドキュメント・リンクにマップされます。
Weak
: XLinkリンクまたはXIncludeリンクが、リポジトリ・ドキュメント内の弱いドキュメント・リンクにマップされます。
xlink:href
属性またはxi:include:href
属性を含むドキュメントの取得時に使用されるパス形式を指定するには、リソース構成ファイルのPathFormat
要素を使用します。ハード・ドキュメント・リンクおよび弱いドキュメント・リンクのそれぞれについて、PathFormat
要素に指定できる値(要素のコンテンツ)は次のとおりです。
OID
(デフォルト): XLinkまたはXIncludeのhref
パスが、リポジトリ・ドキュメント内のOIDベースのパスにマップされます。つまり、OIDが直接使用されます。
Named
: XLinkまたはXIncludeのhref
パスが、リポジトリ・ドキュメント内の名前付きパス(URL)にマップされます。このパスは、ドキュメント取得時に内部OIDを基にして計算されます。そのため、OIDパスを直接使用する場合に比べ、取得に時間がかかります。
リソース構成ファイルのConflictRule
要素を使用して、構成要素ドキュメントに対して計算済のパスがすでにOracle XML DBリポジトリ内にある場合に使用する競合解決ルールを指定します。ConflictRule
要素に指定できる値(要素のコンテンツ)は次のとおりです。
Error
(デフォルト): エラーが発生します。
Overwrite
: 既存のリポジトリ・パスのターゲットとなっているドキュメントを、含まれているドキュメントに置き換えると更新されます。既存のドキュメントがバージョン管理されたリソースであれば、バージョニングが自動的に行われる場合を除いて、事前にチェックアウトされます。そうでない場合は、エラーが発生します。
Syspath
: 含まれているドキュメントへのパスが、新規システム定義のパスに変更されます。
リソース構成ファイルのSectionConfig
要素を使用して、XInclude包含参照を含む一連のリソースを作成するために、スキーマに基づかないXML文書をOracle XML DBリポジトリに追加する際、このXML文書がどのように分解されるかを指定します。またリソース構成ファイルでは、単純なXPath式を使用して、ドキュメントのどの部分を個々のリソースにマップするか、およびマップ先のリソースはどれかを指定します。
要素SectionConfig
には1つ以上のSection
要素があり、それぞれに次の子要素が含まれています。
sectionPath
: セクションのルートを指定する単純なXPath 1.0式。ここではchild軸およびdescendant軸のみを使用し、ワイルドカードは使用できません。
documentPath
(オプション): 単純なXPath 1.0式。この式を評価することにより、sectionPath
に従って分解されたドキュメントから作成されるリソースを識別します。このXPath式では、child軸、descendant軸、およびattribute軸のみを使用します。
namespace
(オプション): sectionPath
およびdocumentPath
の実際の名前空間。
また要素Section
には、作成するセクションのタイプを指定するtype
属性があります。値がDocument
の場合は、ドキュメントが作成されます。デフォルト値None
の場合は何も作成されません。None
を使用することは、SectionConfig
要素を削除した場合に相当します。このため、type
属性をNone
に設定すると、SectionConfig
要素を削除せずに一時的に無効にできます。再度有効にする場合は、設定をDocument
に戻します。
リポジトリに追加されたドキュメント内の要素が、複数のsectionPath
値と一致する場合は、(ドキュメントの順序における)最初の式のみが使用されます。
documentPath
要素が存在しない場合、作成されたリソースにはシステム定義名が設定され、元のドキュメントに対して指定されたフォルダ内に格納されます。
例23-5は、XInclude処理を構成する構成ファイルのセクションを示します。ここではXInclude属性をOracle XML DBリポジトリのハード・ドキュメント・リンクにマップします。取得したリソース内のリポジトリ・パスは、リソースのOIDに基づいて構成されます。
例23-5 OIDによる取得時のXIncludeリンクからハード・ドキュメント・リンクへのマッピング
<ResConfig> . . . <XIncludeConfig UnresolvedLink="Skip"> <LinkType>Hard</LinkType> <PathFormat>OID</PathFormat> </XIncludeConfig> . . . </ResConfig>
例23-6は、XLinkリンクをリポジトリ内の弱いドキュメント・リンクにマップするためのXLinkConfig
セクションを示したものです。この場合、ドキュメントの取得には名前付きパス(URL)が使用されます。
例23-6 名前付きパスによる取得時のXLinkリンクから弱いリンクへのマッピング
<ResConfig> . . . <XLinkConfig UnresolvedLink="Skip"> <LinkType>Weak</LinkType> <PathFormat>Named</PathFormat> </XLinkConfig> . . . </ResConfig>
例23-7は、入力ドキュメントをOracle XML DBリポジトリに追加する際、入力ドキュメントの各Chapter
要素が別々のリポジトリ・ファイルになるように指定するSectionConfig
セクションを示します。作成されたファイルのリポジトリ・パスは、構成要素documentPath
によって指定され、このパスは、例23-6のリソース構成ファイルの場所に対する相対パスです。
例23-7 XIncludeを使用したドキュメントの分解の構成
<ResConfig> . . . <SectionConfig> <Section type = "Document"> <sectionPath>//Chapter</sectionPath> <documentPath>concat("chap", @id, ".xml")</documentPath> </Section> </SectionConfig> . . . </ResConfig>
この例のXPath式では、XPath関数concat
によって次の文字列が連結され、使用するリポジトリ・パスが生成されます。
chap
: (接頭辞)chap
入力ドキュメント内の要素Chapter
の属性id
の値
ファイル拡張子.xml
たとえばchap27.xml
のリポジトリ・パスは、入力ドキュメントのChapter
要素のid
属性の値が27
の場合に生成されます。
<Chapter id="27"> ... </Chapter>
例23-6の構成ドキュメント、およびXInclude
要素を含む本のドキュメントがリポジトリ・フォルダ/public/bookdir
に格納されている場合、XInclude
分解によって生成された個々の章ファイルは、ファイル/public/bookdir/chap
N
.xml
に取り込まれます。ただし、N
の値は、Chapter
要素のid
属性に指定された値です。
リポジトリに追加された本のドキュメントは、入力された本のドキュメントから生成されます。入力された本のドキュメントに埋め込まれているChapter
要素は、生成された章ドキュメントを参照するxi:include
要素に置き換えられます。例23-8にこれを示します。
例23-8 生成されたxi:include要素を表示するリポジトリ・ドキュメント
SELECT XDBURIType('/public/bookdir/bookfile.xml').getclob() FROM DUAL; XDBURITYPE('/PUBLIC/BOOKDIR/BOOKFILE.XML').GETCLOB() -------------------------------------------------------------------------------- <Book> <Title>A book</Title> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="/public/bookdir/chap1.xml"/> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="/public/bookdir/chap2.xml"/> </Book>
PL/SQLプロシージャDBMS_XDB.processLinks
を使用して、単一ドキュメント内、または1つのフォルダに格納された全ドキュメント内のXLinkリンクおよびXIncludeリンクをすべて手動で処理できます。ハード・リンクされたすべてのサブフォルダを再帰的に処理する場合は、RECURSIVE
をモード引数としてこのプロシージャに渡します。すべてのXLinkリンクおよびXIncludeリンクは、対応する構成パラメータに従って処理されます。リソース内のいずれかのリンクを解決できない場合は、そのリソースのHasUnresolvedLinks
属性がtrue
に設定され、リソースに未解決リンクが含まれていることが示されます。属性HasUnresolvedLinks
のデフォルト値はfalse
です。