前言
学习XML,就一定不能错过DTD,虽然有XML不一定需要DTD,但是有DTD的XML要比没有DTD的XML更加的标准化,,所以现在来让我们一起了解一下DTD。
内容
DTD是XML中的一种语法规则,全称为Document Type Definition(文档类型定义)在执行的时候需要符合该语法规则进行,为了正确交换数据,XML文件需要确定的结构:
eg.
定义了DTD结构的XML语句:我今天吃饭了(主谓宾)
没有定义DTD结构的XML语句:饭今天吃我了、今天饭我吃了、今天我吃了饭(没有特定的语法结构)
DTD就是为了防止这种语法的出现
DTD的内容
所以我们可以看出:
- DTD定义XML文件的结构
- DTD为XML文件提供语法与规则
- DTD内容既可以定义在XML文件中,也可以定义在XML文件之外
- DTD使用XML进行数据交换的行业或组织可定义自己的DTD
- DTD对于XML是可选的内容
DTD既可以内置到XML中,也可以在XML外部。
DTD定义到内部:
<?xml version= "1.0" encoding = "utf-8"?>
<!DOCTYPE 书籍列表[
<!ELEMENT 书籍列表(计算机书籍)*>
<!ELEMENT 计算机书籍(书名,价格,简要介绍)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 价格(#PCDATA)>
<!ELEMENT 简要介绍(#PCDATA)>
]>
----------显示的内容一定要按照上面给出的循序,否则出错-------------
<书籍列表>
<计算机书籍>
<书名>XML的今生今世</书名>
<价格>66.66</价格>
<简要介绍>该书详细描写XML从出生到衰老的整个过程</简要介绍>
</计算机书籍>
</书籍列表>
DTD定义到外部:
-----------新建一个文件DTD文件book.dtd-------------
<?xml version= "1.0" encoding = "utf-8"?>
<!DOCTYPE 书籍列表[
<!ELEMENT 书籍列表(计算机书籍)*>
<!ELEMENT 计算机书籍(书名,价格,简要介绍)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 价格(#PCDATA)>
<!ELEMENT 简要介绍(#PCDATA)>
]>
---------------使用外部DTD文件-----------------
<?xml version= "1.0" encoding = "utf-8"?>
<!DOCTYPE 书籍列表 SYSTEM "book.dtd">
...
从上面我们也可以看出来,meigeXML文档单独定义的DTD可推广位一个系统内共享的功用DTD,只需要用到关键字SYSTEM
作为引用一个作者或组织所编写的总舵XML文档种通用的DTD
另外还有一种外部DTD,就是由权威机构制定的,提供给特定行业或公众使用的DTD。关键字是PUBLIC
DTD中的元素
DTD中的元素种类多种,现在介绍三种。
元素声明
<!ELEMENT 元素名称 类别> 或者<!ELEMENT 元素名称 (元素内容)>
eg.
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 计算机书籍(书名,价格,简要介绍)>
空元素EMPTY
<!ELEMENT 元素名称 EMPTY>
eg.
DTD中:<!ELEMENT br EMPTY>
XML中:<br/>
任何内容的元素
<!ELEMENT 元素名称 ANY>
eg.
DTD中:<!ELEMENT student ANY>
XML中:<student>刘伟</student>
<student><name>刘伟</name></student>
从上文中我们可以看到
<!ELEMENT 书籍列表(计算机书籍)*>
所以简单介绍(计算机书籍)*的意思,这句含义表示计算机书籍可以出现零次或多次,下面是针对字符的含义做出的介绍:
字符 | 含义 |
---|---|
+ |
出现一次或多次 |
* |
出现零次或多次 |
? |
可选,不出现或出现一次 |
() |
一组要共同匹配的表达式 |
丨 |
或(OR) |
' |
并(AND),要求严格遵从顺序要求 |
DTD的属性
在DTD中,属性通过ATTLIST来进行声明
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
eg.
------------DTD文件中----------------
<!ATTLIST payment type CDATA "cash" >
------------XML中引用----------------
<payment type = "cash" />
DTD中的类型有:
类型 | 描述 |
---|---|
CDATA |
职位字符数据(character data) |
(en1丨en2丨..) |
此值是枚举列表中的一个值 |
ID |
值为唯一的id |
IDREF |
值为另外一个元素的id |
IDREFS |
值为其他id的列表 |
NMTOKEN |
值为合法的XML名称 |
NMTOKENS |
值为合法的XML名称的列表 |
ENTITY |
值为一个实体 |
ENTITIES |
值为一个实体列表 |
NOTATION |
此值时符号的名称 |
xml: |
值是一个预定义的XML值 |
#REQUIRED |
属性值是必须的 |
#IMPLIED |
属性值不是必须的 |
#FIXED value |
属性值是固定的 |