4

複合型をどのように定義すればよいかわかりません。

今日私はこれを持っています:

<xsd:element name="batch_requests_callbacks">
    <xsd:complexType>
      <xsd:sequence>
            <xsd:element ref="document_id" minOccurs="1" maxOccurs="1"/>
            <xsd:choice minOccurs="0" maxOccurs="1">
              <xsd:element ref="filename"/>
              <xsd:element ref="error"/>
            </xsd:choice>
            <xsd:element ref="author" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="version" default="1.0"/>
    </xsd:complexType>
</xsd:element>

しかし、その場合、内部のタグの順序xsd:sequenceは重要であり、私はその動作を望んでいません。

使用する場合xsd:all、タグの順序はありませんが、maxOccurs無制限に設定することはできませんxsd:choicexsd:all

私の選択肢は何ですか?

4

2 に答える 2

5

順序付けされていない要素の検証をエミュレートするために、<xsd:choice minOccurs="0" maxOccurs="unbounded">の代わりにを使用できます。xsd:sequenceこれにより、の制限が回避されxsd:allます。

于 2013-01-16T15:25:44.343 に答える
1

XSD 1.0では、代替案は(物事を単純にしたい場合)、それらを特定したとおりです。

  • 特定の順序を必要とするシーケンス
  • すべて、そうではありません。

順序に意味がない場合(つまり、シーケンスdocument-id、filename、authorとシーケンスauthor、document-id、filenameが同じ情報を持っている場合)、シーケンスを修正する際の表現力が失われることはありません。または、prediで提案されているように、無制限の選択肢を使用して、検証ロジックの一部(カーディナリティのチェック)をアプリケーションの別のレイヤーに配置することもできます。私が最も強く思う語彙デザイナーは、一般的にこの状況でシーケンスを推奨します。

他の2つのアプローチは言及する価値があります:

  • XSD 1.1では、すべてのグループのmaxOccursに対する制約が解除されました(ただし、すべてのグループに対する他の制約は解除されていません)。
  • 必要な言語は明らかに正規言語であるため、ネストされた選択肢とシーケンスを使用して、その言語のコンテンツモデルを作成できます。これは、XSDの「一意のパーティクルアトリビューション」制約によって少し面倒になります。つまり、コンテンツモデルを非決定論的にする可能性のあるものはすべて回避する必要がありますが、実行可能です。具体的な例は、別の質問への回答に示されています。
于 2013-01-16T16:14:24.730 に答える