2010-06-16 57 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。请参阅下面的表格,关于“通配符模式组件”,特别是过程内容属性。