我正在尝试针对某些看起来(结构上明智的)的XML编写XSD:
<responses>
<response>
<id>foo</id>
<values>
<value>bar</value>
</values>
</response>
<response>
<id>asdf</id>
<values>
<value>
<a>a</a>
<b>b</b>
<c>c</c>
</value>
</values>
</response>
</responses>
当我尝试验证(使用javax API)时,我收到以下错误消息:
Multiple elements with name 'response', with different types, appear in the model group
是否可以编写一个XSD来验证具有相同名称的多个节点?各个响应节点的顺序是一致的,因此该部分至少不会成为问题。
答案 0 :(得分:1)
在设计层面,要问的问题是为什么要指定具有不同有效性条件的两个不同元素,然后使用它们的元素类型名称来表示它们是相同的。你是否认为以这种方式对处理器撒谎是好的设计?
在架构级别:要分配给元素的类型完全由验证根目录中的路径决定。 (如果验证从文档根开始,那么在您的示例中,response
元素的类型必须完全由路径/responses/response
确定。拥有两个具有相同名称的元素是完全合法的。出现在不同的上下文中(其中&#39; context&#39;仅由祖先而不是兄弟姐妹定义); XSD中不允许为同名的两个兄弟提供不同的默认类型。