【问题标题】: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 来工作。

【问题讨论】:

    标签: xml xslt xml-parsing xsd


    【解决方案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 元素,您需要正确的名称空间和正确的本地名称。

    【讨论】:

      猜你喜欢
      • 2021-09-29
      • 2010-11-13
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      相关资源
      最近更新 更多