2010-06-16 60 views
3

我需要對<xsd:any>的一個場景進行說明。如何使用xsd:any命名空間?

如果namespace屬性值爲##any且屬性processContents不存在(默認值爲strict),該怎麼辦?

這裏會出現什麼情況,處理器是否應該根據任何方案驗證元素?

澄清示例。這裏的XSD部分:

...... 
<xsd:complexType name="reservedType"> <!-- a declaration for an element `reserved` --> 
<xsd:sequence> 
    <xsd:any namespace="##any"/> 
</xsd:sequence> 
</xsd:complexType> 
.......... 

而這裏的XML:

<c:reserved> 
<message xmlns="unknown_schema"> 
<msg>Hello</msg> 
</message> 
</c:reserved> 

每當我嘗試驗證針對上述架構上的XML,我得到:

The matching wildcard is strict, but no declaration can be found for element 'message'. 

這怎麼來的,命名空間是##any

回答

5

xsd:any的默認處理模型是嚴格的。所以,是的,你將不得不將此元素設置爲laxskip

<xsd:sequence> 
    <xsd:any namespace="##any" processContents="lax"/> 
</xsd:sequence> 

請參閱XML Schema規範的Section 3.10.2。請參閱下面的表格,關於「通配符模式組件」,特別是過程內容屬性。