特殊なトピック
この章では、以下に示す追加の特殊なトピックについて説明します。
この章の XML 例はリテラル形式になります。
この章で説明されているクラスとプロパティのパラメータ |
---|
|
要素を閉じる形式の制御
XML で属性のみを含む要素は、以下のいずれかで示すことができます。
<tag attribute="value" attribute="value" attribute="value"></tag> <tag attribute="value" attribute="value" attribute="value"/>
Caché は、これらの形式を等価と認識します。%XML.WriterOpens in a new tab のあるオブジェクトをエクスポートすると、閉じる形式は制御できますが、XML プロジェクション自体は変更されません。"Caché XML ツールの使用法" の “Caché オブジェクトからの XML 出力の記述” の章の “要素を閉じる形式の制御” を参照してください。
エクスポート後のアンスウィズルの制御
Caché XML ツールを使用して、XML 対応の永続的なオブジェクトをエクスポートすると、通常どおり、必要な情報がすべて、メモリに自動的にスウィズルされます。この情報にはオブジェクト値プロパティが含まれています。オブジェクトをエクスポートしたら、いずれのオブジェクト・リストもアンスウィズルされますが、(既定では) 単一のオブジェクト参照はアンスウィズルされません。大きなオブジェクトの場合は、<STORE> エラーが発生する可能性があります。
このシナリオで、いずれの単一オブジェクト参照もアンスウィズルされるようにするには、XML 対応のクラスで XMLUNSWIZZLE パラメータを以下のように設定します。
Parameter XMLUNSWIZZLE = 1;
このパラメータの既定値は 0 です。
エクスポートでの Caché ID の投影
Caché オブジェクトを (別のオブジェクトのプロパティとしてではなく) 最上位レベルで投影する際、その内部 ID、OID、およびグローバルに一意な ID はオブジェクト・プロパティとして使用できないので、これらの ID は投影されません。ただし、場合によっては、オブジェクト ID を一意の識別子として使用する必要がある場合があります。そこで、例えば、ストアド・オブジェクトを更新する前に、入力 (変更された) オブジェクトを対応するストアド・オブジェクトと照合できます。
Caché XML サポートでは、Caché オブジェクト識別子の XML ドキュメントへの投影に使用できるヘルパー・クラス、%XML.IdOpens in a new tab (内部 ID 用)、%XML.OidOpens in a new tab (OID 用)、および %XML.GUIDOpens in a new tab (グローバルに一意な ID 用) が用意されています。
これらのクラスを使用するには、特殊なプロパティを、エクスポートしようとする ID を含めることを目的とする XML 対応クラスに追加します。このプロパティのタイプは、%XML.IdOpens in a new tab、%XML.OidOpens in a new tab、または %XML.GUIDOpens in a new tab である必要があります。クラスの SQL プロジェクションに含まれないように、このプロパティを投影して、このプロパティを Transient としてマークする必要があります。
XML へのエクスポートの際は、XML 対応クラスのオブジェクトをメモリに入れます。オブジェクトがメモリに入ると、追加した特殊なプロパティが要求された ID を Caché 内部ストレージから取得し、その値を (エクスポートできるように) 含めます。
例えば、以下のクラスを考えてみます。
Class MyApp4.Obj.Person4 Extends (%Persistent,%Populate,%XML.Adaptor)
{
Property IdForExport As %XML.Id
(XMLNAME="CacheID", XMLPROJECTION="ELEMENT") [Private, Transient];
Property Name As %Name;
Property DOB As %Date(FORMAT = 5, MAXVAL = "+$h");
}
このクラスでは、特殊なプロパティは IdForExport です。このプロパティは、CacheID という XML 要素名で投影されます。
このクラスの出力例は以下のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Person>
<CacheID>1</CacheID>
<Name>Marks,Jules F.</Name>
<DOB>1989-04-02</DOB>
</Person>
<Person>
<CacheID>2</CacheID>
<Name>Palmer,Angelo O.</Name>
<DOB>1937-11-15</DOB>
</Person>
...
エクスポート時のネームスペース接頭語の制御
オブジェクトの XML 出力を生成する場合、システムによって適宜ネームスペース接頭語が生成されますが、必要に応じてその接頭語を指定できます。そのためには、XML 対応オブジェクトのクラス定義で以下のパラメータを設定します。
このクラスのネームスペースと関連付けるための接頭語を指定します。
詳細は、"Caché XML ツールの使用法" の “Caché オブジェクトからの XML 出力の記述” を参照してください。