在任何XSD文件,有很多時候,我們發現了以下XSD refered到XML命名空間的元素類型,例如XML元素的信息:如何讓XSD文件的XML命名空間中提到
<xsd:element type='x:SOME_TYPE_NAME'>
元素的類型在名爲'SOME_TYPE_NAME'的名稱空間'x'中提及。我想從該特定的xml命名空間中定義此類型的定義或xsd定義。我該怎麼做呢?請幫忙。
在任何XSD文件,有很多時候,我們發現了以下XSD refered到XML命名空間的元素類型,例如XML元素的信息:如何讓XSD文件的XML命名空間中提到
<xsd:element type='x:SOME_TYPE_NAME'>
元素的類型在名爲'SOME_TYPE_NAME'的名稱空間'x'中提及。我想從該特定的xml命名空間中定義此類型的定義或xsd定義。我該怎麼做呢?請幫忙。
首先,請注意,沒有中央機構提供您正在查找的信息,因此不能保證對於給定名稱空間x和類型名稱SOME_TYPE_NAME,只會有一個XSD類型定義。對於相同的名稱空間可能有多個模式,這些模式在其SOME_TYPE_NAME的定義中正好不同。
還有,上面寫着如何給定命名空間的所有者(在這裏,綁定到前綴X的命名空間)應組織模式文檔該命名空間,或者他們應該去沒有通用的規則。在某些情況下,給定系統中使用的所有模式文檔可能會緩存在某個本地模式存儲庫中(數據庫管理系統非常喜歡這種方法)。
所以事情可能會有很大的變化。但很多時候,有可能找到你正在尋找的(或至少一些)定義。
您引用的元素聲明引用了給定名稱空間中定義的類型。如果這不是發生聲明的模式文檔的目標名稱空間,那麼模式文檔必須包含一個顯式的xsd:import元素,用於導入綁定到前綴x的名稱空間。很多時候,xs:import元素會攜帶一個schemaLocation屬性,它提供了關於在該名稱空間中查找聲明的位置的提示。 schemaLocation屬性不是必需的,驗證器沒有義務取消引用該URI(可能它有一個它喜歡的本地存儲庫,或者它已經用一個運行時參數指示它在其他地方調用),但是許多驗證器會在默認情況下遵循鏈接(即使他們不這樣做,那個URI就是你需要查看的地方 - 你正在閱讀的模式文檔的作者說那裏有一個模式文檔,這是一個值得探索的暗示)。
解除引用名稱空間名稱以查看是否存在任何文檔通常也很有幫助。命名空間所有者沒有義務將任何可解引用的文檔放在命名空間名稱處,並且它通常被認爲是軟件在每次看到名稱空間中的元素時取消引用命名空間名稱的非常糟糕的做法,但是您不是軟件,而是一個人,並且您不需要解除引用命名空間的名稱。一些名稱空間所有者將模式文檔放在名稱空間名稱處,其中一些放置RDDL文檔(將HTML擴展爲可通過機器可處理的指向模式,文檔等的指針)。
對於一些衆所周知的命名空間,您可以通過正常的Web搜索過程找到文檔。
你好,謝謝你的詳細解答。其實我正在製作一個XSD解析器。有時候,XSD文件引用的類型既不在XSD文件中,也不在任何本地位置。 – Savaratkar
作爲XSD處理器的實現者,您有機會(和責任)爲您的處理器將如何着手尋求您處理的架構文檔中提及的名稱空間聲明的策略。您可能會發現XSD 1.1規範的[附錄C.2](http://www.w3.org/TR/xmlschema11-1/#var_schema_con)有助於思考和選擇替代方案。 –
謝謝你的伴侶! :) – Savaratkar