XML命名空间规范将限定名定义为一个由本地部分和命名空间URI组成的名称。
限定名,即Qname,用一个前缀和一个本地部分来指定(例如,<foo:bar xmlns:foo='urn:foo'>),其中前缀(foo)被解析为一个命名空间URI ('urn:foo')。这个解析前缀的过程产生了通常所说的扩展名。
在不同的XML处理程序中,解析前缀的规则大致是一致的,只是处理默认命名空间(例如,xmlns='urn:foo')的方式有所不同。
具体来说:
-XML元素:如果Qname没有前缀,那么必须使用in-scope默认命名空间。
XML | 'foo'元素解析后的命名空间 |
<foo xmlns='urn:foo'/> | 'urn:foo' |
-XML属性:如果Qname没有前缀,那么命名空间URI就是NULL,即,不使用默认命名空间。
XML | 'a'属性解析后的命名空间 |
<foo xmlns='urn:foo'a='attr1'/> | NULL |
<foo xmlns:ns1='urn:foo' ns1:a='attr1' /> | 'urn:foo' |
-W3C Schema基本类型Qname属性值:如果Qname没有前缀,那么必须使用in-scope默认命名空间。
XML | 'a'属性的属性值解析后的命名空间 |
<foo xmlns='urn:foo' a='myname'/> where <xsd:attribute name='a' type='xsd:QName'/> | 'urn:foo' |
-XSLT (1.0)变量或参数:如果Qname没有前缀,那么命名空间URI就是NULL,即,不使用默认命名空间。
XSLT | 变量解析后的命名空间 |
<xsl:variable name='varA' xmlns='urn:foo' /> | NULL |
<xsl:variable name='ns1:varA' xmlns='urn:foo' xmlns:ns1='urn:bar' /> | 'urn:bar' |
-XPath 1.0节点测试:如果Qname没有前缀,那么命名空间URI就是NULL,即,不使用默认命名空间。
XPATH | 'b'节点测试解析后的命名空间 |
<a xmlns:ns1='urn:foo' xmlns='urn:foo'> /ns1:a/b | NULL |
/ns1:a/ns1:b | 'urn:foo' |
-XPath 2.0节点(名称)测试:如果Qname没有前缀,那么必须使用in-scope默认命名空间。
XPATH | 'b'节点测试解析后的命名空间 |
<a xmlns:ns1='urn:foo' xmlns='urn:foo'> /ns1:a/b | 'urn:foo' |