xsi:type属性中的非限定名称属于哪个XML命名空间?

xsi:type属性中的非限定名称属于哪个XML命名空间?,xml,xml-parsing,xsd,xml-namespaces,Xml,Xml Parsing,Xsd,Xml Namespaces,我有以下xml片段: <?xml version="1.0" encoding="utf-8"?> <Root xmlns="hxxp://foo" xmlns:xsi="hxxp://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="hxxp://www.w3.org/2001/XMLSchema"> <Child xsi:type="SomeType" xmlns="hxxp://bar"

我有以下xml片段:

<?xml version="1.0" encoding="utf-8"?>
<Root xmlns="hxxp://foo" 
      xmlns:xsi="hxxp://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xsd="hxxp://www.w3.org/2001/XMLSchema">
 <Child xsi:type="SomeType" xmlns="hxxp://bar">
  ...
 </Child>
</Root>

...
现在的问题是:某个类型是否属于hxxp://foo 或hxxp://bar?

我试图理解,但我不确定如何解释这个定义。

(忽略这个回答——我误读了这个问题,对不起!)

因为它有一个显式的名称空间前缀(“xsi:”),所以值为“SomeType”的属性位于该名称空间中(该名称空间又被声明为映射到XML模式实例名称空间)

如果去掉“xsi:type”的“xsi:”前缀,那么它将使用当时生效的默认名称空间。根据XML名称空间规范第6.2节:

The scope of a default namespace declaration extends from the beginning of the
start-tag in which it appears to the end of the corresponding end-tag, 
excluding the scope of any inner default namespace declarations. In the case 
of an empty tag, the scope is the tag itself.
因此,在这种情况下,范围内的默认名称空间是hxxp://bar


名称空间不是很有趣吗?

名称空间规范本身在这个问题上是矛盾的。但在我所知道的每一个具体的API中,无论是XPath、XSLT、XQuery还是DOM,它们的解释都是不固定的属性不在名称空间中。它们不在默认名称空间中


(这有时以“在空名称空间中”的形式表示,但这错误地表明存在具有空属性的某个名称空间,而名称空间规范坚持认为没有名称空间中的名称集合不构成这样的名称空间。)简短回答:我相信,您在问,在您的示例中作为xsi:type的值给出的名称SomeType是否将作为扩展名称{hxxp://foo}SomeType或扩展名{hxxp://bar}某种类型的

(我可能错了;其他答案似乎认为您在询问具有非限定名称的属性的名称空间。也许他们将“类型属性的非限定内容”理解为“具有非限定名称的节点类型‘属性’的节点”,而不是“作为
类型
属性的值给出的非限定QName”。)

在您的示例中,SomeType将被解释为{hxxp://bar}SomeType,因为在文档中出现属性值规范xsi:type=“SomeType”时,默认名称空间是hxxp://bar.

详细信息:

XSD 1.0中的相关规则是:首先,第3.3.4节元素声明验证规则中的第1.2.1.2条,可以这样解释:

  • 如果元素具有xsi:type属性,并且
  • 它的值是一个合法的QName,并且
  • QName指定架构中可用的类型,以及
  • 该类型有效地派生自所需的类型,然后
  • 该类型用于验证元素
根据第3.15.3节中的规定,决定第三个项目符号项中的QName(如果有)命名哪种类型,这主要是说,用几个音节的单词来说,如何决定QName代表的扩展名称


XSD1.1中的规则指定了相同的行为,可能更容易遵循。在那里,关键规则是和的定义。

不得不使用hxxp而不是http,因为我的声誉太低,无法发布链接。我不知道你是否理解我的问题。我很清楚,“xsi”前缀对类型属性本身有影响,但是它的内容(“SomeType”)呢?属性值本身不属于名称空间(与元素和属性不同,元素和属性属于名称空间)。在DOM中,属性值通常只是一个字符串,因此无法为其设置/获取名称空间。另一方面,属性节点是一个完整的对象,包括名称、值、是否已知为ID等。希望这能有所帮助。@TextGeek这对
xsi:type
很重要,它告诉模式验证器验证元素的类型。
xsi:type
的值是一个QName,它是在文档中此时生效的名称空间绑定的上下文中解释的。我相信C.M.斯珀伯格·麦奎因的答案是OP需要的。。。。