C# クラスをシリアル化して生成された XML を検証する XSD スキーマを作成しました。
最初の実装ではシーケンスを使用しましたが、これにより XML 内の要素の順序に多くの問題が発生しました (要素が間違った順序で表示されると、検証エラーが発生します)。したがって、すべての xs:sequence を xs:all に変更するのは簡単だと思いましたが、グループ化された要素を参照したいので、これではまったく問題が解決しません...
問題を説明するために、簡単な例を作成しました。以下の XML スキーマ定義を参照してください。このスキーマは私の問題を説明するためだけのものであり、XML 構造の再検討に関するヒントは必要ありません。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="PostalAddresses">
<xs:all>
<xs:element minOccurs="1" name="PostalAddres">
<xs:complexType>
<xs:all>
<xs:element name="Street" type="xs:string" />
<xs:element name="StreetNumber" type="xs:string" />
<xs:element name="ZipCode" type="xs:unsignedInt" />
<xs:element name="City" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:group name="AddressFields">
<xs:all>
<xs:element name="FirstName" type="xs:string" />
<xs:element name="LastName" type="xs:string" />
<xs:element name="BirthDate" type="xs:date" />
</xs:all>
</xs:group>
<xs:element name="Addresses">
<xs:complexType>
<xs:sequence>
<xs:group ref="AddressFields" />
<xs:element name="PostalAddresses" type="PostalAddresses"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
問題はAddresses
、シーケンスをすべての要素に変更できない要素内で発生します。次の検証エラー メッセージが表示されました。「すべて」へのグループ参照がルート パーティクルではないか、拡張として使用されています。