質問

すでに使用されている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>

エラータグは同じレベルで再利用され、特定のアイテムの後に来るが、他のアイテムの後にはないため、maxOccurs = <!> quot; unbounded <!> quot;を設定することはできません。関連するエラー/その他のタグのペアをxsd:sequenceでラップしようとしましたが、ユニークパーティクルアトリビューションルールを効果的に破っているので、トリックは行いません。

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

役に立ちましたか?

解決

XMLスキーマ標準を読んだところ、おそらく安全であると言えます。スキーマ内で同じ名前の非連続要素を定義するだけで、生成される(または生成できる)XMLを反映します。すべての<!> quot; error <!> quot;インスタンスは他の要素で常に区切られており、連続的ではない 、これは問題ではないはずです。たとえば、次のようなものです。

  <xs:element name="data">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="summary" minOccurs="1" maxOccurs="1" type="xs:string" />
        <xs:element ref="error" minOccurs="1" maxOccurs="1" />
        <xs:element name="details" minOccurs="1" maxOccurs="1" type="detailsType" />
        <xs:element ref="error" minOccurs="1" maxOccurs="1" />
        <xs:element name="z" minOccurs="0" maxOccurs="1" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="error" type="xs:string"/>

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

詳細にminOccurs = <!> quot; 0 <!> quotがある場合;最初の<!> quot; error <!> quot;上記のmaxOccurs <!> gt; 1、2つのエラー要素が連続して存在する場合、検証では検証できないため、Unique Particle Attributionルールに失敗します。<!> quot; error <!> quot;それらが属するスキーマで。ただし、<!> quot; error <!> quot;の各インスタンスが<!> quot; minOccurs <!> quotの適切な使用により、スキーマ内で一意に識別できます。および<!> quot; maxOccurs <!> quot;エラー要素と介在要素については、あなたは良いです。

<!> quot; error <!> quot;の連続インスタンスを持つこともできます。スキーマバリデータが、たとえばminOccursとmaxOccursを使用して、どのインスタンスが参照されているかを常に明確に把握できる限り、

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top