xml文档中的XMLNS URL是啥意思

Posted

技术标签:

【中文标题】xml文档中的XMLNS URL是啥意思【英文标题】:What is the meaning of XMLNS URL in xml documentxml文档中的XMLNS URL是什么意思 【发布时间】:2012-07-21 00:05:20 【问题描述】:

我想知道,xml文档中的xmlns urls有什么真正的含义吗?

我曾参考 link 。现在当我改变xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 别的东西,它停止工作。 w3c 说命名空间名称(或 URL)只是为了区分 xml 标签。比为什么更改网址后它不起作用。

所以我想,可能与那个 URL 有关,所以在本地尝试(没有互联网).. 见下面的例子..

XML 文档。 (first.xml)

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="first.xsl"?>
<!-- Edited by XMLSpy® -->
<catalog>
    <cd>
        <title>Unchain my heart</title>
        <artist>Joe Cocker</artist>
        <country>USA</country>
        <company>EMI</company>
        <price>8.20</price>
        <year>1987</year>
    </cd>
     <cd>
        <title>Pavarotti Gala Concert</title>
        <artist>Luciano Pavarotti</artist>
        <country>UK</country>
        <company>DECCA</company>
        <price>9.90</price>
        <year>1991</year>
    </cd>
    <cd>
        <title>The dock of the bay</title>
        <artist>Otis Redding</artist>
        <country>USA</country>
        <company>Atlantic</company>
        <price>7.90</price>
        <year>1987</year>
    </cd>
</catalog>

XSLT 文档 (first.xsl)

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <h2>My CD Collection</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <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>

所以,它在本地运行良好。但如果我将xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 更改为xmlns:xsl="http://www.abc.com" 之类的其他内容,则会在浏览器中出现错误。

Error loading stylesheet: Parsing an XSLT stylesheet failed.

所以,唯一的问题是,这个 URL 在 xmlns 中是否有任何真正的含义。如果是的话,它比为什么它在没有互联网的情况下工作而不是通过更改 xsl 中的 url 来工作。

【问题讨论】:

【参考方案1】:

这不是 URL,而是 URI。也就是说,它是一个标识符(一个名称),而不是一个位置(一个地址)。

XML 中的命名空间就像 Java 中的包名;在不同的命名空间中定义了不同的词汇表,以防止冲突并声明对词汇表定义的所有权。与包名称一样,命名空间成为该命名空间中元素名称的隐含部分,因此 Docbook 命名空间中的 &lt;para&gt; 与 DITA 命名空间中的 &lt;para&gt; 没有任何联系。

James Clark 在这里写了一篇关于命名空间的好教程:http://www.jclark.com/xml/xmlns.htm

【讨论】:

这个网址是否曾经以某种方式访问​​过(例如通过 xml xsd 验证)我猜不对? 正如我所说,它不是 URL,而是 URI。标识符,而不是地址。从网络上获取资源永远不会被取消引用。 谢谢。我是这么想的,但只是想澄清一下,因为它被我公司的防火墙阻止了,我反对它【参考方案2】:

xmlns中这个URLS有什么实际意义

这是一个基本的 XML 问题——不是 XSLT 问题。

namespace-uri 用于识别特定的基于 XML 的语言——通过将这个 labguage 的所有元素名称放在同一个命名空间中(使它们都具有相同的 namespace-uri)。

除此之外,命名空间 uri 没有其他用途。

因此,所有 XSLT 元素(和一些属性)都在 "http://www.w3.org/1999/XSL/Transform" 命名空间中,并且任何名称没有此命名空间 uri 的元素不是 XSLT 元素。

这里有更多例子:

XML 架构:"http://www.w3.org/2001/XMLSchema"

SVG:"http://www.w3.org/2000/svg"

XSL-FO:http://www.w3.org/1999/XSL/Format

XHTML:"http://www.w3.org/1999/xhtml"

XPath 2.0 和 XQuery 函数:http://www.w3.org/2005/xpath-functions

XLink:"http://www.w3.org/1999/xlink"

MathML:"http://www.w3.org/1998/Math/MathML"

因此,通过将样式表中的 XSLT 命名空间 uri 修改为其他内容,您实际上是在说:以相关前缀(在您的情况下为“xsl”)为前缀的名称属于 "http://www.abc.com" 命名空间,而不是XSLT 命名空间——因此它们不是 XSLT 元素。

当然,当 XSLT 处理器发现它已被提供了不是 XSLT 元素的元素时,XSLT 处理器会抱怨这一点。

【讨论】:

感谢您的回答,您提到的命名空间就像 java 命名空间?并且这些名称空间已经在浏览器中可用了? @Hardik:与其他语言的命名空间有一些相似之处,但是 XML 命名空间不是分层的——它们只是一组扁平的字符串。至于“浏览器中命名空间的可用性”,我们通常将此浏览器支持称为一种或另一种语言。例如,实现 HTML5 的浏览器支持 SVG 和 MathML,如果 XML 文档以特定 PI(处理指令)开头,则允许在 XML 文件/文档上执行 XSLT。【参考方案3】:

浏览器(分别是任何 XSLT 处理器)支持在命名空间 http://www.w3.org/1999/XSL/Transform 中带有 XSLT 元素的 XSLT 语言。如果您使用&lt;?xml-stylesheet type="text/xsl" href="first.xsl"?&gt; 链接到不是XSLT 样式表的XML 文档,那么浏览器(分别是XSLT 处理器)当然不理解代码。在 XML 世界中,项目的限定名称由名称空间和本地名称组成,任何工具仅支持已知名称。如果您将 XHTML 作为 XML 提供给浏览器,那么您需要确保为 XHTML 元素使用 XHTML 命名空间 http://www.w3.org/1999/xhtml,否则浏览器将无法识别您的元素,即使它们碰巧与 XHTML 具有相同的本地名称元素。 XSLT 代码也是如此,要让浏览器将元素识别为 XSLT 元素,您需要正确的名称空间和正确的本地名称。

【讨论】:

以上是关于xml文档中的XMLNS URL是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

Android XML布局中的xmlns:tools是啥意思?

xml 中的xsi 是啥意思?

xml 中的xsi 是啥意思?

android xmlns是啥意思

XML 中的“独立”指令是啥意思?

XML文档里面节点的xmlns属性有啥作用?