什么是DTD
DTD(Document Type Definition) 是一套关于标记符的语法规则。它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分。DTD 是一种保证XML文档格式正确的有效方法,可通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。
用于定义XML的结构和语法规则,避免出现数据的混乱
还用于配置XML,保证定义的标准
DTD的内容放置
XML中
也可以放在专门的DTD文档中
实例代码
例如
<student>
<name>刘伟</name>
<number>232123</number>
</student>
一个student标签只能包含一个<name>和<number>标签
<!DOCTYPE>
<!DOCTYPE>声明位于文档中的最前面的位置,处于<HTML>标签之前。此标签可告示浏览器文档使用那种html或XHTML规范
该标签可声明三种 DTD类型,分别表示严格版本、过渡版本以及基于框架的 HTML文档。
PS :
<!DOCTYPE>标签\没有结束标签,
下面咱先来全局观看看学习的内容吧
XML内置DTD内容
<?xmlversion="1.0" encoding="utf-8"?>
<!DOCTYPE书籍列表[
<!ELEMENT书籍列表(计算机书籍*)>
<!ELEMENT计算机书籍(书名,价格,简要)>
<!ELEMENT书名(#PCDATA)>
<!ELEMENT价格(#PCDATA)>
<!ELEMENT简要(#PCDATA)>]>
<书籍列表>
<书籍列表>
<计算机书籍>
<书名>XML</书名>
<价格>55.5</价格>
<简要>
整理过程
</简要>
</计算机书籍>
</书籍列表>
外部DTD
就是将DTD与XML内容分别在不同的文件中
两种类型
系统共享 system关键字
特定行业或公众 public关键字
所以上面实例还可以写成以下内容
DTD内容不变,写成文件book.dtd
在XML文件中插入引用的DTD
<?xml version="1.0" encoding="utf-8">
<!DOCTYPE书籍列表 SYSTEM "book.dtd">
注意:关键字System用于引用一个作者或组织所编写的众多xml文档中通用的dtd
XML文件构成
元素
属性
实体
PCDATA被解析的数据(文本内容)
CDATA不应由xml解析的文本数据
在 XML中有 5个预定义的实体引用:
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ' | 省略号 |
" | " | 引号 |
非法的XML字符必须被替换为实体引用
DTD元素
元素声明使用以下语法:
<!ELEMENT元素名称类别>或者 <!ELEMENT元素名称 (元素内容)>
声明可以包含元素或是没有子元素(只有文本,则填写pcdata)
例如:
<!ELEMENT计算机送枯寂(书名,价格)>
空元素则通过关键字 EMPTY声明
<!ELEMENT元素名称 EMPTY>
实例
DTD中<!ELEMENT br EMPTY>
XML中<br/>
任何元素
表示可以带有任何内容的元素
<!ELEMENT元素名称ANY>
实例
DTD中 <!ELEMENT student ANY>
xml中 <student>刘伟</student>
<student><name>刘伟</name></studente>
对于元素可以添加一些限制,出现的次数
这里就要注意字符的使用了
尤其注意或(or)的使用 | ,以及严格按照顺序的要求的并(AND)符号" ' "
实例
声明只出现一次的元素
<!ELEMENT元素名称(子元素名称)>
<!ELEMENT书籍(计算机书籍)>
最少出现一次的元素
<!ELEMENT元素名称(子元素名称+)>
<!ELEMENT书籍(计算机书籍+)>
xml中
<书籍>
<计算机书籍>
<作者>张珊</作者>
<作者>张四</作者>
</计算机书籍>
</书籍>
成组元素
表示括号中的元素可以成组的出现或重复这里就不再解释了
DTD属性
在DTD中,通过ATTLIST(atlist)来进行声明
语法:
<!ATLIST元素名称属性名称属性类型默认值>
实例
DTD中
<!ATLISTpayment type CDATA "cash">
XML文件中
<paymenttype="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 | 属性值是固定的 |
规定一个默认的属性值
DTD:
<!ELEMENTsquare EMPTY>
<!ATTLIST square width CDATA "0">
合法的 XML:
<squarewidth="100" />
在上面的例子中,"square" 被定义为带有 CDATA 类型的 "width"属性的空元素。如果宽度没有被设定,其默认值为0 。
列举属性值
语法:
<!ATTLIST元素名称 属性名称 (en1|en2|..) 默认值>
DTD 例子:
<!ATTLISTpayment type (check|cash) "cash">
XML 例子:
<paymenttype="check" />
或者
<paymenttype="cash" />
如果您希望属性值为一系列固定的合法值之一,请使用列举属性值。
固定值的默认值语法
#FIXED
语法
<!ATTLIST元素名称 属性名称 属性类型 #FIXED "value">
例子
DTD:
<!ATTLISTsender company CDATA #FIXED "Microsoft">
合法的 XML:
<sendercompany="Microsoft" />
非法的 XML:
<sendercompany="W3School" />
如果您希望属性拥有固定的值,并不允许作者改变这个值,请使用 #FIXED 关键词。如果作者使用了不同的值,XML 解析器会返回错误。
DTD实体
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
实体引用是对实体的引用。
实体可在内部或外部进行声明。
内部实体声明的语法:
<!ENTITY实体名称 "实体的值">
DTD例子:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
XML例子:
<author>&writer;©right;</author>
注释: 一个实体由三部分构成:前面的一个和号 (&), 一个实体名称,以及后面的一个分号 (;)。
实体引用 | 字符 |
< | < |
> | > |
& | & |
" | " |
' |
|
一个外部实体声明
使用System关键字 "URI/URL"
DTD 例子:
<!ENTITYwriter SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
XML 例子:
<author>&writer;©right;</author>
命名空间
解决名称冲突问题, w3c的XML指定了命名空间的标准
前缀标识发
在元素和属性前增加一个标识,区分那个DTD
以上是DTD的基本使用,不足之处还请谅解