モデル・グループ配列は、モデル・グループが maxOccurs > 1 の値を持っているときに作成されます。
モデル・グループはフラット化され、DataObject の中で表現されないため、モデル・グループの内部のプロパティーは複数カーディナリティー・プロパティーになり、これにより isMany() メソッドは、まだ true でなくても true を返します。 それらの minOccurs および maxOccurs ファセットは、収容しているモデル・グループのファセットによって乗算されます。Choice は、他のモデル・グループと同じように maxOccurs ファセットを乗算しますが、minOccurs の乗算値として常に 0 を使用します。なぜなら、choice 内のいずれかのデータは選択されない場合があるからです。
例えば、以下の XSD にはモデル・グループ配列があります。
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ModelGroupArray"> <xsd:complexType name="ModelGroupArray"> <xsd:sequence minOccurs="2" maxOccurs="5"> <xsd:element name="element1" type="xsd:string"/> <xsd:element name="element2" type="xsd:string" minOccurs="0" maxOccurs="3"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
前に述べたように、element1 と element2 は get(...) アクセサーが List を返すよう、この時点で複数カーディナリティーになります。Element1 の minOccurs はデフォルトの 1 で、maxOccurs もデフォルトの 1 です。Element2 の minOccurs は 0 で、 maxOccurs は 3 です。次の例では、それらの新しい minOccurs と maxOccurs は、以下のようになります。
DataObject - ModelGroupArray Property[0] - element1 - minOccurs=(2*1)=2 - maxOccurs=(5*1)=5 Property[1] - element2 - minOccurs=(2*0)=0 - maxOccurs=(5*3)=15
タイプが Choice だとすると:
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ModelGroupArray"> <xsd:complexType name="ModelGroupArray"> <xsd:choice minOccurs="2" maxOccurs="5"> <xsd:element name="element1" type="xsd:string"/> <xsd:element name="element2" type="xsd:string" minOccurs="0" maxOccurs="3"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
は、以下の minOccurs を生成します。これは、element1 だけが毎回選択されるか element2 だけが毎回選択される choice の除外によるもので、したがって、妥当性検査をパスするためには、どちらも 0 個のオカレンスを持つことができなければなりません。
DataObject - ModelGroupArray Property[0] - element1 - minOccurs=(0*1)=0 - maxOccurs=(5*1)=5 Property[1] - element2 - minOccurs=(0*0)=0 - maxOccurs=(5*3)=15