XML 技术讲座之四 XML DTD的建立与使用(下)

Posted on 2005-05-17 16:34  lanbin  阅读(363)  评论(0)    收藏  举报

DTD中元素属性的声明

在DTD中定义属性时,我们使用下面的格式来给一个元素定义一组合适的属性,同时指定这些属性的类型和缺省值:

<!ATTLIST 元素名 (属性名 属性类型 缺省值)*>
  • 元素名是属性所属的元素的名字。
  • 属性名是属性的命名。
  • 缺省值是属性的初值。有以下四种类型:
名称 定义 说明方式
必须赋值的属性 XML文档中必须为这个属性给出一个属性值 <!ATTLIST 元素名 属性名 属性类型 #REQUIRED>
属性值可有可无的属性 不要求在XML文档中给该属性赋值,而且也无须在DTD中为该属性提供缺省值 <!ATTLIST 元素名 属性名 属性类型 #IMPLIED>
固定取值的属性 需要为一个特定的属性提供一个缺省值,并且不希望XML文档中另外给出元素值把这个缺省值替代掉 <!ATTLIST 元素名 属性名 属性类型 #FIXED "缺省值">
事先定义了缺省值的属性 需要在DTD中提供一个缺省值,在XML文档中可以为该属性给出新的属性值,也可以不另外给出属性值,采用DTD中给出的缺省值。 <!ATTLIST 元素名 属性名 属性类型 "缺省值">

这里,给出一个完整的例子:

<!ATTLIST 页面作者
姓名 CDATA #IMPLIED
年龄 CDATA #IMPLIED
联系信息 CDATA #REQUIRED
网站职务 CDATA #FIXED "页面作者"
个人爱好 CDATA "上网"
>
  • 属性类型用来指定该属性是属于十个有效属性类型中的哪种类型。这十种类型是:
类型 含义
CDATA 纯文本,由可显示字符组成的字符串
Enumerated 取值来自一组可接受的取值的列表
ID 以属性值的方式为文档中的某个元素定义唯一的标识,用以区分具有相同结构相同属性的不同元素
IDREF 属性值引用已定义的ID值,方法是把那个元素的ID标识值作为该属性的取值;IDREFS是IDREF的复数形式,取值可以是若干个ID标识
IDREFS
ENTITY 取值为一个已定义的实体
ENTITIES
NMTOKEN 面向处理程序的类型
NMTOKENS
NOTATION 取值为一个DTD中声明的符号,这个类型对于使用非XML格式的数据非常有用。

这十种类型,又可分为三个大类。第一大类是字符串类型,指的是CDATA,它的值可以是任何合法的字符串。第二大类是枚举类型,包括Enumerated和NOTATION,需要在DTD中为它们声明可取值的列表。剩下的七个类型都属于第三大类,又称为记法类型,含有不同的词法及语意限定。

参数实体

最后再来说一说参数实体。前面说过,参数实体专门用于DTD,它可以方便元素和属性的声明。在下面这个例子中,参数实体简化了本科生信息和研究生信息中相同部分的录入工作:

<!ENTITY % GENERAL_INFO "姓名 | 学号 | 性别 | 出生日期 ">
<!ELEMENT 本科生 (%GENERAL_INFO;)>
<!ELEMENT 研究生 (%GENERAL_INFO; | 导师)>

虽然从理论上讲参数实体所代表的内容可以为任何文本,但由于它专门用于DTD中,出现在元素定义的正则表达式里,所以对它有一些特殊的规定。参数实体的替换文本中括号必须成对出现,并且,它不能以连接符"|"或","结尾,因为这样常常会留有错误隐患。

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3