XSD 1.1结构强制执行唯一ID(如有必要)?

时间:2017-03-31 08:59:54

标签: xml validation uniqueidentifier xsd-1.1

我是否需要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断言需要与密切相关的元素/属性。

可能相关:

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)"

但这可能效率低得多。

应该在最里面的元素上指定断言,该元素包含要测试唯一性的所有值。