xml语法规则
2.1. xml的声明
xml的声明必须写在文件第1行
Encoding(字符集)属性可以省略,默认的字符集是utf-8
常见错误写法
1) "?"和xml之间不能有空格
2) 声明必须顶头写,不能有空行(用FireFox浏览器打开)
3) 不要多写空格(Java程序员的习惯)
浏览器不会报错,但是在xml解析时会出问题
2. 标记
1) 诸如 <书名></书名> 这样格式的被称为标记,标记成对出现
2) 标记包括开始标记和结束标记
3. 元素(Element)
1) 元素: 元素包括标记和其中的内容
2) 根元素: 最外层的元素叫根元素
3) 叶子元素: 最里层的(没有子元素的)元素叫叶子元素
4) 空元素:没有内容的元素叫空元素,比如<a></a>,可以简写为:<a />
5) 元素必须遵循的语法规则
所有的标记都必须有结束
开始标记和结束标记必须成对出现
元素必须正确嵌套
<a><b>c</b></a> (正确)
<a><b>c</a></b> (错误)
标记的大小写敏感 Hello 和 hello不是同一个标记
有且只能有一个根元素
4. 实体引用(转义字符)
1) 小于号(<): less than --> < ;
2) 大于号(>): great than --> > ;
3) And符号(&): &
4) 双引号(“): "
5) 单引号(‘): '
注意这些转义字符都是以&开头,以;结尾的
5. 属性(定义在开始标记中的键值对)
1) 格式:属性="属性值"
2) 要求:
属性必须有值
属性值必须用引号引起来,单引号或双引号都可以,但必须一致
6. CDATA类型的数据:特殊标签
1) 格式: < ! [ CDATA [ 文本内容 ] ] >
2) 特殊标签中的实体引用都被忽略,所有内容被当成一整块文本数据对待
注:CDATA表示是一整块,其中包括的特殊字符,比如<<丌是全角的《
7. 注释(xml和html相同)
1) <!-- 这是一段注释 -->
2) 编译器将忽略注释
3) Html和xml注释方式相同
8. 规则小结
1) 必须有唯一的根元素
2) xml标记大小写敏感
3) 标记必须配对出现,有开始有结束
4) 元素必须被正确嵌套
5) 属性必须有值,值必须用引号引起来
6) 如果遵循所有的规则,称作格式良好的xml文件(well-formed)
9. 使用XML文件描述数据的例子
1) 早期属性文件描述数据的方式
url = jdbc:oracle:thin@192.168.0.26:1521:tarena
dbUser = openlab
dbPwd = open123
2) 现在使用xml表示方式
<datasource id="db_oracle">
<property name="url">jdbc:thin@192.168.0.26:1521:tarena</property>
<property name="dbUser">openlab</property>
<property name="dbPwd">open123</property>
</datasource>
3. DTD/Schema
1) DTD / Schema: 用来规范XML的标记规则
2) 有效的xml文件(valid xml file) = 格式良好的xml文件 + 有DTD或Schema规则 + 遵循
DTD或Schema的规则
3.1. DTD/Schema的由来
行业交换数据时要求xml文件格式相同,所以需要大家遵守规范的xml文件格式,比如两仹xml
文件要有相同的元素嵌套关系、相同的属性定义,相同的元素顺序,元素出现相同的次数等。
这两个文件数据相同,但结构丌同,无法交换数据。
3.2. 文档类型定义DTD(Document Type Difinition
1) DTD文档用来定义XML文件的格式,约束XML文件中
2) DTD类型
PUBLIC(行业共用的)
SYSTEM(小范围自定义的)
3.2.1. DTD中的定义规则
浏览器显示(dtd内容不显示)
常见错误
1) 书籍列表和"("间少空格
2) 全角的逗号“,”
3) dtd定义的“作者”和“书名”的顺序和xml文件中出现的顺序不一致
1) 增加第2本武侠小说(必须遵循dtd中“武侠小说”定义的规范)
2) "*"星号表示该元素可出现0-n次
1) 至少有1个作者,多则不限
2) "+"加号表示出现1-n次
1) 简介有没有都可以
2) "?"问号表示出现0或1次
知识点小结
1) 元素
出现一次而丏有顺序的元素:书名, 作者, 价格, 册数, 简介
"*"星号: 表示出现0-n次的元素
"+"加号: 表示出现1-n次的元素
"|" : 表示或(只能出现一个)
比如(phone | mobile)表示固话或手机二选一
(phone | mobile)*: 表示phone或mobile可出现仸意多次
"?"问号: 表示出现0或1次
2) 属性(Attribute)
定义在开始标记中的键值对
3.3. Schema
1) 命名空间(NameSpace) XML文件允许自定义标记,所以可能出现来自丌同源DTD或
Schema文件的同名标记,为了区分这些标记,就需要使用命名空间。
命名空间的目的是有效的区分来自不同DTD的相同标记
比如如下xml文件中使用了命名空间区分开“表格”和“桌子”:
<html:table>
<line><column>这是一个表格</column></line>
</html:table>
<product:table>
<type>coffee table</type>
<meterial>wood</meterial>
</product:table>
因为DTD无法解决命名冲突,所以出现Schema,它是DTD的替代者
dtd和schema的功能都是用于描述XML结构的
Schema支持命名空间,使用xml语法实现(Schema本身就是xml文件)
因为用于规范和描述xml文件的定义文件(schema)本身也是xml文件,所以xml 也被称
是自描述的语言
5) Schema中的名词:
复杂元素(有子元素的元素)
简单元素(叶子元素)
学习建议:
一般情冴下,程序员的工作是根据已有的xsd或dtd文件规则编写xml文件,故现在丌必过分关注
dtd或xsd文件细节。