2011-05-19 59 views

回答

3

x:是在你的XML命名空間標識符。對於元素和屬性,XML子樹可以有一個「默認」名稱空間(由xmlns='...'設置)。如果您需要其他名稱空間中的元素或屬性,則需要定義一個前綴,例如xmlns:x='...'。您從該名稱空間使用的元素和屬性需要以x:作爲前綴。一個常見的一個我是

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" 

,然後要求我爲use元素做到以下幾點:

<use xlink:href='#foo'/> 

在這種情況下,use元素來自SVG,而href屬性來自於XLink的。兩者都不同,但在某些地方兼容規格。

而這基本上是命名空間是:

  • 組不同的XML使用成連貫的部分
  • 讓他們在一個XML
  • 可能被用來避免名稱衝突(如果有兩個命名空間並且都支持名爲foo一個元素,那麼你需要指定要兩個foo S的

通過這種方式,名稱空間與許多編程語言中的工作方式沒有多大區別。您可以通過名稱空間查看您導入的內容,如上面SVG情況下的庫。編寫SVG的人注意到已經有了一個允許鏈接到任意XML元素(XLink)的規範,他們只是重新使用它。在其他情況下,例如WPF,存在名稱空間來分隔演示框架的聲明UI內容和與代碼接口所需的粘合屬性。例如。窗口有可能是這樣的:

<Window 
    x:Class="W" 
    Height='500' 
    Width='500' 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

時才需要Class屬性編譯器知道相應的代碼隱藏類,它沒有窗戶上的任何明顯的差異。

另一個示例是XSLT,您可以在其中定義XML文檔的轉換。 XSLT指令和輸出模板都是XML。您通常使用XSLT的元素一個明確的命名空間:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

,這樣就可以發出生成的XML,像這樣:

<xsl:if test="Content/Chapter"> 
    <xsl:variable name="text"><xsl:value-of select="$trans//item[@name='content'][lang($lang)]" /></xsl:variable> 
    <h2><xsl:value-of select="$text"/></h2> 
    <ol> 
     <xsl:apply-templates select="Content" mode="TableOfContents"/> 
    </ol> 
</xsl:if> 

如果我讓xsl:命名空間默認命名空間,那麼XSLT處理器無法告訴我從實際的指令中生成HTML。如果您的代碼和數據使用相同的格式並且居住在相同的地方,那麼這是一個問題。我相信Lisp通過用單引號標記數據解決了這個問題。

至於名稱空間是一個URI,這可能只是一個W3C的事情。這些URI不需要任何東西。他們只是標識符。它們並不意味着被檢索。使用名稱空間的XML的程序必須知道它可以處理和適當行事的名稱空間。

6

「x:」是一個名爲x的名稱空間別名。在元素上方的某個地方會有一個指向某個url的xmlns:x屬性,這個url通常並不重要,它只是一個名字空間的標識符。

「x」只是該文件的本地名稱,只要foo:在各處都使用x:被使用,它也可以是xmlns:foo。

命名空間通常由xml處理器使用,以確保它們正在尋找正確的元素(例如對於xlst變換),而不是用戶在xml中定義的自定義元素。

您可以閱讀更多有關XML命名空間here

+0

如果提供了一個URL,但無法訪問(無網絡連接),會發生什麼情況? – 2011-05-19 10:32:20

+3

@liortal:它們並不意味着被檢索。他們只是名字。它們看起來像URI,但在那個地方沒有東西(至少沒有規定)。 – Joey 2011-05-19 10:35:31

相關問題