このセクションでは、XML 対応クラスについて、コレクション・プロパティがどのように XML スキーマに投影されるかについて説明します。このセクションでは、以下の項目について説明します。
コレクション・プロパティの XML スキーマへの投影
ほとんどの種類のプロパティでは、オブジェクトを XML ドキュメントとして投影することと完全な XML スキーマを検証目的で定義することの両方のために、完全な XML プロジェクションを指定するのに十分な情報がクラス定義に格納されています。ただし、コレクション・プロパティでは、InterSystems IRIS でサポートしている形式の定義の一部では、完全な XML スキーマに対して十分な情報が用意されていません。スキーマが必要なコンテキスト (Web サービスや Web クライアントなど) で XML プロジェクションを使用する場合、完全な XML スキーマが必要です。ない場合は、スキーマに対する検証が失敗します。スキーマに対して検証を行わない場合は、この考慮事項が適用されません。以下のテーブルは、シナリオのリストです。
コレクション・プロパティとそれらの XML プロジェクション詳細の形式
プロパティ定義の形式 |
XML の使用可否 |
XML スキーマの使用可否 |
Property PropName As List of classname または Property PropName As Array of classname |
あり |
あり |
Property PropName As %ListOfDataTypes または Property PropName As %ArrayOfDataTypes |
あり |
あり (ただし、コレクション項目の既定のタイプである文字列が適切でない場合があります) |
Property PropName As %ListOfObjects または Property PropName As %ArrayOfObjects |
あり |
なし (スキーマでは、コレクション項目のタイプが指定されません) |
以下のサブセクションでは、これらのシナリオに対応する XML スキーマを示します。
List of Classname
このセクションでは、List of Classname として定義されるプロパティが XML 対応クラスに含まれる場合、そのクラスから生成される XML スキーマの一部を示します。例えば、以下のようなプロパティ定義を考えてみます。
Property PropName As list Of %Integer(XMLITEMNAME = "MyXmlItemName");
Test.DemoList1 という名前の XML 対応クラスにこのプロパティが存在する場合、このクラスの XML スキーマには以下が含まれます。
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
targetNamespace="mytypes">
<complexType name="DemoList1">
<sequence>
<element minOccurs="0" name="PropName" type="s01:ArrayOfMyXmlItemNameLong" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="ArrayOfMyXmlItemNameLong">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s:long"/>
</sequence>
</complexType>
...
</schema>
タイプ名には以下のルールが適用されます。
-
PropName プロパティの場合、対応するタイプは ArrayOfXMLItemNameType という名前になります。
<element minOccurs="0" name="PropName" type="s01:ArrayOfMyXmlItemNameLong" xmlns:s01="mytypes"/>
Note:
XMLItemName が Type と同じ場合、PropName プロパティでは、対応するタイプは ArrayOfXMLItemName という名前になります。つまり、重複する配列項目がタイプ名から削除されます。タイプ名に重複する名前を含めるには、(%XML.SchemaOpens in a new tab のインスタンスの) AllowRedundantArrayName プロパティを 1 に指定します。同様に、Web サービス・クラスで、重複する配列項目名を WSDL のタイプに含めるには、(Web サービス・クラスの) ALLOWREDUNDANTARRAYNAME パラメータを 1 に指定します。
-
タイプ ArrayOfXMLItemNameType は、XMLItemName という名前の他のタイプの <sequence> として定義されます。
<complexType name="ArrayOfMyXmlItemNameLong">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s:long"/>
</sequence>
</complexType>
-
要素 XMLItemName は、データ型クラスに対応する XSD タイプに基づいています。
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s:long"/>
Classname がオブジェクト・クラスを参照する際、同じルールが適用されます。例えば、以下のようなプロパティ定義を考えてみます。
Property PropName As list Of SimpleObject(XMLITEMNAME = "MyXmlItemName");
Simple.Object には、MyProp と AnotherProp の 2 つのプロパティが含まれています。Test.DemoObjList という名前の XML 対応クラスにこのプロパティが存在する場合、このクラスの XML スキーマには以下が含まれます。
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
targetNamespace="mytypes">
<complexType name="DemoObjList">
<sequence>
<element minOccurs="0" name="PropName" type="s01:ArrayOfMyXmlItemNameSimpleObject" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="ArrayOfMyXmlItemNameSimpleObject">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s01:SimpleObject" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="SimpleObject">
<sequence>
<element minOccurs="0" name="MyProp" type="s:string"/>
<element minOccurs="0" name="AnotherProp" type="s:string"/>
</sequence>
</complexType>
...
</schema>
Array of Classname
このセクションでは、Array of Classname として定義されるプロパティが XML 対応クラスに含まれる場合、そのクラスから生成される XML スキーマの一部を示します。例えば、以下のようなプロパティ定義を考えてみます。
Property PropName As array Of %Integer(XMLITEMNAME = "MyXmlItemName", XMLKEYNAME = "MyXmlKeyName");
Test.DemoArray1 という名前の XML 対応クラスにこのプロパティが存在する場合、このクラスの XML スキーマには以下が含まれます。
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="mytypes">
<complexType name="DemoArray1">
<sequence>
<element minOccurs="0" name="PropName" type="s01:ArrayOfMyXmlItemNamePairOfMyXmlKeyNameLong" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="ArrayOfMyXmlItemNamePairOfMyXmlKeyNameLong">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s01:PairOfMyXmlKeyNameLong" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="PairOfMyXmlKeyNameLong">
<simpleContent>
<extension base="s:long">
<attribute name="MyXmlKeyName" type="s:string" use="required"/>
</extension>
</simpleContent>
</complexType>
...
</schema>
タイプ名には以下のルールが適用されます。
-
PropName プロパティの場合、対応するタイプは ArrayOfXMLItemNamePairOfXMLKeyNameType という名前になります。
-
"配列型プロパティの要素名と属性名の制御" で説明されているように、XMLItemName はコレクションの項目名です。データ型プロパティの場合、既定の項目名は末尾に Item が追加されたプロパティ名になります(オブジェクト・プロパティの場合、既定の項目名は短いクラス名になります)。
-
"配列型プロパティの要素名と属性名の制御" で説明されているように、XMLKeyName はコレクションのキー名です。既定は、末尾に Key が連結されたプロパティ名です。
-
Type は、プロパティ・クラスが投影される XML タイプです。
<element minOccurs="0" name="PropName" type="s01:ArrayOfMyXmlItemNamePairOfMyXmlKeyNameLong" xmlns:s01="mytypes"/>
Note:
XMLKeyName が Type と同じ場合、PropName プロパティでは、対応するタイプは ArrayOfXMLItemNamePairOfXMLKeyName という名前になります。つまり、重複する配列項目がタイプ名から削除されます。タイプ名に重複する名前を含めるには、(%XML.SchemaOpens in a new tab のインスタンスの) AllowRedundantArrayName プロパティを 1 に指定します。同様に、Web サービス・クラスで、重複する配列項目名を WSDL のタイプに含めるには、(Web サービス・クラスの) ALLOWREDUNDANTARRAYNAME パラメータを 1 に指定します。
-
タイプ ArrayOfXMLItemNamePairOfXMLKeyNameType は、PairOfXMLKeyNameType という名前の他のタイプの <sequence> として定義されます。
<complexType name="ArrayOfMyXmlItemNamePairOfMyXmlKeyNameLong">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s01:PairOfMyXmlKeyNameLong" xmlns:s01="mytypes"/>
</sequence>
</complexType>
-
タイプ PairOfXMLKeyNameType は、指定された XSD タイプの拡張です。この拡張により、XMLKeyName という名前の属性が追加されます。
<complexType name="PairOfMyXmlKeyNameLong">
<simpleContent>
<extension base="s:long">
<attribute name="MyXmlKeyName" type="s:string" use="required"/>
</extension>
</simpleContent>
</complexType>
Classname がオブジェクト・クラスを参照する際、同じルールが適用されます。例えば、以下のようなプロパティ定義を考えてみます。
Property PropName As %ArrayOfObjects(XMLITEMNAME = "MyXmlItemName", XMLKEYNAME = "MyXmlKeyName");
Simple.Object には、MyProp と AnotherProp の 2 つのプロパティが含まれています。Test.DemoObjArray という名前の XML 対応クラスにこのプロパティが存在する場合、このクラスの XML スキーマには以下が含まれます。
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
targetNamespace="mytypes">
<complexType name="DemoObjArray">
<sequence>
<element minOccurs="0" name="PropName" type="s01:ArrayOfMyXmlItemNamePairOfMyXmlKeyNameSimpleObject" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="ArrayOfMyXmlItemNamePairOfMyXmlKeyNameSimpleObject">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s01:PairOfMyXmlKeyNameSimpleObject" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="PairOfMyXmlKeyNameSimpleObject">
<complexContent>
<extension base="s01:SimpleObject" xmlns:s01="mytypes">
<attribute name="MyXmlKeyName" type="s:string" use="required"/>
</extension>
</complexContent>
</complexType>
<complexType name="SimpleObject">
<sequence>
<element minOccurs="0" name="MyProp" type="s:string"/>
<element minOccurs="0" name="AnotherProp" type="s:string"/>
</sequence>
</complexType>
</schema>
%ListOfDataTypes
このセクションでは、%ListOfDataTypesOpens in a new tab として定義されるプロパティが XML 対応クラスに含まれる場合、そのクラスから生成される XML スキーマの一部を示します。例えば、以下のようなプロパティ定義を考えてみます。
Property PropName As %ListOfDataTypes(XMLITEMNAME = "MyXmlItemName");
Test.DemoList という名前の XML 対応クラスにこのプロパティが存在する場合、このクラスの XML スキーマには以下が含まれます。
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="mytypes">
<complexType name="DemoList">
<sequence>
<element minOccurs="0" name="PropName" type="s01:ArrayOfMyXmlItemNameString" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="ArrayOfMyXmlItemNameString">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s:string"/>
</sequence>
</complexType>
</schema>
タイプ名のルールの詳細は、"List of Classname" を参照してください。コレクション項目 (この例では PropNameItem) は XSD 文字列型に基づいています。
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s:string"/>
つまり、コレクション項目は文字列であることが想定されています。"コレクション・クラス使用のオプション" も参照してください。
%ArrayOfDataTypes
このセクションでは、%ArrayOfDataTypesOpens in a new tab として定義されるプロパティが XML 対応クラスに含まれる場合、そのクラスから生成される XML スキーマの一部を示します。例えば、以下のようなプロパティ定義を考えてみます。
Property PropName As %ArrayOfDataTypes(XMLITEMNAME = "MyXmlItemName", XMLKEYNAME = "MyXmlKeyName");
Test.DemoArray という名前の XML 対応クラスにこのプロパティが存在する場合、このクラスの XML スキーマには以下が含まれます。
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
targetNamespace="mytypes">
<complexType name="DemoArray">
<sequence>
<element minOccurs="0" name="PropName" type="s01:ArrayOfMyXmlItemNamePairOfMyXmlKeyNameString" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="ArrayOfMyXmlItemNamePairOfMyXmlKeyNameString">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s01:PairOfMyXmlKeyNameString" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="PairOfMyXmlKeyNameString">
<simpleContent>
<extension base="s:string">
<attribute name="MyXmlKeyName" type="s:string" use="required"/>
</extension>
</simpleContent>
</complexType>
...
</schema>
タイプ名のルールの詳細は、"Array of Classname" を参照してください。コレクション項目 (この例では PairOfMyXmlKeyNameString) は XSD 文字列型に基づいています。
<complexType name="PairOfMyXmlKeyNameString">
<simpleContent>
<extension base="s:string">
<attribute name="MyXmlKeyName" type="s:string" use="required"/>
</extension>
</simpleContent>
</complexType>
つまり、コレクション項目は文字列であることが想定されています。"コレクション・クラス使用のオプション" も参照してください。
%ListOfObjects
このセクションでは、%ListOfObjectsOpens in a new tab として定義されるプロパティが XML 対応クラスに含まれる場合、そのクラスから生成される XML スキーマの一部を示します。例えば、以下のようなプロパティ定義を考えてみます。
Property PropName As list Of %Integer(XMLITEMNAME = "MyXmlItemName");
Test.DemoObjList1 という名前の XML 対応クラスにこのプロパティが存在する場合、このクラスの XML スキーマには以下が含まれます。
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
targetNamespace="mytypes">
<complexType name="DemoObjList1">
<sequence>
<element minOccurs="0" name="PropName" type="s01:ArrayOfMyXmlItemNameRegisteredObject" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="ArrayOfMyXmlItemNameRegisteredObject">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s01:RegisteredObject" xmlns:s01="mytypes"/>
</sequence>
</complexType>
...
</schema>
タイプ名のルールの詳細は、"List of Classname" を参照してください。コレクション項目のタイプは未定義の RegisteredObject です。
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s01:RegisteredObject" xmlns:s01="mytypes"/>
したがって、このスキーマは使用できません。"コレクション・クラス使用のオプション" を参照してください。
%ArrayOfObjects
このセクションでは、%ArrayOfObjectsOpens in a new tab として定義されるプロパティが XML 対応クラスに含まれる場合、そのクラスから生成される XML スキーマの一部を示します。例えば、以下のようなプロパティ定義を考えてみます。
Property PropName As %ArrayOfObjects(XMLITEMNAME = "MyXmlItemName", XMLKEYNAME = "MyXmlKeyName");
Test.DemoObjArray1 という名前の XML 対応クラスにこのプロパティが存在する場合、このクラスの XML スキーマには以下が含まれます。
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="mytypes">
<complexType name="DemoObjArray1">
<sequence>
<element minOccurs="0" name="PropName" type="s01:ArrayOfMyXmlItemNamePairOfMyXmlKeyNameRegisteredObject" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="ArrayOfMyXmlItemNamePairOfMyXmlKeyNameRegisteredObject">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="MyXmlItemName" nillable="true" type="s01:PairOfMyXmlKeyNameRegisteredObject" xmlns:s01="mytypes"/>
</sequence>
</complexType>
<complexType name="PairOfMyXmlKeyNameRegisteredObject">
<complexContent>
<extension base="s01:RegisteredObject" xmlns:s01="mytypes">
<attribute name="MyXmlKeyName" type="s:string" use="required"/>
</extension>
</complexContent>
</complexType>
...
</schema>
タイプ名のルールの詳細は、"List of Classname" を参照してください。コレクション項目のタイプは未定義の RegisteredObject に基づいています。
<complexType name="PairOfMyXmlKeyNameRegisteredObject">
<complexContent>
<extension base="s01:RegisteredObject" xmlns:s01="mytypes">
<attribute name="MyXmlKeyName" type="s:string" use="required"/>
</extension>
</complexContent>
</complexType>
したがって、このスキーマは使用できません。"コレクション・クラス使用のオプション" を参照してください