この章では、XMLディスクリプタを使用するために構成する必要のある様々なコンポーネントについて説明します。
詳細は、次を参照してください。
表29-1に、XMLディスクリプタに構成可能なデフォルトのオプションを示します。
表29-1に、XMLディスクリプタに構成可能なデフォルトのオプションを示します。
表29-1 XMLディスクリプタの構成オプション
オプション | タイプ | TopLink Workbench | Java |
---|---|---|---|
|
基本 |
![]() |
![]() |
|
基本 |
![]() |
![]() |
|
基本 |
![]() |
![]() |
|
詳細 |
![]() |
![]() |
|
基本 |
![]() |
![]() |
|
基本 |
![]() |
![]() |
|
詳細 |
![]() |
![]() |
|
基本 |
![]() |
![]() |
「子(ブランチまたはリーフ)クラス・ディスクリプタに関する継承の構成」 |
詳細 |
|
|
|
詳細 |
![]() |
![]() |
|
詳細 |
|
|
|
詳細 |
![]() |
![]() |
|
詳細 |
![]() |
![]() |
|
詳細 |
![]() |
![]() |
|
基本 |
![]() |
![]() |
TopLink Workbenchでは、XMLディスクリプタの参照クラスと、XMLプロジェクトに関連付けられているいずれか1つのスキーマに含まれる単純型または複合型とが、スキーマ・コンテキストを使用して関連付けられます(「XMLスキーマ参照の構成」を参照)。これにより、そのコンテキストでのマッピングに使用できる適切な属性がTopLink Workbenchに表示されます。
XMLディスクリプタのスキーマ・コンテキストの構成は、TopLink Workbenchの使用の有無に関係なく必要です。
TopLinkランタイムでは、そのスキーマ・コンテキストに基づいてXMLフラグメントが検証されます。
XMLディスクリプタを特定のスキーマの複合型に関連付けるには、次の手順を実行します。
「参照」をクリックして、このディスクリプタに関連付けるスキーマ要素を選択します。詳細は、「スキーマ・コンテキストの選択」を参照してください。
Javaでスキーマ・コンテキストを使用してXMLディスクリプタを構成するには、例29-1のように、XMLSchemaReference
メソッドsetSchemaContext
を使用するディスクリプタ修正メソッドを作成します(「修正メソッドの構成」を参照)。
この属性はTopLink Workbenchにのみ適用されます。このオプションは、XMLスキーマの要素を表していないXMLディスクリプタに対して表示される、「スキーマ・コンテキストが指定されていません。」というエラーを解決するために使用します(「問題ウィンドウの使用」を参照)。
TopLink Workbenchでは通常、すべてのXMLディスクリプタにスキーマ・コンテキストがあるものと想定しています(「XMLディスクリプタのスキーマ・コンテキストの構成」を参照)。ところが、プロジェクト内のクラスがスキーマの要素に関連付けられていない場合は、そのクラスにはスキーマ・コンテキストはありません。
たとえば、例29-2のスキーマについて考えてみます。
例29-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
であるため、プロジェクトにはこのタイプを表すクラス(図29-3のAnyTypeImpl
など)が必要です。このクラスはスキーマ内のどの複合型とも関連付けられていないため、このクラスにはスキーマ・コンテキストはありません。この例では、AnyTypeImpl
クラスにこのオプションを選択します。
詳細は、「xs:anyとxs:anyTypeのサポート」を参照してください。
複合型anyTypeのオプション
ディスクリプタが複合型anyType
を表すように指定するには、次の手順を実行します。
ナビゲータでディスクリプタを選択します。そのプロパティがエディタに表示されます。
「ディスクリプタ情報」タブをクリックします。「ディスクリプタ情報」タブが表示されます。
図29-4 「ディスクリプタ情報」タブ、「ディスクリプタは複合型"anyType"を表す」オプション
「ディスクリプタは複合型"anyType"を表す」オプションを選択し、このディスクリプタをルート要素として指定します。
デフォルトのルート要素は、TopLinkが、ディスクリプタのオブジェクトをXML文書にマーシャリングおよびXML文書からアンマーシャリングする場合に、ルート要素として使用する名前です。コンポジット・リレーションシップ・マッピングにのみ使用されるディスクリプタの場合、デフォルトのルート要素は不要です。
詳細は、「デフォルトのルート要素」を参照してください。
ディスクリプタのデフォルトのルート要素としてスキーマ要素を指定するには、次の手順を実行します。
「デフォルトのルート要素」オプションを選択し、このディスクリプタをルート要素として指定します。
「参照」をクリックして、このディスクリプタにルート要素として指定するスキーマ要素を選択します。詳細は、「ルート要素の選択」を参照してください。
TopLinkでは、オブジェクト・モデルへのマッピングに必須ではない、XMLソース内の付加的なデータ(コメント、処理命令、アンマップ要素など)を保存することができます。
これにより、XMLからオブジェクトへ、そして再びXMLへ返すラウンドトリップを、データの損失なしに実行できます。
XMLソース文書全体を保存するには、次の手順を実行します。
「ドキュメントの保存」オプションを選択し、TopLinkで必須でない、XML文書内の付加的な情報(コメントなど)を保存します。
TopLinkで必須でない、XML文書内の付加的な情報(コメントなど)を保存するようにXMLディスクリプタをJavaで構成するには、XMLDescriptor
メソッドsetShouldPreserveDocument
を使用して、そのためのディスクリプタ修正メソッドを作成します(「修正メソッドの構成」を参照)。