如何实现与XSD匹配的简单<table>
标记?
以下不起作用:
<xs:element name="table">
<xs:complexType>
<xs:sequence>
<xs:element name="tr" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="td"
minOccurs="0"
maxOccurs="unbounded"
type="MixedTemplateContentContainer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
</xs:element>
如果我在表格标签中使用任何属性,则会失败:
<table ccc="table" bgcolor="#ffffff">
<tr align="center"><td>
说
属性'ccc'不允许出现在元素'table'中。
答案 0 :(得分:4)
我使用Saxon架构处理器运行它,并收到错误消息
test.xml第1行的验证错误:
XSD99999:匹配属性@ccc的<xs:anyAttribute>
需要严格验证,
但没有可用的属性声明
基本上,<xs:anyAttribute>
具有processContents
属性,默认值为strict,这意味着如果模式中存在匹配的属性声明,则允许您使用任何属性。你可能想要processContents =“lax”或“skip”。值lax表示如果模式包含一个属性,则根据匹配的属性声明验证该属性,如果不是,则接受该属性。值skip表示接受任何属性而不进行验证。
答案 1 :(得分:0)
你的问题是什么?是吗
如何使用XSD允许任意数量的任何属性?
或
如何使用XSD实现简单的标记匹配?
因为他们看起来完全不同。
第一个答案是使用xs:anyAttribute
。
答案 2 :(得分:0)
将 <xs:anyAttribute>
元素的 processContents 属性设置为 skip
:
<xs:anyAttribute processContents="skip" />
^^^^^^^^^^^^^^^^^^^^^^
制作完整的 XSD:
<xs:element name="table">
<xs:complexType>
<xs:sequence>
<xs:element name="tr" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="td"
minOccurs="0"
maxOccurs="unbounded"
type="MixedTemplateContentContainer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>