XSD具有相同名称但不同类型的多个元素

时间:2014-08-29 20:21:44

标签: xml xsd

我正在尝试针对某些看起来(结构上明智的)的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来验证具有相同名称的多个节点?各个响应节点的顺序是一致的,因此该部分至少不会成为问题。

1 个答案:

答案 0 :(得分:1)

在设计层面,要问的问题是为什么要指定具有不同有效性条件的两个不同元素,然后使用它们的元素类型名称来表示它们是相同的。你是否认为以这种方式对处理器撒谎是好的设计?

在架构级别:要分配给元素的类型完全由验证根目录中的路径决定。 (如果验证从文档根开始,那么在您的示例中,response元素的类型必须完全由路径/responses/response确定。拥有两个具有相同名称的元素是完全合法的。出现在不同的上下文中(其中&#39; context&#39;仅由祖先而不是兄弟姐妹定义); XSD中不允许为同名的两个兄弟提供不同的默认类型。