XML规范定义了一个唯一的ID类型:
有效性约束:ID
值类型ID必须 生产人姓名相符。在XML文档中,名称不得多次出现 ,作为此类型的 值;即ID值 必须唯一标识承载它们的元素 。
的名称生产
[5] Name ::= (Letter | '_' | ':') (NameChar)*
这就是说,如果一个属性被声明为ID类型的(不论是在DTD或XMLSchema的),那么验证必须确保它是文档中唯一。请注意,ID必须以字母或下划线开头,否则纯数字将无法使用。
就我个人而言,我不使用ID(我觉得它太限制了我),但你应该考虑它。请注意,XML Schema工具默认不会为您生成唯一的ID(尽管XSLT会)。
请注意,属性的名称(在您的情况下为“id”)可以是任何有效的名称(例如“Id”,“foo”),但它必须在DTD或Schema中声明为类型ID。
UPDATE:OP询问为什么我们不使用XML ID。我们经常合并来自不同来源的节点,例如
和
被whatver作者已经选择的标识(这不是一个单一的数据库应用程序 - 想更多的人在一个社会创造的相关博客文章,并创造它们因此人们通常会创建相同的ID(主要是m1),在这种情况下,我们可能有:
这看起来很可怕,但没有简单的答案。
我们使用其他信息来消除歧义。我们有一个规则,即id在一定范围内是唯一的 - 例如分子内的原子必须具有唯一的ID。
如果我们使用了一个独特的ID生成器,这些都是完全不透明的,我们社区中的人类会反叛(他们做到了)。
ID在非托管的人类社区中很难管理!
完美!正是我在找什么。像“r1”,“r2”这样的id有点令人困惑,但这不是问题。顺便说一句我想知道你在这种情况下会做什么,如果你不使用ID? – TryHarder 2011-01-13 14:18:33