什么是DTD
用于定义XML的结构和语法规则,避免出现数据的混乱
还用于配置XML,保证定义的标准
DTD的内容放置
XML中
也可以放在专门的DTD文档中
实例代码
例如 <student> <name>刘伟</name> <number>232123</number> </student> 一个student标签只能包含一个<name>和<number>标签
<!DOCTYPE>
<!DOCTYPE>声明位于文档中的最前面的位置,处于<HTML>标签之前。此标签可告示浏览器文档使用那种html或XHTML规范
该标签可声明三种DTD类型,分别表示严格版本、过渡版本以及基于框架的HTML文档。
PS :
下面咱先来全局观看看学习的内容吧
XML内置DTD内容
<?xmlversion="1.0" encoding="utf-8"?> <!DOCTYPE书籍列表[ <!ELEMENT书籍列表(计算机书籍*)> <!ELEMENT计算机书籍(书名,价格,简要)> <!ELEMENT书名(#PCDATA)> <!ELEMENT价格(#PCDATA)> <!ELEMENT简要(#PCDATA)>]> <书籍列表> <书籍列表> <计算机书籍> <书名>XML</书名> <价格>55.5</价格> <简要> 整理过程 </简要> </计算机书籍> </书籍列表>
外部DTD
两种类型
系统共享 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个预定义的实体引用:
< |
< |
@H_601_404@
> |
> |
@H_601_404@
& |
& |
@H_601_404@
' |
' |
@H_601_404@
" |
" |
@H_601_404@
非法的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)来进行声明
语法:
实例 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值 |
默认值有四种类型
默认值参数可使用下列值:
规定一个默认的属性值 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>
命名空间
前缀标识发
以上是DTD的基本使用,不足之处还请谅解