7

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

我参考了链接。现在,当我将其更改xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 为其他内容时,它停止了工作。w3c 说命名空间名称(或 URL)只是为了区分 xml 标签。而不是为什么更改网址后它不起作用。

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

XML 文档。(第一个.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 来工作。

4

3 回答 3

8

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

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

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

于 2012-07-22T17:41:25.487 回答
1

xmlns 中这个 URL 有什么真正的含义吗

这是一个基本的 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"

  • 数学语言:"http://www.w3.org/1998/Math/MathML"

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

然后,当然,当 XSLT 处理器发现它已经被输入了不是 XSLT 元素的元素时,XSLT 处理器就会抱怨这一点。

于 2012-07-22T14:59:57.820 回答
0

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

于 2012-07-22T14:16:50.593 回答