XML 命名空间
-
定义和使用
XML 命名空间提供了一种避免元素名称冲突的方法。在 XML 中,元素名由开发人员定义。当尝试混合来自不同 XML 应用程序的 XML 文档时,这通常会导致冲突。此 XML 包含 HTML 表信息:<table> <tr> <td>Apples</td> <td>Bananas</td> </tr> </table>
此 XML 包含有关表(家具)的信息:<table> <name>非洲咖啡桌</name> <width>80</width> <length>120</length> </table>
如果将这些 XML 片段添加在一起,则会出现名称冲突。两者都包含一个<table>元素,但是这些元素有不同的内容和含义。用户或 XML 应用程序将不知道如何处理这些差异。 -
使用前缀解决名称冲突
使用名称前缀很容易避免 XML 中的名称冲突。此 XML 包含有关 HTML 表和一件家具的信息:<h:table> <h:tr> <h:td>苹果</h:td> <h:td>香蕉</h:td> </h:tr> </h:table> <f:table> <f:name>非洲咖啡桌</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table>
在上面的例子中,不会有冲突,因为两个<table>元素有不同的名称。
-
xmlns属性
在 XML 中使用前缀时,必须定义前缀的命名空间。命名空间可以由元素的开始标记中的 xmlns 属性定义。命名空间声明具有以下语法;xmlns:prefix=“URI”。<root> <h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>苹果</h:td> <h:td>香蕉</h:td> </h:tr> </h:table> <f:table xmlns:f="https://www.w3schools.com/furniture"> <f:name>非洲咖啡桌</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> </root>
在上面的例子中:第一个<table>元素中的 xmlns 属性给 h: 前缀一个限定的名称空间。第二个<table>元素中的 xmlns 属性给 f: 前缀一个限定的名称空间。为元素定义命名空间时,具有相同前缀的所有子元素都与同一命名空间关联。名称空间也可以在 XML 根元素中声明:<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="https://www.w3schools.com/furniture"> <h:table> <h:tr> <h:td>苹果</h:td> <h:td>香蕉</h:td> </h:tr> </h:table> <f:table> <f:name>非洲咖啡桌</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> </root>
注意:解析器不使用名称空间URI来查找信息。使用URI的目的是给命名空间一个唯一的名称。然而,公司经常使用名称空间作为指向包含名称空间信息的网页的指针。 -
统一资源标识符(URI)
统一资源标识符(URI)是标识 Internet 资源的字符串。最常见的 URI 是统一资源定位器(URL),用于标识 Internet 域地址。另一种并不常见的URI类型是统一资源名(Uniform Resource Name,URN)。 -
默认命名空间
为元素定义默认命名空间可以避免在所有子元素中使用前缀。它有以下语法:xmlns="namespaceURI"
此 XML 包含 HTML 表信息:<table xmlns="http://www.w3.org/TR/html4/"> <tr> <td>苹果</td> <td>香蕉</td> </tr> </table>
此XML包含有关一件家具的信息:<table xmlns="https://www.w3schools.com/furniture"> <name>非洲咖啡桌</name> <width>80</width> <length>120</length> </table>
-
实际使用的命名空间
XSLT 是一种可用于将 XML 文档转换为其他格式的语言。下面的 XML 文档是一个用于将 XML 转换为 HTML 的文档。名称空间 “http://www.w3.org/1999/XSL/Transform” 标识 HTML 文档中的 XSLT 元素:<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>我的CD收藏</h2> <table border="1"> <tr> <th style="text-align:left">标题</th> <th style="text-align:left">艺术家</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>
如果您想进一步了解XSLT,请阅读我们的XSLT教程。