首页技术文章正文

怎样为DTD文档中的元素定义属性?

更新时间:2023-06-14 来源:黑马程序员 浏览量:

IT培训班

在DTD文档中,定义元素的同时,还可以为元素定义属性。DTD属性定义的基本语法格式如下所示:

<!ATTLIST元素名
      属性名1属性类型设置说明
      属性名2属性类型设置说明
      ...
>

在上面属性定义的语法格式中,“元素名”是属性所属元素的名字,“属性名”是属性的名称,“属性类型”则是用来指定该属性是属于哪种类型,“设置说明”用来说明该属性是否必须出现。关于“属性类型”和“设置说明”的相关讲解,具体如下。

1.设置说明

定义元素的属性时,有4种设置说明可以选择,具体如下。

(1) #REQUIRED

#REQUIRED表示元素的该属性是必需的,例如,当定义联系人信息的DTD时,我们希望每一个联系人都有一个联系电话属性,这时,可以在属性声明时,使用REQUIRED.

(2) #Ahp IMPLIED

#IMPLIED表示元素可以包含该属性,也可以不包含该属性。例如,当定义一本书的信息时,发现书的页数属性对读者无关紧要,这时,在属性声明时,可以使用IMPLIED。

(3) #FIXED

#FIXED表示一个固定的属性默认值,在XML.文档中不能将该属性设置为其他值。使用#FIXED关键字时,还需要为该属性提供一个默认值。当XML文档中没有定义该属性时,其值将被自动设置为DTD中定义的默认值。

(4)默认值

和FIXED一样,如果元素不包含该属性,该属性将被自动设置为DTD中定义的默认值。不同的是,该属性的值是可以改变的,如果XML文件中设置了该属性,新的属性值会覆盖 DTD中定义的默认值。

2.属性类型

在DTD中定义元素的属性时,有10种属性类型可以选择,具体如下。

(1) CDATA

这是最常用的一种属性类型,表明属性类型是字符数据,与元素内容说明中的#PCDATA相同。当然,在属性设置值中出现的特殊字符,也需要使用其转义字符序列来表示,例如,用&表示字符(&),用&.lt;表示字符(<)等。

(2) Enumerated

在声明属性时,可以限制属性的取值只能从一个列表中选择,这类属性属于Enumerated(枚举类型)。需要注意的是,在DTD定义中并不会出现关键字Enumerated。接下来通过一个案例来学习如何定义Enumerated类型的属性,如下所示。

<? xml version="1.0" encoding="GB2312" standalone▪"yes"?>
<!DOCTYPE 购物篮 [
   <!ELEMENT 购物篮 ANY>
   <!ELEMENT 肉 EMPTY>
   <!ATTLIST 肉 品种(鸡肉|牛肉|猪肉|鱼肉)"鸡肉">
]>
   <购物篮>
      <肉 品种=“鱼肉”/>
      <肉 品种=“牛肉”/>
      <肉/>
   </购物篮>

“品种”属性的类型是Enumerated,其值只能为“鸡肉”、“牛肉”、“猪肉”和“鱼肉”,而不能使用其他值。“品种”属性的默认值是“鸡肉”,所以,即使<购物篮>元素中的第三个子元素没有显式定义“品种”这个属性,但它实际上也具有“品种”这个属性,且属性的取值为“鸡肉”。

(3) ID

一个ID类型的属性用于唯一标识XML文档中的一个元素。其属性值必须遵守XML.名称定义的规则。一个元素只能有一个ID类型的属性,而且ID类型的属性必须设置为#IMPLIED或#REQUIRED。因为ID类型属性的每一个取值都是用来标识一个特定的元素,所以,为ID类型的属性提供默认值,特别是固定的默认值是毫无意义的。接下来通过一个案例来学习如何定义一个ID类型的属性,如下所示。

<?xml version="1.0" encoding="GB2312" standalone="yes" ?>
<!DOCTYPE 联系人列表 [
    <!ELEMENT 联系人列表 ANY>
    <!ELEMENT 联系人(姓名,EMAIL)>
    <ELEMENT 姓名(#PCDATA)>
    < !ELEMENT EMAIL(#PCDATA)>
    <!ATTLIST联系人编号ID #REQUIRED>
]>
  <联系人列表>
    <联系人编号="idl">
        <姓名>张三</姓名>
        <EMAIL> zhang@itcast.cn</EMAIL>
        </联系人>
     <联系人 编号="id2">
        <姓名>李四</姓名>
        <EMAIL>1ieitcast.cn</EMAIL>
     </联系人>
</联系人列表>

将元素为<联系人>的编号属性设置为#REQUIRED,说明每个联系人都有一个编号,同时,属性编号的类型为ID,说明编号是唯一的。如此一来,通过编号就可以找到唯一对应的联系人了。


分享到:
在线咨询 我要报名
和我们在线交谈!