![]() |
1
0
当您谈到“一组XML文档,我们可以为其制定模式”时,您的意思是模式必须接受集合内的所有文档,并拒绝集合外的所有文档吗?一般来说,如果你从一组任意的文档开始,不管你选择了什么样的模式语言,你都不太可能制定出这样的模式。当然,具有这种属性的文档集在不同的模式语言中是不同的。 此外,如果您的文档集是有限的,那么定义这样的模式并不是非常有用,因为不可能编写任何符合该模式的新文档。如果文档集是无限的,那么定义文档集的唯一真正方法就是编写它们所遵循的模式,这使得整个过程毫无意义。 有些约束可以在RNG中表达,但不能在XSD中表达,还有一些约束可以在XSD中表达,但不能在RNG中表达。 例如,RelaxNG可以对混合内容中文本节点的内容定义更精确的规则,而XSD可以对子元素允许的基数范围定义更精确的规则。 详细的比较取决于您所谈论的XSD版本。 |
![]() |
2
0
正如OP与MK的交流所显示的,这里有一些误解的机会。所以我会在这里给出一个回答,尽管MK实际上已经回答了这个问题。 我认为问题在于XSD和RNG是否具有相同的表达能力,如果没有,那么其中一个是否比另一个更具表达能力。 也就是说:每个模式都定义了一组文档(即对该模式有效的文档集)。正如MK所说,有很多文档集,这两种语言都不能定义一个模式,只接受其中的文档集是有效的。因此,也许最清晰的提问方式是:
或者相当于:
答案是,上面提到的每种模式语言都可以表达一些彼此无法表达的模式。
我会把琐事放在一边,比如
没有XSD等价物的松弛模式:
没有松弛等价物的XSD模式:
请注意,MK说“XSD可以在子元素允许的基数范围上定义更精确的规则”是不对的。我不认为XSD中有任何基数约束不能用RELAXNG表达。诚然,在Relax NG中表示一个约束条件,即发票上必须至少有一行,但不能超过999行,这是相当繁琐的。但这肯定是可能的。内容模型表示必须至少有一个,但不超过九个
|
![]() |
Dave · 在XSD中,如何在元素的内容中只允许空白? 7 年前 |
![]() |
Jakub Mosakowski · Xml架构唯一性不检查唯一性 7 年前 |
![]() |
Antek · XSD中的复杂元素验证 7 年前 |
![]() |
Phil · 动态XML模式验证文档的子部分 7 年前 |
![]() |
Feres.o · 在两个对象之间生成客户端wsimport未命中链接 7 年前 |