命名空间的意义和作用?(50分)

昊海

Unregistered / Unconfirmed
GUEST, unregistred user!
请大虾们谈谈XML中命名空间的意义、作用,不胜感谢!
 
我不懂什么XML,但是看字面意思也能看出来。
XML是用来交换数据的吧?数据要定义字段信息吧?你定义的字段信息有可能
和别人定义的重复吧?为了避免重复,你就必须用唯一标识你自己的名字吧?
比如用你公司的域名就名字。
大致意思如此,够你琢磨十年八年的。
 
说得不错
XML的一个目标是用来精确描述数据。
如果你定了BOOK ,别人也定个BOOK
那不就混淆了吗? 所以有个namespace这样
一个东西,其实就是个 前缀
比如 AA:BOOK, BB:BOOK 这样两者就分开了。
前缀多用URL 来标识。因为URL是唯一的
 
没有人关注了,是不是嫌份太少了呀,还是问题太简单了呢
 
说了够明白的了
 
xml名称空间是一组名字,由URL索引[RFC2396]确定,在XML文档中用作元素类型和属性名
-----w3c
 
假设有人看到一组代码
<book>
<title>xxxxx</title>
<author>kkkkk</author>
<publish>kdjfdfd</publish>
....
</book>
就算他不懂xml也知道它在描述一本书
 
?????????????????????
 
其实TUTI已经说得很清楚了
如果还不懂的话,可能你要找些别人的XML的例子来看看才行:)
 
XML名字空间提供了一种避免元素名冲突的方法。
由于XML中的元素名不是固定的,因此当两个不同的文档使用同样的名字描述两个不同类型
的元素时就会发生名冲突。
下面这个XML文档在一个表格中携带了信息:
   < table>
   < tr>
   < td>Apples< /td>
   < td>Bananas< /td>
   < /tr>
   < /table>
   下面这个XML文档携带了关于一个表格的信息 (关于一件家具的信息):
   < table>
   < name>African Coffee Table< /name>
   < width>80< /width>
   < length>120< /length>
   < /table>
   如果这两个XML文档被加在一起,就会发生一个元素名冲突,因为这两个文档都包含了
一个< table>元素,而这两个元素的内容和定义都不同。
注意:--->>>>>>> 用一个前缀解决名冲突
   下面这个XML文档在一个表格中携带了信息:
   < h:table>
   < h:tr>
   < h:td>Apples< /h:td>
   < h:td>Bananas< /h:td>
   < /h:tr>
   < /h:table>
   而这个XML文档则携带了一件家具的信息:
   < f:table>
   < f:name>African Coffee Table< /f:name>
   < f:width>80< /f:width>
   < f:length>120< /f:length>
   < /f:table>
   现在就没有元素名冲突的问题了,因为两个文档分别给他们的< table>元素使用了不
同的名字:(< h:table> 和 < f:table>)。 通过使用一个前缀,我们创建了两个不同类型
的< table> 元素。

<><><><><><><><><><><><><><><><><><><><><><><><><><>
现在我来使用名字空间:
   下面这个XML文档在一个表格中携带了信息 :
   < h:table xmlns:h="http://www.w3.org/TR/html4/">
   < h:tr>
   < h:td>Apples< /h:td>
   < h:td>Bananas< /h:td>
   < /h:tr>
   < /h:table>
   这个XML文档携带了一件家具的信息:
   < f:table xmlns:f="http://www.w3schools.com/furniture">
   < f:name>African Coffee Table< /f:name>
   < f:width>80< /f:width>
   < f:length>120< /f:length>
   < /f:table>
   在这里不是只使用前缀,在< table>标记上还增加了一个 xmlns属性,这样就给
元素前缀一个与名字空间相联系的有资格的名字。

名字空间属性
   名字空间属性放在一个元素的起始标记中,它的语法如下:
   xmlns:namespace-prefix="namespace"
   在上面的例子中,名字空间本身是用一个Internet 地址定义的:
   xmlns:f="http://www.w3schools.com/furniture">
   W3C名字空间规范规定名字空间本身应该是一个统一资源识别号 (URI)。当一个名字
空间在一个元素的起始标记中被定义时,所有有相同前缀的子元素都与同样的名字空间相
关。 注意:分解器并不使用用来识别名字空间的地址去查找信息。这个地址唯一的目的就
是给名字空间一个唯一的名字。但是,公司经常将名空间作为包含名空间信息的实际Web页
面的一个指针。访问http://www.w3.org/TR/html4/试一试。
统一资源识别号
   一个统一资源识别号(URI)是识别一个Internet资源的字符串。通常URI就是识别一个
Internet域地址的URL。另外,有少数一些类型的URI 是通用资源名(URN)。在我们的例子
中只使用URL。由于我们这个家具的例子中使用一个Internet地址去识别其名字空间,我们
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
可以肯定我们的名字空间是唯一的。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



 
   如果为一个元素定义一个默认的名字空间,我们就不用在所有的子元素中使用前缀了。它的语法是这样的:
   < element xmlns="namespace">
   这个XML 文档在一个表格中携带了信息:
   < table xmlns="http://www.w3.org/TR/html4/">
   < tr>
   < td>Apples< td>
   < td>Bananas< td>
   < tr>
   < /table>
   这个XML文档携带了关于一件家具的信息:
   < table xmlns="http://www.w3schools.com/furniture">
   < name>African Coffee Table< /name>
   < width>80< /width>
   < length>120< /length>
   < /table>

   在实际中使用名字空间
   当你开始使用XSL时,你很快就会看到在实际中名字空间的使用。XSL格式表被用来将XML文档转换成其它格式,如HTML。仔细看看下面的XSL 文档,就能发现大部分标记是HTML标记。那些不是HTML的标记都有一个前缀xsl, 用名字空间"http://www.w3.org/TR/xsl"来识别:
   < ?xml version='1.0'?>
   < xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/xsl">
   < xsl:template match="/">
   < html>
   < body>
   < table border="2" bgcolor="yellow">
   < tr>
   < th>Title< /th>
   < th>Artist< /th>
   < /tr>
   < xsl:for-each select="CATALOG/CD">
   < tr>
   < td>< xsl:value-of select="TITLE"/>< /td>
   < td>< xsl:value-of select="ARTIST"/>< /td>
   < /tr>
   < /xsl:for-each>
   < /table>
   < /body>
   < /html>
   < /xsl:template>
   < /xsl:stylesheet>
 
多人接受答案了。
 
顶部