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