如何解决要求一个元素具有另一个元素作为后代
| 在xsd模式中,是否有一种方法可以要求某个元素在某处具有另一个元素作为后代? 例如,父元素需要后代desc。这是有效的:<parent>
<a>
<b>
<desc></desc>
</b>
</a>
</parent>
像这样:
<parent>
<c>
<desc></desc>
</c>
</parent>
但这不是:
<a>
<parent>
<b/>
</parent>
</a>
父级的潜在子元素很多且很复杂,因此很难枚举每个可能的有效配置。
像键/选择器架构元素之类的东西似乎可以工作,在这里我可以提供xpath表达式来定义desc元素的有效位置,但是我发现的所有示例都旨在匹配属性值。
解决方法
不,(几乎)所有XML Schema验证都是浅的,在规范中称为\“ local \”。这是强调类型验证为“本地”验证的摘录。
通过类型验证的元素
元素信息项有效
关于类型定义
每个元素局部有效(类型)
(第3.3.4节),[被标记为]·有效·。
唯一的例外是身份约束,例如唯一性和键引用,它们在XML文档中具有广泛的范围,但用途狭窄。
, 我不知道XSD是否支持您要执行的操作,但是有一种解决方法。
您可以分两步进行复杂的验证:
首先,只需使用XSD模式进行基本验证
接下来,使用XSLT执行更复杂的验证,并输出该验证的结果
这可能无法很好地插入您正在使用的任何框架,但对于(部分)自定义代码可能会很好地工作。与通过代码进行额外的验证相比,它还具有可以发布两个文档的优点。
通过Google的快速搜索,为此目的而努力的一项工作就是Schematron。实际上,它完全放弃了XSD,仅使用XSLT。它似乎是已发布的标准:
http://www.schematron.com/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。