文章目录
- xml基本介绍
- xml语法
- DTD约束简介
- DTD语法
xml基本介绍
xml称为可扩展标记语言,用户可以按照xml规则自定义标记。
html是用来显示数据的,而xml是用来传输和存储数据的。
xml文件后缀名为 .xml
注意html中空格会被自动过滤,而xml中的空格不会被自动删除。
xml语法
一个简单的xml例子
<中国>
<河北>
<城市>张家口</城市>
<城市>石家庄</城市>
</河北>
<山西>
<城市>太原</城市>
<城市>大同</城市>
</山西>
</中国>
1、文档声明
<?xml version="1.0" encoding="UTF-8"?>
必须位于文档开头第一行。
2、元素定义
xml中主体内容都是有元素组成的,元素一般由开始标记、属性、元素内容、结束标记构成。
在一个元素中可以嵌套若干个子元素,如果一个元素没有嵌套在其他元素内,则这个元素就是根元素,根元素是xml文档定义的第一个元素。
如果一个元素中没有嵌套子元素,也没有包含文本内容,则这样的元素成为空元素,空元素可以不用结束标记,例如<img />
3、属性定义
在一个元素中可以有多个属性,并且每个属性都有自己的名称和取值。
例如<售价 单位="元">25</售价>
4、注释
语法同html<!--被注释的内容-->
为了对xml文档进行一定的约束和语法规则,目前最常用两种约束语言对xml进行约束,分别是DTD和Schema。xml schema的功能比dtd强大的多,但是语法也更复杂。这里我只学一下dtd约束。
DTD约束简介
文件后缀名为 .dtd, 在DTD文件中可以包含元素的定义、元素之间关系的定义、元素属性的定义以及实体和符号的定义。
DTD对xml的约束
使用dtd文件约束xml文档有两种方式:一是内嵌的方式(在xml中直接嵌入dtd),二是从文件的外面引入一个.dtd文件。
一是内嵌的方式(在xml中直接嵌入dtd)
<水果摊>
<水果>
<水果名>苹果</水果名>
<价格>10元</价格>
</水果>
<水果>
<水果名>桃子</水果名>
<价格>15元</价格>
</水果>
</水果摊>
二是从文件的外面引入一个.dtd文件
引入本地的dtd文件<!DOCTYPE 根元素名称 SYSTEM "外部dtd文件uri">
引入公共dtd文件<!DOCTYPE 根元素名称 PUBLIC "dtd名称" "外部dtd文件uri">
引入本地dtd文件示例
1.xml
<水果摊>
<水果>
<水果名>苹果</水果名>
<价格>10元</价格>
</水果>
<水果>
<水果名>桃子</水果名>
<价格>15元</价格>
</水果>
</水果摊>
1.dtd
<!ELEMENT 水果摊 (水果+)>
<!ELEMENT 水果 (水果名, 价格)>
<!ELEMENT 水果名 (#PCDATA)>
<!ELEMENT 价格 (#PCDATA)>
DTD语法
1、元素定义
<!ELEMENT 元素名称 元素内容>
用于定义一个元素
元素名称是自定义的名称,用于定义被约束xml文档中的元素。
元素内容是对元素包含内容的声明,包括数据类型和符号两部分
5种数据类型
#PCDATA:表示元素中嵌套的内容是普通文本字符串
子元素:说明元素包含的元素
混合内容:表示元素既可以包含字符数据,又可以包含子元素
EMPTY:表示该元素既不包含字符数据,也不包含子元素,是一个空元素
ANY:表示该元素可以包含任何的字符数据和子元素
符号
+ : 表示出现一次或者多次
? : 表示零次或者一次
* : 表示任意次
2、属性定义
在dtd文档中,定义元素的同时,还可以为元素定义属性。
<!ATTLIST 元素名
属性名1 属性类型 设置说明
属性名2 属性类型 设置说明
……
>
属性类型就是标记属性值是什么数据类型
设置说明用来说明该属性是否必须出现
设置说明 | |
#REQUIRED | 表示元素的该属性是必须的 |
#IMPLIED | 表示元素可以包含该属性,也可以不包含该属性 |
#FIXED | 表示一个固定的属性默认值,在xml文档中不能将该属性设置为其他值 |
默认值 | 如果不包含该属性,就自动为dtd中定义的默认值,与fixed不同,这个值可以改变 |