2

xs:allとの組み合わせは可能xs:sequenceですか?

私は、要素name、id、url、tags、priority、statuws_raw、activeで構成される要素probenodeを持つxml構造を持っています。そして、デバイスとグループの組み合わせ。

デバイスとグループは0回以上発生する可能性があります。

以下のソリューションは、要素に無制限を使用することが許可されていないため、機能しません。すべてのグループ内。

<xs:complexType name="probenodetype">
    <xs:all>
        <xs:element name="name" type="xs:string" />
        <xs:element name="id" type="xs:unsignedInt" />
        <xs:element name="url" type="xs:string" />
        <xs:element name="tags" />
        <xs:element name="priority" type="xs:unsignedInt" />
        <xs:element name="status_raw" type="xs:unsignedInt" />
        <xs:element name="active" type="xs:boolean" />
        <xs:element name="device" type="devicetype" minOccurs="0" maxOccurs="unbounded">
            <!-- zie devicetype -->
        </xs:element>
        <xs:element name="group" type="grouptype" minOccurs="0" maxOccurs="unbounded">
            <!-- zie grouptype -->
        </xs:element>
    </xs:all>
    <xs:attribute name="noaccess" type="xs:integer" use="optional" />
</xs:complexType>
4

1 に答える 1

7

XSD 1.0では、xs:allの子のmaxOccursを1に設定する必要があります。

XSD 1.1では、この制約が解除されます。

したがって、代替案は次のようになります。

  • XSD 1.1プロセッサ(SaxonまたはXerces-J)を使用します。

  • XSD 1.0を使用し、probenodetypeの子に順序を課します。これは、子が表示される順序に情報が含まれている場合に問題になります(したがって、idの後にurlが続くのは、urlの後にidが続くのとは異なります...)。

いくつかの単純なケースでは、選択とシーケンスのみを使用して、希望するものを正確に受け入れるコンテンツモデルを作成することが可能ですが、7つの必須要素を使用すると、結果のコンテンツモデルが長すぎて複雑になり、役に立たなくなる可能性があります。

この時点で、一部のユーザーはあきらめて、繰り返し可能なORグループを持つ複合型を作成し、名前、ID、URLなどがすべて少なくとも1回、最大で1回アプリケーションに発生することを確認する責任を移します。これにより、XMLの生成者は、固定された順序について心配する必要がなくなります(また、一部の人にとって重要な情報漏えいのサイドチャネルが開かれます)が、データプロバイダーとデータ間の契約の文書化としてスキーマの有用性がやや低下します。消費者。

于 2013-01-31T23:15:13.100 に答える