我需要对<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
?
答案 0 :(得分:6)
xsd:any
的默认处理模型是严格的。是的,您必须将此元素设置为lax
或skip
:
<xsd:sequence>
<xsd:any namespace="##any" processContents="lax"/>
</xsd:sequence>
请参阅XML Schema规范的Section 3.10.2。请参阅下面的表,“通配符架构组件”,特别是进程内容属性。