我是否需要XSD 1.1在具有如下文件/记录结构的单个XML文件中强制实施ID唯一性:
<?xml version="1.1" encoding="UTF-8"?>
<file>
<record id="1" status="ok">
<info1></info1>
<info2></info2>
<!-- etc... -->
</record>
<record id="2" status="ok">
<info1></info1>
<info2></info2>
<!-- etc... -->
</record>
<record id="1" status="duplicate_deprecated">
<info1></info1>
<info2></info2>
<!-- etc... -->
</record>
我还想允许某些重复的ID,条件是它们与例如ID结合使用。一个属性,意思是“删除/停止使用此版本的记录,用另一个具有相同ID的记录替换此(现在)已弃用的副本”(在示例中,记录1)。
这可能是XML模式1.0还是需要XSD 1.1断言(等等)?
使这个断言起作用需要什么样的通用XML实例结构?我知道XSD 1.1断言需要与密切相关的元素/属性。
可能相关:
答案 0 :(得分:2)
是的,这需要XSD 1.1。不幸的是,你可以在xs:unique / xs:key上使用的XPath表达式不包含谓词(即使在XSD 1.1中),所以这只能用断言完成。
断言唯一性的典型方法是
test="count(PATH) = count(distinct-values(PATH))"
不幸的是,这并未对有问题的重复内容进行任何诊断。某些处理器可能会为您提供更好的诊断功能
test="every $M in PATH, $N in PATH satisfies ($M is $N or $M ne $N)"
但这可能效率低得多。
应该在最里面的元素上指定断言,该元素包含要测试唯一性的所有值。