この章では、XMLディスクリプタに固有のディスクリプタのオプションを構成する方法について説明します。
この章の内容は次のとおりです。
複数のディスクリプタ・タイプに共通のディスクリプタのオプションを構成する方法の詳細は、第119章「ディスクリプタの構成」を参照してください。
表52-1は、XMLディスクリプタのデフォルトの構成可能オプションを示します。
表52-1 XMLディスクリプタの構成オプション
構成オプション | Oracle JDeveloper |
TopLink Workbench | Java |
---|---|---|---|
XMLスキーマ・ネームスペース(5.6.5項「XMLスキーマ・ネームスペースの構成方法」を参照) |
|||
XMLスキーマ参照(5.6.4項「XMLスキーマ参照の構成方法」を参照) |
|||
スキーマ・コンテキスト(52.2項「XMLディスクリプタのスキーマ・コンテキストの構成」を参照) |
|||
複合型anyType(52.3項「複合型anyTypeの構成」を参照) |
|||
デフォルトのルート要素(52.4項「デフォルトのルート要素の構成」を参照) |
|||
文書保存(52.5項「文書保存の構成」を参照) |
|||
コメント(119.6項「ディスクリプタ・コメントの構成」を参照) |
|||
クラス(5.7.2項「クラスの構成方法」を参照) |
|||
子クラス・ディスクリプタに関する継承(119.20項「子(ブランチまたはリーフ)クラス・ディスクリプタに関する継承の構成」を参照) |
|
|
|
親ディスクリプタに関する継承(119.21項「親(ルート)ディスクリプタに関する継承の構成」を参照) |
|||
サブクラスでの継承属性マッピング(119.23項「サブクラスでの継承属性マッピングの構成」を参照) |
|
|
|
インスタンス化ポリシー(119.28項「インスタンス化ポリシーの構成」を参照) |
|||
コピー・ポリシー(119.29項「コピー・ポリシーの構成」を参照) |
|||
修正メソッド(119.35項「修正メソッドの構成」を参照) |
|||
マッピング(第121章「マッピングの構成」を参照) |
詳細は、第50章「XMLディスクリプタの概要」を参照してください。
Oracle JDeveloper TopLinkエディタおよびTopLink Workbenchでは、XMLディスクリプタの参照クラスと、XMLプロジェクトに関連付けられているいずれか1つのスキーマに含まれる単純型または複合型とが、スキーマ・コンテキストを使用して関連付けられます(5.6.4項「XMLスキーマ参照の構成方法」を参照)。これにより、そのコンテキストでのマッピングに使用できる適切な属性がOracle JDeveloper TopLinkエディタおよびTopLink Workbenchに表示されます。
XMLディスクリプタのスキーマ・コンテキストの構成は、Oracle JDeveloperまたはTopLink Workbenchの使用の有無に関係なく必要です。
TopLinkランタイムでは、そのスキーマ・コンテキストに基づいてXMLフラグメントが検証されます。
XMLディスクリプタを特定のスキーマの複合型に関連付けるには、次の手順を実行します。
「参照」をクリックして、このディスクリプタに関連付けるスキーマ要素を選択します。詳細は、52.2.1.1項「スキーマ・コンテキストの選択」を参照してください。
Javaでスキーマ・コンテキストを使用してXMLディスクリプタを構成するには、例52-1のように、XMLSchemaReference
メソッドsetSchemaContext
を使用するディスクリプタ修正メソッドを作成します(119.35項「修正メソッドの構成」を参照)。
この属性はTopLink Workbenchにのみ適用されます。このオプションは、XMLスキーマの要素を表していないXMLディスクリプタに対して表示される、「スキーマ・コンテキストが指定されていません。」というエラーを解決するために使用します(5.3.5項「問題ウィンドウの使用方法」を参照)。
TopLink Workbenchでは通常、すべてのXMLディスクリプタにスキーマ・コンテキストがあるものと想定しています(52.2項「XMLディスクリプタのスキーマ・コンテキストの構成」を参照)。ところが、プロジェクト内のクラスがスキーマの要素に関連付けられていない場合は、そのクラスにはスキーマ・コンテキストはありません。
たとえば、例52-2のスキーマについて考えてみます。
例52-2 xsd:anyTypeを使用するスキーマ
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="customer" type="customer-type"/> <xsd:complexType name="customer-type"> <xsd:sequence> <xsd:element name="contact-method" type="xsd:anyType"/> </xsd:sequence> </xsd:complexType> <xsd:element name="address"> <xsd:complexType> <xsd:sequence> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="phone-number" type="xsd:string"/> </xsd:schema>
要素contact-method
のタイプはxsd:anyType
であるため、プロジェクトにはこのタイプを表すクラス(図52-3のAnyTypeImpl
など)が必要です。このクラスはスキーマ内のどの複合型とも関連付けられていないため、このクラスにはスキーマ・コンテキストはありません。この例では、AnyTypeImpl
クラスにこのオプションを選択します。
詳細は、53.2.5項「xs:anyとxs:anyTypeのサポート」を参照してください。
ディスクリプタが複合型anyType
を表すように指定するには、次の手順を実行します。
ナビゲータでディスクリプタを選択します。そのプロパティがエディタに表示されます。
「ディスクリプタ情報」タブをクリックします。「ディスクリプタ情報」タブが表示されます。
図52-4 「ディスクリプタ情報」タブ、「ディスクリプタは複合型"anyType"を表す」オプション
「ディスクリプタは複合型"anyType"を表す」オプションを選択し、このディスクリプタをルート要素として指定します。
デフォルトのルート要素は、TopLinkが、ディスクリプタのオブジェクトをXML文書にマーシャリングおよびXML文書からアンマーシャリングする場合に、ルート要素として使用する名前です。コンポジット・リレーションシップ・マッピングにのみ使用されるディスクリプタの場合、デフォルトのルート要素は不要です。
詳細は、16.2.12項「デフォルトのルート要素」を参照してください。
ディスクリプタのデフォルトのルート要素としてスキーマ要素を指定するには、次の手順を実行します。
「デフォルトのルート要素」オプションを選択し、このディスクリプタをルート要素として指定します。
「参照」をクリックして、このディスクリプタにルート要素として指定するスキーマ要素を選択します。詳細は、52.4.1.1項「ルート要素の選択」を参照してください。
TopLinkでは、オブジェクト・モデルへのマッピングに必須ではない、XMLソース内の付加的なデータ(コメント、処理命令、アンマップ要素など)を保存できます。
これにより、XMLからオブジェクトへ、そして再びXMLへ返すラウンドトリップを、データの損失なしに実行できます。
XMLソース文書全体を保存するには、次の手順を実行します。
「ドキュメントの保存」オプションを選択し、TopLinkで必須でない、XML文書内の付加的な情報(コメントなど)を保存します。
TopLinkで必須でない、XML文書内の付加的な情報(コメントなど)を保存するようにXMLディスクリプタをJavaで構成するには、XMLDescriptor
メソッドsetShouldPreserveDocument
を使用して、そのためのディスクリプタ修正メソッドを作成します(119.35項「修正メソッドの構成」を参照)。