我是XML和XSD的新手,我对XML-Schema验证有疑问。考虑XML文件:
<RequestList>
<Request1 id="1">...</Request1>
<Request2 id="2">...</Request2>
.
.
.
</RequestList>
我想强制id属性是唯一的。如果元素具有相同的类型,谷歌帮助了我很多。但我不能制作一个sinlge元素序列'Request',因为每个请求可以包含不同的信息,根据他的类型。我该怎么办? 在此先感谢您的帮助。
答案 0 :(得分:1)
XML规范定义了唯一的ID类型:
有效性约束:ID
ID类型的值必须与Name匹配 生产。名称不得出现 不止一次在XML文档中作为 这种类型的价值;即ID值 必须唯一地标识元素 承担他们的。
名称制作
[5] Name ::= (Letter | '_' | ':') ( NameChar)*
这表示如果属性声明为类型ID(无论是在DTD还是XMLSchema中),则验证程序必须确保它在文档中是唯一的。请注意,ID必须以字母或下划线开头,因此纯数字不起作用。
我个人不使用ID(我发现它对我来说太限制了),但你应该考虑一下。请注意,XML Schema工具默认情况下不会为您生成唯一的ID(尽管XSLT会这样)。
请注意,属性的名称(在您的情况下为“id”)可以是任何有效名称(例如“Id”,“foo”),但必须在IDD类型的DTD或Schema中声明。
更新:OP询问我们为什么不使用XML ID。我们经常合并来自不同来源的节点,例如
和
ID是作者所选择的(这不是一个单一的数据库应用程序 - 更多地考虑在社区中创建博客帖子并创建他们的ID。因此人们创建相同的ID(主要是m1)是很常见的。那种情况我们可能会有:
这看起来很可怕,但没有简单的答案。
我们使用其他信息来消除歧义。我们有一个规则,即id在某个范围内是唯一的 - 例如分子中的原子必须具有唯一的ID。
如果我们使用了一个独特的ID生成器,那么这些生成器完全不透明,我们社区中的人类会反叛(他们确实如此)。
在非托管人类社区中,ID不容易管理!