A具有描述XML對象(簡化的示例)的XSD架構:是否可以添加新的XML標籤以便它對XSD驗證是透明的?
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://my-custom-ns.com">
<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element name="active" type="xs:boolean"/>
<xs:element name="value" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
即模式是內置在一個應用程序作爲資源和安裝在許多工作站。 該應用程序使用XML文件並根據此架構驗證它們。 這裏就是這樣一個XML的(簡體)例如:
<my:item xmlns:my="http://my-custom-ns.com">
<active>true</active>
<value>foo</value>
</my:item>
現在,我想我的XML文件,而無需改變XSD得到一個新的元素(新標籤):
<my:item xmlns:my="http://my-custom-ns.com">
<active>true</active>
<value>foo</value>
<tag>bar</tag>
</my:item>
我不會改變XSD,所以很明顯,驗證會在新標籤上失敗。 有沒有辦法讓XML中有一個新的標籤,以便它透明地「通過」驗證(即完全忽略)?
我嘗試添加在希望XSD驗證會忽略它的XML一個新的命名空間,但是這並沒有幫助:
<my:item xmlns:my="http://my-custom-ns.com" xmlns:new="http://new-ns.com">
<active>true</active>
<value>foo</value>
<new:tag>bar</new:tag>
</my:item>
的背景是:它應該對當前的應用程序成爲可能版本來處理具有附加標籤的XML文件,簡單地忽略它。但是,如上所述,該應用程序對XSD有很強的驗證。也許有另一種方法來做到這一點?
如果應用程序位於不同的名稱空間中,應用程序如何查看該新項目?我相信如果沒有架構修改,這是不可能的。 –
@AlexeyR,命名空間只是一個(不幸的)例子。實際上,我需要一種方法,使標籤對XSD驗證完全透明,而不會明確允許* undefined *標籤。恐怕似乎是不可能的。 – dymanoid