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