如何解决如何定义具有任何名称但强制执行特定属性的元素?
<addr15 type="binary" size="1" data_characters="0,1,1">text 15</addr15>
<addr14 type="binary" size="1" data_characters="0,1">text 14</addr14>
<addr13 type="binary" size="1" data_characters="0,1">text 13</addr13>
<addr12 type="binary" size="1" data_characters="0,1">text 12</addr12>
<addr11 type="binary" size="1" data_characters="0,1">text 11</addr11>
由于元素的名称是用户定义的(任何有效的字符串都可以),因此属性是必需的。
如何定义 XSD 来验证这一点?
使用 <xsd:any>
不起作用 - 它无法验证属性。
将 processContents
设置为 lax
或 strict
也不会完成这项工作,因为我无法提供所需的 XSD 语句进行验证。
解决方法
元素的名称是用户定义的(任何有效的字符串都可以) XSD 主要描述文档中的标签名称,以及它们如何有效组合。因此,使用 XSD 来描述这种 XML 格式将很棘手。
选项(按我的喜好排序):
- 将标记名称更改为
[{"id":1,"first_name":"Geraldine","last_name":"Graal","email":"ggraal0@indiegogo.com"},{"id":2,"first_name":"Farris","last_name":"Sowten","email":"fsowten1@blogger.com"}]
并定义一个新的必需属性“addrNumber”来保存 11、12、13、14、15。使用 XSD 可以很容易地描述这一点。 - 将所有允许的
<addr>
标记名称预先声明为 XSD 中的全局元素。禁止任何未在 XSD 中预先声明的标签名称(高级用户可以将自己的声明添加到 XSD) - 继续允许用户定义标签名称。定义一个全局的 complex-type-with-simple-content 来描述属性和标签值。每个用户定义的
<addrNN>
标记都必须包含一个指向此全局类型的 xsi:type 属性。我认为这需要 xsd:any 和 processContents='strict' 以确保 xsi:type 属性得到严格验证。
我不会详细介绍每个选项,但如果您需要,我可以提供更多详细信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。