xsd:key和xsd:unique的区别

13

xsd:unique和xsd:key有什么区别?

5个回答

14

xsd:unique不要求选择器中的字段存在。如果该字段存在,则其值应为唯一的。

xsd:key要求所有选择器结果都存在该字段。选择器中的每个元素都应具有一个键。

请注意,xsd:keyref不是xsd:key的必需品,xsd:key可以存在而没有任何xsd:keyref


1
我刚看到了你的帖子...请纠正一下,因为声称“只有命名的xsd:key才能从xsd:keyref中引用”是错误的。请参见这里:如果{identity-constraint category}是keyref,则需要**{referenced key}**,否则禁止。一个具有{identity-constraint category}等于key或unique的身份约束定义。 - Petru Gardea
дҪҝз”Ёxsd:uniqueж—¶пјҢдёҚиғҪдҪҝз”Ёxsd:keyref -- жҳҜеҸҜд»Ҙзҡ„пјҒиҜ·еҸӮи§Ғпјҡhttps://dev59.com/questions/u3DYa4cB1Zd3GeqPB5bT - Csq

7
我找到了自己的答案:
这与基数有关: xsd:key 用于 (0..N) 和 (1..1) 的多重性。 xsd:unique 用于可选的 (0..1) 多重性。这也是为什么 xsd:unique 中所选字段可以为 null 的原因。
我的答案来源: http://www.xml.com/lpt/a/987

1

它类似于数据库。

关键字段就像主键..唯一和ID

唯一字段不是关键字,但必须是唯一的...


好的,但是将“键”也作为“ID”添加到XSD中有什么作用? - Joep

1

2
我刚看到了你的帖子...请纠正一下,因为声称“键与Keyrefs一起使用,从而将“keyRefed”元素的值限制为实际在“keyed”元素中使用的值”是错误的。请参见这里:“**{referenced key}**如果{identity-constraint category}是keyref,则必须提供,否则禁止。一个具有{identity-constraint category}等于key或unique的身份约束定义。” - Petru Gardea

0

xsd:key 是唯一的,并且用于元素集合中的一个键,具有作用域内的唯一性。 xsd:unique 仅在作用域内是唯一的。

希望这可以帮助到您...


当我在不同的元素上声明多个xsd:keys时,所有定义的键必须仍然是唯一的吗? - Joep
1
不,如果您有一组书籍元素,并在模式中声明xsd:key为书籍元素的isbn属性,则isbn属性的值应该是唯一的。这对具有其他键的其他元素没有影响。 - Norbert B.
但是xsd:unique也能做到这一点。xsd:key也是有作用域的。我找不到区别...? - Joep
2
我认为唯一的区别在于xsd:key不可为空,而xsd:unique则可以... http://www.w3.org/TR/xmlschema-0/#specifyingUniqueness - Joep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接