为XSD模式中不同类型的元素分配唯一属性

为XSD模式中不同类型的元素分配唯一属性,xsd,unique,Xsd,Unique,我不熟悉XML和XSD,对XML模式验证有一个疑问。考虑XML文件: <RequestList> <Request1 id="1">...</Request1> <Request2 id="2">...</Request2> . . . </RequestList> ... ... . . . 我想强制id属性是唯一的。谷歌在元素类型相同的情况下帮了我很大的忙。但我不能对sinlge元素“Reque

我不熟悉XML和XSD,对XML模式验证有一个疑问。考虑XML文件:

<RequestList>
  <Request1 id="1">...</Request1>
  <Request2 id="2">...</Request2>
  .
  .
  .
</RequestList>

...
...
.
.
.
我想强制id属性是唯一的。谷歌在元素类型相同的情况下帮了我很大的忙。但我不能对sinlge元素“Request”进行排序,因为每个请求可以包含不同的信息,具体取决于他的类型。我该怎么办?
提前谢谢你的帮助

XML规范定义了唯一的ID类型:

有效性约束:ID

ID类型的值必须与名称匹配 生产。名称不能出现 在XML文档中多次作为 此类型的值;i、 例如,ID值 必须唯一地标识元素 它们承载着它们

产品名称为

[5]     Name    ::=     (Letter | '_' | ':') ( NameChar)*
这意味着,如果属性被声明为ID类型(无论是在DTD还是XMLSchema中),那么验证器必须确保它在文档中是唯一的。请注意,ID必须以字母或下划线开头,因此纯数字不起作用

个人而言,我不使用ID(我觉得它对我来说太有限),但你应该考虑一下。请注意,默认情况下,XML模式工具不会为您生成唯一的ID(尽管XSLT会)

请注意,属性的名称(在您的示例中为“id”)可以是任何有效名称(例如“id”、“foo”),但必须在DTD或模式中声明为id类型

更新:OP询问我们为什么不使用XML ID。我们经常合并来自不同来源的节点,例如

ID是作者选择的(这不是一个单一的数据库应用程序-更多地考虑人们在社区中创建博客帖子并创建他们的ID。因此,人们创建相同的ID(主要是m1)是很常见的。在这种情况下,我们可能会:

这看起来很可怕,但没有简单的答案

我们使用其他信息来消除歧义。我们有一个规则,ID在一定范围内是唯一的-例如,分子中的原子必须有唯一的ID

如果我们使用一个独特的ID生成器,这些都是完全不透明的,我们社区中的人类会反抗(他们反抗了)


在一个非托管的人类社区中,ID不容易管理!

太好了!正是我想要的。像“r1”、“r2”这样的ID有点让人困惑,但这不是问题。顺便说一句,我想知道在这种情况下,如果你不使用ID,你会怎么做?我们的问题是我们经常合并文档。请参阅我的答复。幸运的是,这不是我的情况。再次感谢。