我想知道,xml文档中的xmlns网址是否有任何实际意义?
我曾参考link。现在当我改变xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
对别的东西,它停止了工作。 w3c表示名称空间名称(OR URL)仅用于区分xml标记。而不是在更改网址后它无法正常工作的原因。
所以我想,可能是它与该URL有关,所以尝试了localy(没有互联网)..参见下面的例子..
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。
答案 0 :(得分:4)
它不是URL,而是URI。也就是说,它是一个标识符(名称),而不是位置(地址)。
XML中的命名空间就像Java中的包名;不同的词汇表在不同的命名空间中定义,以防止冲突并声明对词汇表定义的所有权。与包名称一样,命名空间成为该命名空间中元素名称的隐式部分,因此Docbook命名空间中的<para>
与DITA命名空间中的<para>
没有任何关联。
James Clark在这里写了一篇关于命名空间的好教程:http://www.jclark.com/xml/xmlns.htm
答案 1 :(得分:1)
这个URL在xmlns
中是否有任何实际意义
这是一个基本的XML问题 - 而不是XSLT问题。
namespace-uri用于识别特定的基于XML的语言 - 通过将此labguage的所有元素名称放在同一名称空间中(使所有这些名称具有相同的名称空间-uri)。
除此之外,命名空间uri没有其他用途。
因此,所有XSLT元素(和一些属性)都在"http://www.w3.org/1999/XSL/Transform"
命名空间中,任何名称没有此命名空间的元素都是而不是 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 namespace-uri修改为其他内容,您实际上是这样说的:以关联前缀(在您的情况下为“xsl”)作为前缀的名称属于"http://www.abc.com"
命名空间,而不是到XSLT名称空间 - 因此它们不是XSLT元素。
当然,当XSLT处理器发现它已经被非XSLT元素的元素提供时,XSLT处理器会抱怨这一点。
答案 2 :(得分:0)
浏览器(分别是任何XSLT处理器)支持带有命名空间http://www.w3.org/1999/XSL/Transform
中的XSLT元素的XSLT语言。如果使用<?xml-stylesheet type="text/xsl" href="first.xsl"?>
链接到不是XSLT样式表的XML文档,那么浏览器(分别是XSLT处理器)当然不理解代码。在XML世界中,项的限定名称由命名空间和本地名称组成,任何工具仅支持已知名称。如果您将XHTML作为XML提供给浏览器,那么您需要确保为XHTML元素使用XHTML名称空间http://www.w3.org/1999/xhtml
,否则浏览器将无法识别您的元素,即使它们碰巧具有相同的本地名称作为XHTML元素。 XSLT代码也是如此,因为浏览器将元素识别为XSLT元素,您需要正确的命名空间和正确的本地名称。