3

我对 xml 中命名空间的范围有概念上的混淆,尤其是属性,考虑这个例子,

    <envelope>
    <order xmlns="http://example.org/ord" xmlns:prod="http://example.org/prod">
        <number>123ABBCC123</number>
        <items>
            <product xmlns="http://example.org/prod">
                <number prod:id="prod557">557</number>
                <name xmlns="">Short-Sleeved Linen Blouse</name>
                <prod:size system="US-DRESS">10</prod:size>
                <prod:color xmlns:prod="http://example.org/prod2" prod:value="blue"/>
            </product>
        </items>
    </order>
</envelope>

属性“系统”在什么名称空间中?

它是否在前缀 prod命名空间中与其元素大小相同,

还是在默认命名空间中作为其父元素产品

4

2 回答 2

3

通常认为没有前缀的属性不在命名空间中;当然,大多数 API 以及 XQuery、XPath 和 XSLT 都是以这种方式呈现它们的。

然而,我听过学究们建议,命名空间规范实际上并没有这么说。规范实际上说的是:

Default namespace declarations do not apply directly to attribute names;
the interpretation of unprefixed attributes is determined by
the element on which they appear.

显然,“直接”这个词是委员会的妥协,因为有些人认为无前缀属性的名称空间实际上是相关 XML 词汇表的语义问题。我什至遇到过一些人断言这句话应该被理解为说一个无前缀的属性与其包含的元素在同一个命名空间中。然而,真正重要的是 XML API 所做的,而不是命名空间规范所说的。

于 2013-10-08T22:34:22.450 回答
0

答案是“是”。

前缀prod指的是稍后在product元素上设置为默认值的相同命名空间。

于 2013-10-08T16:10:47.183 回答