XML命名空间,为什么它们是前缀所必需的?

时间:2013-06-19 07:44:28

标签: xml namespaces xhtml prefixes

所以我一直在阅读关于w3schools的命名空间,我知道他们要唯一地识别一个元素。但是,如果你必须在它们旁边有前缀,那么拥有命名空间的重点是什么。您是否始终需要具有名称空间的前缀?如果不是,您总是需要具有前缀的名称空间?如果是这样的话?

例如:

<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture">

 <h:table>
   <h:tr>
   <h:td>Apples</h:td>
   <h:td>Bananas</h:td>
 </h:tr>

<f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table>
</root>

f和h不能唯一地标识不同的元素类型吗?

感谢您的帮助。我真的很难理解命名空间存在的原因。

1 个答案:

答案 0 :(得分:1)

为什么?

与其他语言一样,命名空间允许您对全局命名空间进行去杂乱。这允许多个具有相同名称的元素或属性,前提是它位于不同的名称空间中。

您是否总是需要限定元素的命名空间?

如果你有一个包含大部分元素的“显性”命名空间(例如http://www.w3.org/TR/html4/),那么你可以将命名空间的默认值更改为这个显性命名空间,如下所示:

<z:root xmlns="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture" xmlns:z="">
 <table>
   <tr>
   <td>Apples</td>
   <td>Bananas</td>
 </tr>

<f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table>
</z:root>

请注意,我们需要将root移回全局命名空间,以使其与原始文档保持等效。