gpt4 book ai didi

xml - 放宽 NG 和元素/属性的唯一性

转载 作者:数据小太阳 更新时间:2023-10-29 02:11:30 25 4
gpt4 key购买 nike

是否可以使 Relax NG 元素/属性独一无二?

例如属性:

<rng:attribute name="test">
<rng:ref name="options"/>
</rng:attribute>

引用:

<rng:define name="options">
<rng:choice>
<rng:value>t1</rng:value>
<rng:value>t2</rng:value>
<rng:value>t3</rng:value>
</rng:choice>
</rng:define>

现在我必须验证一个 xml,它不应该两次使用其中一个“选项”。换句话说:在 xml 中不应出现两次“t1”...

我读过一些关于 schematron 的文章。但还有另一种可能吗?

最佳答案

不,Relax NG 不支持唯一性约束和参照完整性约束。正如 James Clark 在 a paper on the design of Relax NG 中所说:

The RELAX NG TC spent a considerable amount of time considering what support RELAX NG should provide for enforcing identity (uniqueness and cross-reference) constraints. In the end, the conclusion was that identity constraints were better separated out into a separate specification. Accordingly, RELAX NG itself provides no support for identity constraints.

为了与 XML DTD 兼容,RelaxNG 支持检查 ID/IDREF 约束。但这是最容易在处理器之间遇到不一致并且让新用户感到困惑的领域之一。

您的选择包括

  • 在应用程序级别检查值的唯一性
  • 使用另一种模式语言(Schematron、DTD、XSD)来制定和实现此约束(其中,Schematron 在实践中可能最容易用作在特定点上补充 RelaxNG 的方法,但将大部分工作留给 RelaxNG)
  • 重新调整 XML,以便在元素名称中表达 t1、t2 和 t3 之间的区别,并且内容模型可以强制它们的唯一性;这不一定可能

关于xml - 放宽 NG 和元素/属性的唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5549641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com