XML の要素名と属性名の制御
InterSystems IRIS クラスおよびプロパティの名前と XML 要素および属性の名前との間には、既定の対応関係があります。この既定はオーバーライドできます。
複数の同名要素が XML ドキュメントに含まれる場合も、InterSystems IRIS でサポートされています。"特殊なトピック" を参照してください。
このトピックの XML 例はリテラル形式になります。
このページで説明されているクラスとプロパティのパラメータ |
---|
|
既定の XML の要素名と属性名
InterSystems IRIS の名前と XML の要素名や属性名との間にある既定の対応関係は、以下のとおりです。
-
クラスの場合、それに対応する XML の要素名または属性名は短いクラス名と同じです。
-
このクラスのプロパティの場合、それに対応する XML の要素名または属性名はプロパティ名と同じです。
XML の要素または属性として投影されるかどうかはプロパティ定義によって決まります。"単純なプロパティのプロジェクションが持つ形式の制御" を参照してください。
プロパティ名に引用符が含まれている場合、引用符は XML の要素名や属性名には含まれません。例えば、以下のプロパティを考えてみます。
Property "Quoted Property" As %String;
このプロパティをどのようにマッピングするかによって、このプロパティは要素 <Quoted Property> または属性 Quoted Property として投影されます。
-
プロパティがリストまたは配列である場合、そのプロパティは自動的に下位要素で構成され、これらの各下位要素はそのリストまたは配列内の 1 つの項目に対応します。既定では、下位要素の名前はプロパティ名の末尾に Item を追加したものです。
-
プロパティが配列である場合、下位要素にも、対応するキーを示す属性があります。既定では、その属性の名前はプロパティ名に Key を追加したものです。
最上位レベル要素として投影されたオブジェクトの要素名または属性名の制御
クラス・インスタンスを最上位レベル要素として投影すると、その XML 名は以下のように決定されます。
クラスの XMLNAME パラメータ | クラスの XMLType パラメータ | タグ (要素または属性) |
---|---|---|
指定あり | 無視 | XMLNAME の値 |
指定なし | 指定あり | XMLTYPE の値 |
指定なし | 短いクラス名 |
XMLTYPE の詳細は、"XML スキーマへの投影の制御" を参照してください。
例えば、Sample.Address クラスのオブジェクトをエクスポートすると、既定ではこれらのオブジェクトは以下のように表されます。
<Address>
<Street>5064 Elm Street</Street>
<City>Jackson</City>
<State>PA</State>
<Zip>27621</Zip>
</Address>
Sample.Address クラスの XMLNAME パラメータを指定したとします。以下はその例です。
Parameter XMLNAME = "HomeAddress";
この場合の出力は以下のように変わります。
<HomeAddress>
<Street>5064 Elm Street</Street>
<City>Jackson</City>
<State>PA</State>
<Zip>27621</Zip>
</HomeAddress>
これらのパラメータは、オブジェクトを XML にエクスポートするときにオーバーライドできます。詳細は、"XML ツールの使用法" を参照してください。
単純なプロパティのタグの制御
XML 対応オブジェクトでは、それぞれの単純なプロパティは、マッピングの方法に応じて、XML の要素または属性として投影されます。いずれの場合も、既定では InterSystems IRIS プロパティ名が XML の要素名または属性名として使用されます。プロパティに別の XML 名を指定するには、そのプロパティの XMLNAME パラメータで指定します。
以下はその例です。
Property Zip As %String (XMLNAME = "PostalCode");
前述の例で見た出力は以下のように変わります。
<HomeAddress>
<Street>5064 Elm Street</Street>
<City>Jackson</City>
<State>PA</State>
<PostalCode>27621</PostalCode>
</HomeAddress>
プロパティが今度は別の InterSystems IRIS オブジェクト・クラスに入ると、XML プロジェクションではそのクラスのクラス名と XMLNAME パラメータが無視されることに注意してください。例えば、Person クラスに Address という名前のプロパティがあり、それが Address クラスへの参照であるとします。Person オブジェクトの投影は以下のようになります。
<Person>
<Name>Zevon,Juanita Q.</Name>
<DOB>1986-08-18</DOB>
<Address>
<Street>5064 Elm Street</Street>
<City>Jackson</City>
<State>PA</State>
<Zip>27621</Zip>
</Address>
</Person>
<Address> 要素の名前は、Person オブジェクト内の対応するプロパティの名前によって決まります。これは、アドレス・オブジェクトが、直接インポートまたはエクスポートされるオブジェクトではなく、インポートまたはエクスポートされるオブジェクトのプロパティであるからです。
他のプロパティと同様に、この名前は、そのプロパティの XMLNAME パラメータを指定することでオーバーライドできます。以下はその例です。
Property Address As MyApp.Address (XMLNAME = "EmployeeAddress");
前述の例で見た出力は以下のように変わります。
<Person>
<Name>Zevon,Juanita Q.</Name>
<DOB>1986-08-18</DOB>
<EmployeeAddress>
<Street>5064 Elm Street</Street>
<City>Jackson</City>
<State>PA</State>
<Zip>27621</Zip>
</EmployeeAddress>
</Person>
リスト型プロパティの要素名と属性名の制御
このセクションは、XMLPROJECTION を "ELEMENT" と指定するコレクション・プロパティには適用されません。そのようなプロパティの場合、各リスト項目はクラスの別のプロパティとして扱われます。"コレクション・プロパティのプロジェクションが持つ形式の制御" を参照してください。
XML 対応オブジェクトの場合、下位要素を持つ要素にリスト型プロパティが投影され、これらの各下位要素はそのリストの 1 つの項目に対応します。プロパティ ColorOptions を持つ InterSystems IRIS オブジェクトがあり、このプロパティが "Red"、"Green"、および "Blue" という 3 つの文字列のリストと等しいとします。既定では、このプロパティは以下の XML に対応します。
<ColorOptions>
<ColorOptionsItem>Red</ColorOptionsItem>
<ColorOptionsItem>Green</ColorOptionsItem>
<ColorOptionsItem>Blue</ColorOptionsItem>
</ColorOptions>
ここでは、リストの 1 項目に対応する ColorOptionsItem という下位要素が示されています。この下位要素の名前は以下のように決定されます。
プロパティの XMLITEMNAME パラメータ | プロパティの XMLNAME パラメータ | タグ (要素または属性) |
---|---|---|
指定あり | 無視 | XMLITEMNAME の値 |
指定なし | 指定あり | 末尾に Item が連結された XMLNAME の値 |
指定なし | リスト項目がデータ型プロパティに対応する場合、タグは末尾に Item が連結されたプロパティ名になります。リスト項目がオブジェクト・クラスに対応する場合、タグは短いクラス名になります。 |
配列の項目にも同じ考え方が適用されます。配列のキーは、別の方法で処理されます。
配列型プロパティの要素名と属性名の制御
このセクションは、XMLPROJECTION を "ELEMENT" と指定するコレクション・プロパティには適用されません。そのようなプロパティの場合、各配列項目はクラスの別のプロパティとして扱われます。"コレクション・プロパティのプロジェクションが持つ形式の制御" を参照してください。
XML 対応オブジェクトでは、リスト・プロパティが投影される方法と基本的に同じ方法で、下位要素を持つ要素に配列型プロパティが投影され、これらの各下位要素はそのリストの 1 つの項目に対応します。前のセクションを参照してください。
各下位要素は、項目に関連付けられているキーを示す別の属性を持っています。この属性の名前を制御できます。
以下のサンプル・プロパティについて考えてみましょう。
Property Tools As %ArrayOfDataTypes;
例えば、(あるオブジェクト・インスタンスに対して) このプロパティが以下のような配列で構成されるとします。
-
キー 845 で格納されている値 Hammer
-
キー 1009 で格納されている値 Monkey wrench
-
キー 3762 で格納されている値 Screwdriver
既定では、このプロパティは以下の XML に対応します。
<Tools>
<ToolsItem ToolsKey="845">Hammer</ToolsItem>
<ToolsItem ToolsKey="1009">Monkey Wrench</ToolsItem>
<ToolsItem ToolsKey="3762">Screwdriver</ToolsItem>
</Tools>
ここでは、配列のキーに対応する ToolsKey という属性が作成されています。この属性の名前は以下のように決定されます。
プロパティの XMLKEYNAME パラメータ | プロパティの XMLNAME パラメータ | キーがある属性の名前 |
---|---|---|
指定あり | 無視 | XMLKEYNAME の値 |
指定なし | 指定あり | 末尾に Key が連結された XMLNAME の値 |
指定なし | 末尾に Key が連結されたプロパティ名 |
XMLITEMNAME プロパティ・パラメータは属性名に影響を与えないことに注目してください。このパラメータの詳細は、前のセクションを参照してください。
例えば、以下のように XMLKEYNAME は設定しないが、XMLNAME をMyXMLName に設定するとします。
Property Tools As %ArrayOfDataTypes(XMLNAME = "MyXMLName");
次に、同じプロパティが以下の XML フラグメントに対応するとします。
<MyXMLName>
<MyXMLNameItem MyXMLNameKey="845">Hammer</MyXMLNameItem>
<MyXMLNameItem MyXMLNameKey="1009">Monkey Wrench</MyXMLNameItem>
<MyXMLNameItem MyXMLNameKey="3762">Screwdriver</MyXMLNameItem>
</MyXMLName>