2012-07-22 81 views
3

我想知道,xml文檔中是否存在xmlns url的真正含義?我曾參考link。現在當我將xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 更改爲其他內容時,它停止工作。 w3c表示命名空間名稱(OR URL)僅用於區分xml標籤。比爲什麼改變url後它不工作。xml文檔中XMLNS URL的含義是什麼

,所以我想,可能是它有事情做與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> 

所以,它的工作的罰款localy。但如果我將xmlns:xsl="http://www.w3.org/1999/XSL/Transform"更改爲xmlns:xsl="http://www.abc.com"之類的內容,它會在瀏覽器中出現錯誤。

Error loading stylesheet: Parsing an XSLT stylesheet failed. 

所以,唯一的問題是,這個網址在xmlns中有沒有真正的含義。如果是的話,它比爲什麼沒有互聯網工作,而不是通過更改xsl中的網址。

回答

1

有這樣任何實際意義在的xmlns

這是一個根本性的問題,XML網址 - 不是XSLT之一。

namespace-uri通過將此labguage的所有元素名稱放在同一個命名空間中(使它們都具有相同的namespace-uri)來達到識別特定的基於XML的語言的目的。

除此之外,命名空間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:

  • 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處理器就會抱怨這一點。

+0

感謝您的回答,您所提到的命名空間,是像Java命名空間?這些名稱空間已經可以在瀏覽器中使用了嗎? – hardik 2012-07-23 06:22:58

+0

@Hardik:與其他語言的命名空間有一些相似之處,但是XML命名空間不是*分層的 - 它們只是一組扁平的字符串。至於「瀏覽器中的命名空間的可用性」,我們通常將這種*瀏覽器支持*稱爲一種或另一種語言。例如,實現HTML5的瀏覽器支持SVG和MathML,並且如果XML文檔以特定PI(處理指令)開頭,則允許在XML文件/文檔上執行XSLT。 – 2012-07-23 11:53:43

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元素,您需要正確的名稱空間和正確的本地名稱。

2

它不是一個URL,它是一個URI。也就是說,它是一個標識符(名稱),而不是位置(地址)。

XML中的名稱空間就像Java中的包名稱;不同的詞彙表在不同的命名空間中定義,以防止衝突並聲明詞彙的定義的所有權。與包名稱一樣,名稱空間成爲該名稱空間中元素名稱的隱含部分,因此Docbook名稱空間中的<para>與DITA名稱空間中的<para>沒有連接。

詹姆斯·克拉克寫了一篇關於命名空間在這裏一個很好的教程:http://www.jclark.com/xml/xmlns.htm

+0

是這個網址曾經以某種方式訪問​​(例如通過xml xsd驗證)我猜不對嗎? – tObi 2015-06-26 10:52:02

+0

正如我所說,它不是一個URL,它是一個URI。標識符,而不是地址。從來沒有取消從Web獲取資源的引用。 – 2015-06-26 14:09:33

+0

thx。我這麼想,但只是想明確說明,因爲它被我的公司防火牆阻止,我反對它 – tObi 2015-06-26 14:19:18

相關問題