您的位置:寻梦网首页编程乐园XML 编程XML技术讲座
XML 编程

XML 技术讲座之四

XML DTD的建立与使用(下)

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中,出现在元素定义的正则表达式里,所以对它有一些特殊的规定。参数实体的替换文本中括号必须成对出现,并且,它不能以连接符"|"或","结尾,因为这样常常会留有错误隐患。

  • 来源:网络世界