xml – 根据属性值限制元素的出现次数
我有一个看起来像这样的
XML:
<Artifacts count="2"> <Artifact> ... </Artifact> <Artifact> ... </Artifact> </Artifacts> 我正在寻找一种方法来强制使用XSD架构,Artifacts中包含的Artifact元素的数量应该等于“count”属性的值. 即使我找到了使用XSD 1.1规范实现这一目标的可能方法,但我想知道如果没有它,它是否完全可能,即基于XSD 1.0规范. 编辑:我将尝试为问题提供更多的上下文,以便更精确. 当然,我可以添加额外的代码,以便在XSD验证后检查Artifact元素的正确出现次数.我希望有一种方法可以避免额外的代码段,并完全验证基于XSD的输入文件. 解决方法
您想要建模的约束类型的正确术语是断言.不,XML Schema 1.0中无法断言.唯一支持断言的验证语言是XML Schema 1.1(xs:assert)和Schematron(sch:assert和sch:report).
除此之外,您可以编写XPath表达式或XSLT样式表来测试Artifact元素的正确数量: /Artifacts/@count = count(/Artifacts/Artifact)
我的猜测是,Xerces 2.8.0(不再支持的过时版本)不符合XSD 1.1,但最简单的方法是简单地测试它.在模式中包含任何xs:assert,看看会发生什么.
不,只有XSD 1.0你无法避免那些额外的代码行. 编辑@kjhughes在评论中写的内容实际上应该是答案的一部分:
从XML设计的角度来看,如果这个属性除了说明有多少个Artifact元素之外别无其他,那你为什么要首先包含它呢?您应始终不愿意存储冗余和可恢复的信息.例如,不需要存储子元素的位置,如下所示: <root> <child n="1"/> <child n="2"/> </root> 而你的count属性做的非常相似. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |