下面的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
感謝您的明確答案 - 您是完全正確的。 EKKE – ekke