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