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

问题描述 投票:3回答:1

我需要澄清<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

xml xsd
1个回答
6
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.