XML文件中DTD的简单应用-属性表声明

来源:互联网 发布:手机淘宝的差评怎么改 编辑:程序博客网 时间:2024/06/05 10:28

属性用于将名字-值对与元素进行关联。
属性说明只能在【开始标签】和【空元素标签】中出现。
属性表声明详细说明了与给定元素类型相关联的每一个属性的名字,数据类型和缺省值。

属性表声明的语法如下:
<!ATTLIST 元素名 属性名 属性类型 缺省声明>
元素名:属性所属的元素的名字
属性名:属性的名字
属性类型:用来指定该属性属于哪种类型,共十种类型
缺省声明:用于说明在元素中该元素是否必须出现,如果不是必须出现,那么在没有出现时,XML处理器该如何
处理。


(1)缺省声明
有4中缺省设置:
#REQUIRED:说明元素必须提供该属性
#IMPLIED:说明元素可以包含该属性,也可以不包含
#FIXED+缺省值:说明一个固定的属性缺省值
只有缺省值:与#FIXED+缺省值一样,如果元素不包含该属性,XML处理器将以声明的缺省值向应用程序报告该

属性。不同的是,这种声明方式属性的值是可以改变的。

例:
<?xml version="1.0" encoding="gb2312"?>

<!DOCTYPE bbs [
<!ELEMENT bbs (article*)>
<!ELEMENT article (title,author)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ATTLIST author ip CDATA #IMPLIED>
<!ATTLIST articale copyright CDATA #FIXED "版权归本论坛所有">
]>

<bbs>
 <article>
  <title>阿斯顿和控件</title>
  <author ip="192.168.0.165">张三</author>
 </article>
 <article>
  <title>地方过多个</title>
  <author>张三</author>
 </article>
</bbs>

代码说明:
<!DOCTYPE bbs [ : 根元素bbs
<!ELEMENT bbs (articale*)> :0个或多个articale结点
<!ATTLIST author ip CDATA #IMPLIED>:author元素的ip属性可有可无
注:在这里我尝试用#REQUIRED代替#IMPLIED,在浏览器中查看却没有报错,不知道什么原因(<author>张三

</author>)
<!ATTLIST article copyright CDATA #FIXED "版权归本论坛所有">:元素article属性ip,格式字符型(CDATA)

,固定的缺省值:"版权归本论坛所有"
注:在这里我尝试设置其中一个article元素的copyright属性为一个特殊值,但是在浏览器中显示结果与只有

缺省值方式是一样的


属性类型:
属性共有10种类型:
CDATA:字符数据,如果属性中出现<和"和&,必须使用预定义实体引用或者字符引用的方式插入。
Enumerated:枚举类型在实际使用中不用Enumerated,直接将属性值放在()中,使用|分隔属性。
 如:<!ATTLIST person sex(male|female) #REQUIRED>
ID,IDREF,IDREFS:一个ID类型的属性值唯一的标志了XML文档中的一个元素。以字母,下划线或冒号开头,名称

中可以包含字母,数字和下划线以及其他在XML标准中的允许字符,名称中不能带有空格。一个元素只能有一个

ID类型的属性,ID类型的属性必须设置为#IMPLIED或者#REQUIRED
ENTITY,ENTITYS,
 ENTITY类型的属性把外部的二进制数据连接到文档。
 ENTITY类型的属性值是在DTD中声明的未分析的一般实体的名称。
 
 例如我想在文档中包含一幅外部图像,可以声明ENTITY类型属性:
 <!ATTLIST image src ENTITY #REQUIRED>
 在DTD中,还需要声明一个外部一般实体:
 <!ENTITY logo SYSTEM "http://www.sunxin.org/logo.gif" NDATA gif>
 关键字NDATA表示该实体是一般未分析实体, 后面的gif是记号名称, 用来说明实体的数据格式或指 

 定一个外部的处理程序。gif的声明如下:
 <!NOTIFICATION gif SYSTEM "iexplorer.exe">
 在XML文档中, 可以在src属性中引用图像:
 <image scr="logo">

NMTOKEN,NMTOKENS: 用来限制名称只能包含名称字符(字母,下划线,冒号等),而不能包含空格。例如限制 

文件名:<!ATTLIST file name NMTOKEN #REQUIRED>
 <file name="aaa.txt">
 <!ATTLIST file name NMTOKENS #REQUIRED>
 <file name="aaa.txt bbb.doc">
 
NOTATION: 记号声明,用来处理XML处理器不支持的文件,如声音,图像等。
 记号声明有两种方式:
 1. 使用MIME
 <!NOTATION gif SYSTEM "image/gif">
 2. 使用URI路径, 指出外部处理程序的位置:
 <!NOTATION gif SYSTEM "iexplorer.exe">
 注 : 也可以使用PUBLIC代替SYSTEM

例:
ID 与 IDREF
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE company[
<!ELEMENT company (employee|manager)*>
<!ELEMENT employee (name)>
<!ELEMENT manager EMPTY>
<!ELEMENT name (#PCDATA)>
<!ATTLIST employee sn ID #REQUIRED>
<!ATTLIST manager mgrid IDREF #REQUIRED>
]>
<company>
 <employee sn="E-200402100001">
  <name>张三</name>
 </employee>
 <employee sn="E-200402100002">
  <name>李四</name>
 </employee>
 <manager mgrid="E-200402100001">
</company>

#IDREFS : 用来表示引用多个ID, 每个ID之间用空格分隔, 例如上面manager
:
<!ATTLIST manager mgrid IDREFS #REQUIRED>
<manager mgrid="E-200402100001 E-200402100002">


例:
NOTATION
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE WebPage[
<!ELEMENT WebPage (image)*>
<!ELEMENT image (src)>
<!ELEMENT src (#PCDATA)>
<!NOTATION gif SYSTEM "image/gif">
<!NOTATION jpg SYSTEM "iexplorer.exe">
<!ATTLIST image type NOTATION (gif|jpg) #REQUIRED>
]>
<WebPage>
 <image type="gif">
  <src>http://www.sunxin.org/logo.gif</src>
 </image>
</WebPage>