2

私は W3C XML スキーマに取り組んでいます (私が書いたものではありません)。1 つのツール xmllint は、スキーマの使用を拒否します。

traceroute.xsd:658: element element: Schemas parser error : Element
 '{http://www.w3.org/2001/XMLSchema}element', attribute 'maxOccurs': The value
 '4294967295' is not valid. Expected is '(xs:nonNegativeInteger | unbounded)'.

4294967295 は 2^32-1 なので、明らかに、xmllint は符号付き 32 ビットの整数を実装していますが、これでは十分ではありません。

xmllint は正しいですか? 標準は明らかに整数のサイズを制限していません:

http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#p-max_occurs http://www.w3.org/TR/2004/REC-xmlschema-2-20041028 /datatypes.html#nonNegativeInteger

nonNegativeInteger の値空間は無限集合 {0,1,2,...} です。

したがって、実装者は無限整数を使用することになっています...

ベストプラクティスは何ですか?

実装者はbigintsまたは同様のものを使用する必要がありますか? (その場合、xmllint は間違っています。)

スキーマの作成者は、maxOccurs の「妥当な」値に制限する必要がありますか? (その場合は、スキーマの作成者に問題を報告します。)

4

3 に答える 3

4

おそらくmaxOccurs属性の「技術的に」正しい使用法ですが、この使用法は(IMO)のmaxOccurs使用目的ではありません。

スキーマライターは、この要素が何度でも発生する可能性があることを意味しているように見えます。その場合、定義の正しい値はになりますunbounded

現在の定義が意味することは、このスキーマを消費するシステムは、要素数までは完全に正しく動作しますが4294967295、それ以上の場合は失敗するということです。

これは理にかなっている技術的要件だと思います-多くのシステムがint32要素の最大数としてコード化されているので、理想的な世界ではこの制限を適用したいと思うかもしれませんが、それは本当に合理的または有用ではないと思います現実の世界でスキーマに取り込もうとすること。

また、その数の要素を送信している場合、XMLはおそらく間違ったデータ形式です。

unboundedスキーマの作成者は、属性値を使用するか、このXMLを使用するシステムの制限と要件に実際に一致する値を使用することをお勧めします。

于 2008-11-18T21:48:27.777 に答える
2
于 2008-12-11T20:38:48.407 に答える