XML之DTD

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>&lt;&lt;Java范例完全自学手册&gt;&gt;</name>
    <publisher>人民邮电出版社</publisher>
    <author>张三&amp;李四</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)*>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # XML复习 ## 第一章 ## 思考题 **什么是XML?** XML是可扩展性标记语言,XML是标准通用标记...
    冷漠铁锤丁富贵阅读 843评论 0 0
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,816评论 1 45
  • 什么是约束? 在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这就是XML约束。约束定义了文档的结...
    tobe_superman阅读 850评论 0 3
  • xml经典总结 XML(eXtensible Markup Language)是万维网联盟(World Wide ...
    java日记阅读 1,001评论 0 2
  • 经过两天的奋战,终于把xml简略的过了一遍。 1.1XML介绍 xml是Extensible Markup lan...
    Ystrator阅读 861评论 0 2