2013-02-05 50 views
0

我有一個關於XML的命名空間的概念問題: 如果我有兩個不同的XSD的文件中的文件夾層次結構:分隔符在XML的命名空間 - 命名空間的相對進口

fileA.xsd 
folder/ 
    fileB.xsd 

,並在每個這兩個的文件,我通過targetNamespace屬性定義一個單獨的名稱空間:

在fileA.xsd這將是

targetNamespace="http://www.anurlofmine.com/myproject/A" 

和fileB.xsd那將b e:

targetNamespace="http://www.anurlofmine.com/myproject/folder/B" 

我可以使用eurl中的路徑進行相對導入嗎?

我的例子可以使用

<xs:schema xmlns:relativeA="../A"> 
在fileB.xsd

我並沒有真正擔心這樣做,我知道有各種方式來指定模式定義的位置,我只關心URL中路徑的含義。

據我所知,url只是一個字符串,用於唯一標識xsd文件中的類型(除了指定一個可能看起來不能保證定義文件的位置)。我對麼 ?在XSD模式文檔

希望我的問題是不是太怪異回答:)

感謝很多提前 米沙

回答

0

在進口schemaLocation屬性的架構位置提示,包括要素是指定爲xs:anyURI類型,這意味着是,它可以是相對引用。

在fileB.xsd

所以,你可以有形式

<xs:import namespace="http://www.anurlofmine.com/myproject/A" 
      schemaLocation="../fileA.xsd"/> 

空間聲明中(如在你的例子xmlns:relativeA)的值,而另一方面,預計的import語句是絕對URI,而不是相對URI。許多程序實際上並沒有將命名空間名稱作爲URI來檢查合法性,因此使用「../A」作爲命名空間名稱不一定會引發錯誤。但定義XML技術堆棧的基礎W3C規範指定將使用相對URI作爲名稱空間名稱的文檔信息設置爲未定義。

在任何情況下,向xs:schema元素添加名稱空間聲明都不會導入該名稱空間或引用可能位於指定位置的任何模式文檔。

+0

謝謝你的回答,它是現貨! 我們在當前項目中不使用schemaLocation屬性。而是使用catalog.xml文件,並將所有模式定義保存在用戶計算機上本地。所以使用schemaDefinition屬性的相對導入。是不可能的。 –