1

次の xml をサポートするための xsd 定義は何ですか?

<xml>
    <RequiredElementA></RequiredElementA>
    <RequiredElementB></RequiredElementB>
    <RequiredElementC></RequiredElementC>
    <OptionalElementD></OptionalElementD>
    <OptionalElementE></OptionalElementE>
</xml>

最初の 3 つは必須にしたいのですが、最後の 2 つはオプションです。順序は関係ありません (ただし、はい/いいえの順序は必須ではありません)。

4

1 に答える 1

3

子の順序が何の情報も伝えない場合、通常は順序を修正するのが最も簡単です。

<xs:complexType name="fixedOrder">
  <xs:sequence>
    <xs:element ref="RequiredElementA"/>
    <xs:element ref="RequiredElementB"/>
    <xs:element ref="RequiredElementC"/>
    <xs:element ref="RequiredElementD" minOccurs="0"/>
    <xs:element ref="RequiredElementE" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

順序に情報が含まれている場合 (たとえば、A、B、C のユーザーのランク順序を記録し、オプションで D と E を含める場合)、順序を制約なしにすることができます。

<xs:complexType name="variableOrder">
  <xs:all>
    <xs:element ref="RequiredElementA"/>
    <xs:element ref="RequiredElementB"/>
    <xs:element ref="RequiredElementC"/>
    <xs:element ref="RequiredElementD" minOccurs="0"/>
    <xs:element ref="RequiredElementE" minOccurs="0"/>
  </xs:all>
</xs:complexType>

情報が伝わらなくても、制約のない秩序を望む人もいます。これにより、データ ソースが所定の順序を検索する必要がなくなりますが、検証がやや複雑になります。

于 2012-09-11T16:11:49.310 に答える