如何在xsd模式中定义XML元素以使所有子元素具有相同的属性值?
我想签入XSD模式,以便所有元素都应该具有相同的“type”属性值。 假设一个元素有type=“1”,另一个元素有type=“2”,那么我希望模式验证失败。如何在xsd模式中定义XML元素以使所有子元素具有相同的属性值?,xml,xsd,xsd-validation,Xml,Xsd,Xsd Validation,我想签入XSD模式,以便所有元素都应该具有相同的“type”属性值。 假设一个元素有type=“1”,另一个元素有type=“2”,那么我希望模式验证失败。 如何在模式中限制这一点?我认为在XSD1.0中是不可能的 我不知道你到底在处理什么,但在这种情况下,我会觉得有一些包装元素,例如elems,可以保存该值。因此 <root> <elem type="1" id="1"/> <elem type="1" id="2"/> </root> 如果您
如何在模式中限制这一点?我认为在XSD1.0中是不可能的 我不知道你到底在处理什么,但在这种情况下,我会觉得有一些包装元素,例如
elems
,可以保存该值。因此
<root>
<elem type="1" id="1"/>
<elem type="1" id="2"/>
</root>
如果您想为类型指定一个值,为什么不将该值放在一个位置,而不是将其复制到多个位置?也就是说,为什么不这样构造XML呢
<root>
<elems type="1">
<elem id="1"/>
<elem id="2"/>
</elems>
</root>
不同的元素不允许有不同的类型值,这一事实初步证明,严格来说,类型不是元素的属性,而是整个文档的属性
这样,XML的结构已经保证了类型只有一个值,而不是允许不一致性,您或验证器随后必须添加额外的特别检查
也可能有一些更复杂的方法来确保类型只有一个值(可能是一些非常巧妙的key和keyref约束;在xsd1.1中,使用断言;使用外部或内部Schematron断言),但我不想在有如此简单的替代方案时鼓励使用它们
<root type="1">
<elem id="1"/>
<elem id="2"/>
</root>