目录
1.什么是DTD
DTD(文本类型定义),定义XML文档的合法构建模块。它使用一系列的合法元素定义文档结构。
2.什么是XML
XML值指可扩展标记语言(extensible Markup Language)。
可扩展标记语言(英语:Extensible Markup Language,简称:XML)是一种标记语言,是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展演示语言(XSL)、XBRL和XPath等
3.XML与HTML的主差异
- XML被设计为传输和存储数据,其焦点是数据的内容
- HTML被设计用来显示数据,其焦点是数据的外观
- HTML指在显示信息,而XML指在传输信息
4.XML的两种文档约束
XML文档定义分为Schema和DTD两种形式
- Schema是对XML文档结构的定义和描述,其主要的作用是用来约束XML文件,并验证XML文件有效性。
- DTD的作用是定义XML的合法构建模块,它使用一系列的合法元素来定义文档结构
5.XML格式要求
- 有且只有一个根节点
- 由开始标签和结束标签组成(包含空标签)
- 严格区分大小写
- 正确的嵌套标签
- 属性必须使用双引号
- 特殊字符必须转义处理
特殊字符 | 实体引用 |
> | >> |
< | << |
& | && |
' | '' |
" | "" |
5.使用DTD
5.1.在XML中加入DTD申明
- 内部的DOCTYPRE声明
<!DOCTYPE 根元素 [元素声明]>
- 外部文档声明
<!DOCTYPE 根元素 SYSTEM "文件名" [元素声明]>
5.2.元素的定义语法
语法:
<!ELEMENT 元素名称 元素类型>
元素分类:
- 空元素:<!ELEMENT 元素名称 EMPTY>
- 文本元素:<!ELEMENT 元素名称 (#PCDATA)>
- 混合元素: <!ELEMENT 元素名称 (子元素1,子元素2,。。。)>
元素的限制:
限制 | 说明 |
, | 表示内容的出现必须与声明的一致 |
| | 表示两个或多个时只能出现一个 |
+ | 表示元素出现1次或多次 |
* | 表示元素出现0次或多次 |
? | 表示元素出现0次或1次 |
什么都不指定,默认1次 |
5.3.属性的定义语法
语法:
<!ATTLIST 元素名称 属性名称 属性类型 设置说明>
属性类型 :
类型 | 描述 |
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文档约束示例
<?xml version="1.0" encoding="UTF-8" ?>
<!--内部声明-->
<!DOCTYPE persons[
<!ELEMENT persons (person*) >
<!ELEMENT person (name,age,contact,br?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT contact (phone|mail)>
<!ELEMENT br EMPTY>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT mail (#PCDATA)>
<!ATTLIST person
pid ID #REQUIRED
paddr CDATA #IMPLIED
psex (男|女) "男"
>
]>
<!--外部声明-->
<!DOCTYPE persons SYSTEM "person.xml" [
<!ELEMENT persons (person*) >
<!ELEMENT person (name,age,contact,br?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT contact (phone|mail)>
<!ELEMENT br EMPTY>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT mail (#PCDATA)>
<!ATTLIST person
pid ID #REQUIRED
paddr CDATA #IMPLIED
psex (男|女) "男"
>
]>
<persons>
<person pid="p01" paddr="123" psex="男">
<name>张三</name>
<age>22</age>
<contact>
<phone>15882821111</phone>
</contact>
<br/>
</person>
<person pid="p02" >
<name>李四</name>
<age>23</age>
<contact>
<mail>123@qq.com</mail>
</contact>
</person>
</persons>