为什么 xmlns:xsi,而不仅仅是 XML 文件中的 xsi?
Why xmlns:xsi, and not only xsi in XML documents?
我了解到,按照惯例,默认命名空间在 XML 文档的根元素中被命名为 xmlns
属性。其他名称空间被命名为其他名称。现在,我想知道为什么 XML Scheme Instance 命名空间总是命名为 xmlns:xsi
而不是简单地命名为 xsi
? xsi
会和 xmlns:xsi
一样吗?如果是,为什么是?如果没有,为什么没有?
不是来自默认命名空间的元素和属性名称始终以命名空间的名称开头。 xmlns:xsi
告诉我 xsi
是命名空间 xmlns
中定义的属性,这是冲突的,因为默认命名空间中的属性名称不应以命名空间开头。
默认命名空间未命名为 xmlns
。
xmlns
是声明命名空间 prefix 的方式(即简称,句柄)。语法是 xmlns[:prefix]="namepace-uri"
.
每个 XML 元素只能有一个命名空间声明,您可以在其中省略前缀 (xmlns="namespace-uri"
),如果以这种方式声明,则称为 默认命名空间.
它被称为 default 因为所有未明确覆盖它的后代元素都将继承它 - 这里 <element>
、<child>
和第一个 <grandchild>
都是 some_namespace
的一部分:
<element xmlns="some_namespace">
<child>
<grandchild />
<grandchild xmlns="something_else" />
<yan:grandchild xmlns:yan="yet_another_namespace" />
</child>
</element>
这种自动继承不会与前缀一起发生 - 这里,只有 <sn:element>
在 some_namespace
中,因此与上面的 <element>
相同,而 <child>
和第一个 <grandchild>
不在命名空间中:
<sn:element xmlns:sn="some_namespace">
<child>
<grandchild />
<grandchild xmlns="something_else" />
<yan:grandchild xmlns:yan="yet_another_namespace" />
</child>
</sn:element>
重要的部分只是命名空间 URI,而不是前缀:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
声明 URI http://www.w3.org/2001/XMLSchema-instance
在该元素内应称为 xsi
。
你可以自由选择你喜欢的任何前缀,你可以声明xmlns:bob="http://www.w3.org/2001/XMLSchema-instance"
,这意味着URI http://www.w3.org/2001/XMLSchema-instance
应该在里面被称为bob
这个元素。
按照惯例,许多广泛使用的 XML 命名空间 URI 在任何地方都有相同的前缀,但这在技术上不是必需的。
我了解到,按照惯例,默认命名空间在 XML 文档的根元素中被命名为 xmlns
属性。其他名称空间被命名为其他名称。现在,我想知道为什么 XML Scheme Instance 命名空间总是命名为 xmlns:xsi
而不是简单地命名为 xsi
? xsi
会和 xmlns:xsi
一样吗?如果是,为什么是?如果没有,为什么没有?
不是来自默认命名空间的元素和属性名称始终以命名空间的名称开头。 xmlns:xsi
告诉我 xsi
是命名空间 xmlns
中定义的属性,这是冲突的,因为默认命名空间中的属性名称不应以命名空间开头。
默认命名空间未命名为 xmlns
。
xmlns
是声明命名空间 prefix 的方式(即简称,句柄)。语法是 xmlns[:prefix]="namepace-uri"
.
每个 XML 元素只能有一个命名空间声明,您可以在其中省略前缀 (xmlns="namespace-uri"
),如果以这种方式声明,则称为 默认命名空间.
它被称为 default 因为所有未明确覆盖它的后代元素都将继承它 - 这里 <element>
、<child>
和第一个 <grandchild>
都是 some_namespace
的一部分:
<element xmlns="some_namespace">
<child>
<grandchild />
<grandchild xmlns="something_else" />
<yan:grandchild xmlns:yan="yet_another_namespace" />
</child>
</element>
这种自动继承不会与前缀一起发生 - 这里,只有 <sn:element>
在 some_namespace
中,因此与上面的 <element>
相同,而 <child>
和第一个 <grandchild>
不在命名空间中:
<sn:element xmlns:sn="some_namespace">
<child>
<grandchild />
<grandchild xmlns="something_else" />
<yan:grandchild xmlns:yan="yet_another_namespace" />
</child>
</sn:element>
重要的部分只是命名空间 URI,而不是前缀:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
声明 URIhttp://www.w3.org/2001/XMLSchema-instance
在该元素内应称为xsi
。你可以自由选择你喜欢的任何前缀,你可以声明
xmlns:bob="http://www.w3.org/2001/XMLSchema-instance"
,这意味着URIhttp://www.w3.org/2001/XMLSchema-instance
应该在里面被称为bob
这个元素。
按照惯例,许多广泛使用的 XML 命名空间 URI 在任何地方都有相同的前缀,但这在技术上不是必需的。