微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XML定义属性ID、IDREF、IDREFS详解(2012

属性类型:ID 含义:特定文档中唯一的名称


属性类型:IDREF 含义:对某些具有ID属性的元素的引用,这些元素的ID属性值必须与IDREF属性的值相同


属性类型:IDREFS 含义:若干以空格分隔的IDREF


属性类型:ENTITY 含义:已定义的外部实体的名称


属性类型:ENTITIES 含义:若干以空格分隔的ENTITY名称


属性类型:NMTOKEN 含义:名称


属性类型:NMTOKENS 含义:若干以空格分隔的NMTOKEN


属性类型:NOTATION 含义:接受一个在DTD中声明为用于指示表示法类型的名称


属性类型:枚举值 含义:接受用户显式定义的属性可选值中的一个


毫无疑问,对于ID类型的属性,其值必然是具有唯一标识功能名称。而且它们必须遵守XML名称定义的规则。特定元素的ID属性值在整个文档中必须是唯一的。它可以作为元素的唯一标识符。每个元素至多有一个ID类型的属性

最后需要说明的是,ID类型的属性必须设置为#IMPLIED或#REQUIED,不能是#FIXED或缺省的。可想而知,为ID提供缺省值,特别是固定的缺省值是毫无意义的。这会破坏ID的唯一性。例如,在下面的声明中,社会保障号(SSN)作为个人的唯一标识符,并与文件中的个人信息相关联:


<!ATTLIST Person SSN ID #REQUIED>


如何使ID类型的属性发挥作用呢?当然是通过引用。我们可以利用它在两个对象之间建立一对一的关系。IDREF类型可以用于在文档中创建链接和交叉引用。IDREF属性的值必须受到与ID类型同样的约束。它们必须与文档中的某个ID属性具有相同的值。IDREF值不能指向文档中不存在的ID。在应用程序中,我们通过ID和IDREF实现交叉引用,而不必多次重复整个元素。如果文档中包含上述声明,可以在DTD中写入以下声明:


<!ELEMENT Customer EMPTY>
<!ATTLIST Customer id IDREF #REQUIED>


我们很容易想到,id属性是指Person中的SSN属性。则文档中可以写入以下代码


<Person SSN="111-22-333">
<name> ... </name>
</Person>
...
<Customer id="111-22-333">


通过交叉引用,customer可以写作具有IDREF属性的空元素,而不必包含整个Person元素。当我们需要Person信息时,由于Person元素的SSN属性与customcr的id属性具有相同的值,因此应用程序能够通过id找到Person元素。


有时,我们希望将一个元素与其他多个元素相关联。这就要依靠IDREFS类型。它能够建立一对多的关系。这类属性的值是一系列以空格分隔的ID值。其中每个ID必须满足对ID类型的约束,当然它们必须与文档中的ID属性值相匹配。


<!ELEMENT Team EMPTY>
<!ATTLIST Team members IDREFS #REQUIED>

以上代码段声明了一个空元素,它定义了项目组与戚员之间的一对多包古关系。Members属性通过引用Person元紊列举出项目组成员的标识,Person元素是在DTD的其他位置声明的,它具有ID类型的属性。例如:


<Team members="111-22-333 222-11-444 123-45-6789">


以上代码表示的项目组由三个人构成,他们的社会保障号分别是:111-22-333、222-11-444和123-45-6789。


利用ID、IDREF和IDREFS,我们可以表示关系数据库中常见的关系。如果你将XML,作为本地数据库与专用数据模式之间的转换工具,你会深刻体会到这几种类型的价值。

原文地址:https://www.jb51.cc/xml/298717.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。