如何使用带名称空间的xsd:any?

时间:2010-06-16 21:03:31

标签: xml xsd

我需要对<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

1 个答案:

答案 0 :(得分:6)

xsd:any 的默认处理模型是严格的。是的,您必须将此元素设置为laxskip

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

请参阅XML Schema规范的Section 3.10.2。请参阅下面的表,“通配符架构组件”,特别是进程内容属性。