【问题标题】:XML namespaces, why are they neccessary for prefixes?XML 命名空间,为什么它们需要前缀?
【发布时间】:2013-06-19 07:44:28
【问题描述】:

所以我一直在阅读 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 不是唯一标识不同的元素类型吗?

感谢您的帮助。我真的不明白为什么存在命名空间。

【问题讨论】:

    标签: xml namespaces xhtml prefixes


    【解决方案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 移回全局命名空间以使其与原始文档保持等效。

    【讨论】:

    • 但是 f 或 h 不允许多个同名元素吗?如果 f 和 h 已经区分了元素,那么定义名称有什么意义?
    • 我不确定我是否理解你。 fh 只是命名空间的别名,否则您必须明确限定每个元素,例如&lt;table xmlns="http://www.w3.org/TR/html4/"&gt; 这会很笨拙。
    • 对,那么当您使用前缀指向时,拥有一个由 URI 组成的完全唯一的命名空间以避免与命名命名空间冲突有什么意义命名空间可能不是唯一的,无论如何都会让您遇到麻烦?当首先指向命名空间的前缀可能发生冲突时,我试图通过要求它们是 URI 来理解 w3 使命名空间必须是唯一的基本原理。无论如何你都会遇到问题。
    • 命名空间(例如http://www.w3.org/TR/html4/)不仅仅是一个随机字符串 - 它构成了与文档中此 NS 中元素的内容有关的合同的一部分,例如并且可以通过schema 进行验证
    • 那么你的意思是命名空间URI可以声明不同的东西,比如元素属性等?从我一直在阅读的内容来看,URI 中的信息仅供用户使用,任何程序都不会读取。
    猜你喜欢
    • 2013-02-17
    • 2016-02-01
    • 2012-09-29
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    相关资源
    最近更新 更多