DTD声明元素属性
使用DTD的ATTLIST关键字可以为XML声明元素的属性。
<!ATTLIST price unit CDATA "RMB">
price
: 表示要声明属性所在的元素
unit
: 表示属性名称
CDATA
: 表示属性的类型
RMB
: 表示属性默认值,unit省略不写时默认为RMB。
在DTD声明列举属性值
如果希望属性值是一系列固定值之一,可以使用列举属性值。
使用DTD的ATTLIST关键字声明属性时,“|” 可以为属性列举具体的属性值,在XML中使用该属性时,其值必须为列举的值之一。
<!ATTLIST price unit (元|角|分) "元">
(元|角|分)
: 列举price属性值为元,或角,或分。
"元"
: 表示未明确写出该属性时,其属性值为元。
内部定义DTD
XML 的使用规则是由使用者自己来定义的,如果其他人想使用这个XML就要遵守其使用规则,这个规则可以通过 DTD 来定义。
在定义 XML 文档结构时,使用DOCTYPE可以声明DTD。
如果DTD编写错误,使用浏览器打开XML文件,也会报错。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (name, publisher, author, ISBN, price, url)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT url (#PCDATA)>
]>
<book>
<name><<Java范例完全自学手册>></name>
<publisher>人民邮电出版社</publisher>
<author>张三&李四</author>
<ISBN>987115201027</ISBN>
<price>59.80</price>
<url><![CDATA[http://www.baidu.com]]></url>
</book>
DOCTYPE
: 表示声明 DTD 的关键字。
ELEMENT
: 用于声明 XML 元素。
使用外部 DTD
一般会把DTD单独定义成一个DTD文档,XML通过引用的方式使用DTD的定义。
<!DOCTYPE book SYSTEM "simple_demo.dtd">
使用DOCTYPE表示DTD时,SYSTEM表示引用一个外部DTD,在SYSTEM后面添写DTD的URL地址。
book
: 表示是XML的根节点
simple_demo.dtd
: 表示DTD文件的名称
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT book (name, publisher, author, ISBN, price, url)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT url (#PCDATA)>
SYSTEM的位置既可以定义为SYSTEM,又可以定义为PUBLIC,当定义为PUBLIC时,表示引用的DTD是由权威机构定制的,供特定行业或公众使用。
使用DTD定义XML元素
XML的基本单位是元素,所以在DTD中声明元素也是最基本的,ELEMENT用于DTD元素的声明,在声明的同时还可以定义元素的使用情况。
使用DTD的ELEMENT关键字可以声明XML元素。
<!ELEMENT name (#PCDATA)>
name
: 表示XML元素的名称
根据上述定义,book元素只能包含name元素、publisher元素、author元素、ISBN元素、price元素、url元素。
在定义DTD时,如果不想给某个元素的约束太强,让它包含任意内容,可以把元素定义成ANY。
<!ELEMENT book ANY>
如果希望元素内容没有任何内容,则可以定义为EMPTY。
<!ELEMENT name EMPTY>
DTD声明重复元素
定义DTD时,默认子元素只能在父元素里出现一次。
如果希望父元素内部能出现多个子元素,声明时要在子元素的谋面添加“+”。
<!ELEMENT book (name, publisher, author+, ISBN, price, url)>
- 使用 “+” 表示XML子元素在其父元素里至少出现一次,也可以出现多次。
- 使用 “*” 表示XML子元素可以在其父元素中出现零次或多次。
- 使用 “?” 表示该元素只能出现零次或一次。
DTD声明选择性元素
使用 “|” 元素时,“|” 前后的两个元素在父元素中有且只有一个出现。
<!ELEMENT book (name, publisher, author+, ISBN, price, (tel|phone))>
在DTD里把 “|” 和 “*” 混合在一起使用,可使定义的元素更灵活。
<!ELEMENT book (name|publisher|author|ISBN|price|tel|phone)*>
网友评论