1

既に使用されている XML 形式のスキーマを作成する必要があります。既存の XML は別のプログラムによって既に生成されており、より標準的な XML 形式を使用するために変更する必要があるすべての場所を追跡するのは難しいようです。

XML 構造に似た例を次に示します。

<data>
    <summary>some info</summary>
    <error>error message (only if there was an error)</error>
    <details>more info
        <x>more</x>
        <y>even more</y>
    </details>
    <error>another error message</error>
    <z>some extra info</z>
</data>

エラータグは同じレベルで再利用され、特定の項目の後に来ますが、他の項目の後に来ることに注意してください。関連するエラー/その他のタグのペアを xsd:sequence でラップしようとしましたが、まだ効果的に Unique Particle Attribution ルールを破っているため、うまくいきません。

これを行うことはできますか、それとも、このスキーマが検証されないことを他の開発者に知らせる必要がありますか?

4

1 に答える 1

2

私がXML スキーマ標準を読んだところ、おそらく安全であることがわかりました。スキーマで同じ名前の非連続要素を定義するだけで、生成される (または生成される可能性がある) XML を反映できます。すべての「エラー」インスタンスが常に他の要素で区切られており、連続していない限り、これは問題になりません。たとえば、次のようなものです。

  <xs:要素名="データ">
    <xs:complexType>
      <xs:シーケンス>
        <xs:element name="summary" minOccurs="1" maxOccurs="1" type="xs:string" />
        <xs:element ref="エラー" minOccurs="1" maxOccurs="1" />
        <xs:element name="details" minOccurs="1" maxOccurs="1" type="detailsType" />
        <xs:element ref="エラー" minOccurs="1" maxOccurs="1" />
        <xs:element name="z" minOccurs="0" maxOccurs="1" type="xs:string" />
      </xs:シーケンス>
    </xs:complexType>
  </xs:要素>

  <xs:要素名="エラー" タイプ="xs:文字列"/>

  <xs:complexType name="detailsType">
    ....
  </xs:complexType>

details に minOccurs="0" があり、上記の最初の "error" に maxOccurs > 1 がある場合、2 つのエラー要素が連続して存在する場合、検証が検証できないため、Unique Particle Attribution ルールに失敗します。 "それらが属するスキーマ内。ただし、「エラー」の各インスタンスがスキーマ内で一意に識別できる限り、エラー要素と介在する要素に対して「minOccurs」と「maxOccurs」を適切に使用することで問題ありません。

スキーマ バリデーターが minOccurs と maxOccurs (たとえば) を使用して参照されているインスタンスを常に明確に把握できる限り、"エラー" の連続したインスタンスを持つことさえできます。

要素が任意の順序で、任意の繰り返しで発生する可能性がある xhtml について考えてみてください。

編集:元の質問の編集を反映するように更新されました。

于 2009-01-23T20:13:03.740 に答える