2014-06-19 98 views
0

在我的研究中,一旦我們具有可用的XML模式實例名稱空間,就可以使用schemaLocation屬性。樣式表:SchemaLocation屬性

就其在XML標籤中的位置而言,名稱空間總是在架構位置之前先出現?

這是我的樣式表代碼。

CarriageDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:SchemaLocation="Carriage_Delivery.xsd" 

,我嘗試切換xmlns:xsi屬性和xsi:SchemaLocation的位置這樣的..

CarriageDelivery xsi:SchemaLocation="Carriage_Delivery.xsd" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

但在我生成的輸出,什麼都沒有發生。

CarriageDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:SchemaLocation="Carriage_Delivery.xsd" 

我希望我能得到一個解釋,爲什麼它總是最後出現。

+2

我的猜測是你使用的庫是按照所述順序實現的,這兩個聲明的順序應該沒有語義上的差異。 –

+4

該命令沒有區別。我相信大多數處理器在序列化輸出時會在屬性之前放置命名空間,僅僅是因爲這對他們來說很方便。 –

回答

5

XML spec表示給定元素上的屬性順序不重要。因此 任何下游應用程序無論是否xmlns:xsi出現在xsi:SchemaLocation之前,反之亦然。因此,大多數輸出​​XML(通常包括XSLT處理器)的程序不會給予您任何控制權或保證它們將輸出屬性的順序。

您能解釋爲什麼要指定順序嗎?除了人類美學之外,這應該沒有關係...

+1

在有限的情況下(例如,計算數字簽名,需要逐字節等價),有[如何將XML以規範形式定義的標準](http://www.w3 .ORG/TR/XML-C14N)。 –