我一直认为 XMLSchema 和 DTD 是等价的,但后者在建模复杂关系(如继承)时使用起来更麻烦。
最近我想构建一个模式来验证具有如下结构的文档:
<data>
<array>
<int></int>
<int></int>
</array>
</array>
<float></float>
<float></float>
</array>
<int><int>
<float></float>
</data>
<data> 中的元素可以按任何顺序出现,每个元素的基数为 0..* 使用 XMLSchema,如果我使用 <xs:all> 定义复杂类型,我可以让元素乱序,但最大基数为 1。 < xs:sequence > 和 < xs:choice > 是其他明显的候选者,但它们比我想要的更严格。
然后我注意到 DTD 似乎能够像这样实现这一点:
<!ELEMENT data (array | float | int)*>
有什么方法可以构建一个等效的模式,还是我必须在这里使用 DTD?