Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在xsd模式中定义XML元素以使所有子元素具有相同的属性值?_Xml_Xsd_Xsd Validation - Fatal编程技术网

如何在xsd模式中定义XML元素以使所有子元素具有相同的属性值?

如何在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> 如果您

我想签入XSD模式,以便所有元素都应该具有相同的“type”属性值。 假设一个元素有type=“1”,另一个元素有type=“2”,那么我希望模式验证失败。
如何在模式中限制这一点?

我认为在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>