2013-10-08 44 views
5

下面的XML文檔和模式,從一個更大的架構中,問題發生第一歸結:爲什麼在模式中定義爲'具有'命名空間的xml元素需要'null-namespace'?

的XML文檔:

<f2b:Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" xsi:schemaLocation="http://www.outerfoospace.com/schemas/foo2bar f2b-0-0-0.xsd"> 
    <f2b:Bar>text</f2b:Bar> 
</f2b:Foo> 

的模式:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" targetNamespace="http://www.outerfoospace.com/schemas/foo2bar"> 
    <xs:complexType name="T_Foo"> 
     <xs:sequence> 
      <xs:element name="Bar" xmlns="f2b"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:element name="Foo" type="f2b:T_Foo"/> 
</xs:schema> 

當我根據模式驗證文檔,在<f2b:Bar> -element上收到錯誤消息,說<f2b:Bar>不是預期的。爲了使文檔有效,我必須將<Bar> -element顯式地(!)放入'null-namespace'中:<Bar xmlns="">。 我不明白爲什麼應該預期一個null-namespaced元素。該模式爲所有元素和<Foo> -element定義了一個名稱空間,該確認器確實期望f2b-名稱空間。但即使我像上面所做的那樣明確地設置了元素定義中的名稱空間,驗證程序仍然期望爲Bar元素。 我嘗試了幾種變體的模式和文檔來找到一個沒有運氣的答案 - 我簡直無法猜測爲什麼在這種特殊情況下地獄空名稱空間預計。

任何暗示讚賞... EKKE

回答

3

簡短的回答:添加elementFormDefault="qualified"您模式的根xs:schema標籤。

較長的答案:默認情況下,只有頂級「全局」元素聲明採用模式的目標名稱空間。複雜類型中的「本地」元素聲明不在命名空間中。您可以使用xs:element標記上的form屬性覆蓋某個特定本地元素,也可以全局覆蓋xs:schema上使用elementFormDefault的所有元素。

+0

感謝您的明確答案 - 您是完全正確的。 EKKE – ekke

相關問題