1

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、シーケンスをすべての要素に変更できない要素内で発生します。次の検証エラー メッセージが表示されました。「すべて」へのグループ参照がルート パーティクルではないか、拡張として使用されています。

4

0 に答える 0