微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何定义具有任何名称但强制执行特定属性的元素?

如何解决如何定义具有任何名称但强制执行特定属性的元素?

我有一个包含这样定义的 XML:

<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 设置为 laxstrict 也不会完成这项工作,因为我无法提供所需的 XSD 语句进行验证。

解决方法

元素的名称是用户定义的(任何有效的字符串都可以) XSD 主要描述文档中的标签名称,以及它们如何有效组合。因此,使用 XSD 来描述这种 XML 格式将很棘手。

选项(按我的喜好排序):

  1. 将标记名称更改为 [{"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 可以很容易地描述这一点。
  2. 将所有允许的 <addr> 标记名称预先声明为 XSD 中的全局元素。禁止任何未在 XSD 中预先声明的标签名称(高级用户可以将自己的声明添加到 XSD)
  3. 继续允许用户定义标签名称。定义一个全局的 complex-type-with-simple-content 来描述属性和标签值。每个用户定义的 <addrNN> 标记都必须包含一个指向此全局类型的 xsi:type 属性。我认为这需要 xsd:any 和 processContents='strict' 以确保 xsi:type 属性得到严格验证。

我不会详细介绍每个选项,但如果您需要,我可以提供更多详细信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。