代替グループをそのグループ内の単一の要素に限定する必要があるようです。ただし、検証中に置換グループや要素を処理するため、直感は特定のカーディナリティにのみ適用されます。たとえば、次のスキーマが有効ではありませんXSD:置換グループの制限
:
<xs:element name="representedOrganization" type="Organization"/>
<xs:element name="scopingOrganization" type="Organization" substitutionGroup="representedOrganization"/>
<xs:complexType name="Test.Parent">
<xs:sequence>
<xs:element ref="representedOrganization" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Test.Child">
<xs:complexContent>
<xs:restriction base="Test.Parent">
<xs:sequence>
<xs:element name="scopingOrganization" type="Organization" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
しかし、制限のカーディナリティに小さな変化(すなわちminOccurs
)が有効です。
<xs:element name="representedOrganization" type="Organization"/>
<xs:element name="scopingOrganization" type="Organization" substitutionGroup="representedOrganization"/>
<xs:complexType name="Test.Parent">
<xs:sequence>
<xs:element ref="representedOrganization" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Test.Child">
<xs:complexContent>
<xs:restriction base="Test.Parent">
<xs:sequence>
<xs:element name="scopingOrganization" type="Organization" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
これは動作しません。直感的に...しかし、なぜですか?