一,XML简介·
xml全称为 extensible markup language,可扩展性标记语言,所有浏览器都有xml的解析引擎,测试xml文件时,可直接在浏览器中执行。xml主要用来存储数据和传输数据(而非展示数据),是两个服务器进行数据交互的一种方式。
二,XML基本语法规范
1,文件的扩展名是.xml;
2,文件的第一行必须是<?xml version="1.0" encoding="utf-8" ?>,(其中可包含一些属性值);
3,xml中只能有一个根标签,同时标签严格区分大小写,以及每个标签须有结束标签;
4,xml文件中为自定义标签;
范例:演示xml文件的基本格式(bookstore.xml)
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="a1">
<name>水浒传</name>
<author>施耐庵</author>
<price>60</price>
</book>
</bookstore>
三,XML基础知识
<一>xml注释:
<!-- 注释内容 -->
<二>文档声明的属性值:
1,所有的属性值必须用英文双引号括起来;
2,version:版本号,目前流行的任然是1.0;
3,encoding:声明编码格式;
4,standalone:说明文档是否独立,即是否依赖于其他文档;
<三>实体:
xml文件不能解析特殊字符,如<,>,=等等,同时对表达式不做处理,仅仅存储它们;因此在xml中有一套对应的实体转换规则:
最常用的转义字符列表
字符 说明 实体
空格
< 小于 <
> 大于 >
& &符号 &
" 双引号 "
© 版权 ©
® 已注册商标 ®
™ 商标(美国) ™
× 乘号 ×
÷ 除号 ÷
<四>自定义标签规范
1,不能以数字或标点符号开始;
2,名称不可以包含数字和其他字符;
3,不能以xml开始;
4,不可以包含空格;
<五>专业术语与xml文件的数据结构
xml数据是以树结构来进行存储的,根节点又称为根元素,即根标签,从根节点往下,依次称为一级元素,二级元素,元素(element)也可称为节点(node)
四,约束文档
如果没有约束,我们的数据将会非常混乱无章,如下面的一个xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="a1">
<name>水浒传</name>
<author>施耐庵</author>
<price>60</price>
</book>
<book id="a2">
<name>红楼梦</name>
<author>曹雪芹</author>
<price></price>
<remark>读此书获益匪浅</remark>
</book>
</bookstore>
上面的书没有remark标签,但是下面的书却有,而且《红楼梦》没有写明价格。这种数据不一致的情况需要我们使用一个约束来规范我们的数据。xml有两种约束:DTD约束和Schema约束。
<一>DTD约束
DTD,Document Type Difinition,文档约束,这种约束是使用最广泛的约束(时间原因),但是功能不如Schema约束。
1,DTD约束类型
有两种约束,一种是将约束写在一个文件扩展名为.dtd中,然后通过在xml文件中引入外部DTD约束,一种是直接在xml文件中写DTD约束。
2,DTD约束语法(以范例讲解)
<1> 约束写在一个文件扩展名为.dtd中
小编为了方便读者的阅读,对重点进行了标红。这是一个bookstore.dtd文件:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT bookstore (book+)>
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!--注意只有一种数据类型:字符串-->
<!ELEMENT price (#PCDATA)>
<!--注意id必须以字母开头 -->
<!ATTLIST book id ID #REQUIRED>
下面讲解上述范例:
@约束语法的基本格式是:<!ELEMENT 元素>
@第一行:.dtd文件本质还是一个xml文件,因此第一行代码任然是不变的;
@第二行:对根元素进行约束,约束了根元素的子元素有哪些,每个子元素出现的个数(默认为一次)———— <!ELEMENT 根元素 (子元素,子元素......)>
每个子元素后可跟数量字符:
+ 1~n次
? 0~1次
* 0~n次
@第三行:对一级子元素进行约束,约束一级子元素的元素(即二级元素)有哪些以及可出现次数
@第四行~~第六行:对二级元素进行约束,约束了数据类型,在DTD约束中只有一种类型,即PCDATA,字符串类型(另外的一种是声明为 ANY,ANY声明的元素可包含可解析数据组合,其语法格式为 <!ELEMENT 元素 ANY>)。———— <!ELEMENT 元素 (#PCDATA)>,这儿也可进行嵌套,即在括号()中写三级元素。
@第七行:这一行是对book元素的属性进行约束,属性约束语法格式如下:
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性类型及默认值见下表(常用的塔配是 ID+#REQUIRED):
CDATA | 值为字符数据(字符串) |
(en1|en2|...) | 值为枚举列表中的一个 |
ID | 值为唯一的id,不能重复,不能以数字开头 |
值 | 属性的默认值 |
#REQUIRED | 属性值是必须的 |
#IMPLIED | 属性值不是必须的 |
#FIXED value | 属性值是所给定的值 |
<2>直接在xml文件中写DTD约束
语法格式(写在xml文档的第二行): <!DOCTYPE 根元素[ <!--这儿写约束-- > ]>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore [
<!ELEMENT bookstore (book+)>
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!--注意只有一种数据类型:字符串-->
<!ELEMENT price (#PCDATA)>
<!--注意id必须以字母开头 -->
<!ATTLIST book id ID #REQUIRED>
]>
<bookstore>
<book id="a1">
<name>水浒传</name>
<author>施耐庵</author>
<price>60</price>
</book>
<book id="a2">
<name>红楼梦</name>
<author>曹雪芹</author>
<price>75</price>
</book>
<book id="a3">
<name>悲惨世界</name>
<author>雨果</author>
<price>30</price>
</book>
</bookstore>
3.引入外部DTD文档约束
当在外部写好约束后,需要将约束引入需要约束的xml文件(写在第二行),有两种引入方式。
<1>引入本地外部文件约束:
语法: <!DOCTYPE 根标签 SYSTEM "DTD文件位置">
<2>引入网上的外部文件:
语法:<!DOCTYPE 根标签 PUBLIC "DTD文件名" "DTD文件所在地址">
<二>Schema约束
Schema约束便不是为了替代DTD而出生的,只是作为优化完善而诞生的。Schema约束功能相比DTD是非常强大的存在,然而强大的东西就会很复杂。Schema约束相比DTD约束有以下优势
①面向对象,可以继承,扩展;②能够对数据详细的约束,以及元素出现的顺序,次数,还支持正则表达式等·;③支持命名空间,在不同的命名空间可以有重复元素。
Schema约束只能写在外部文件中,且文件扩展名为.xsd。
为了方便读者快速入门掌握,小编依旧以范例讲解。
1,对Schema头部约束的讲解
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/students"
xmlns:tns="http://www.example.org/students"
elementFormDefault="qualified">
</schema>
第一行代码无需多言。第二行中现在来依次讲解。
<1> xmlns="http://www.w3.org/2001/XMLSchema" : 显示schema约束中用到的元素和数据类型来自命名空间“http://www.w3.org/2001/XMLSchma”,有时这行代码也会写成——————“xmlns:xs="http://www.w3.org/2001/XMLSchema"”,显示schema约束中用到的元素和数据类型来自命名空间“http://www.w3.org/2001/XMLSchma”,同时元素名前需带有前缀 xs:。(此行代码固定)
<2>targetNamespace="http://www.example.org/students" : 声明被此schema定义的元素属于命名空间"http://www.example.org/students",注意只是声明,而不能说明当前schema默认使用该命名空间。(example部分可自己写,students是根标签名)
<3>xmlns:tns="http://www.example.org/students" : 默认命名空间。
<4>elementFormDefault="qualified" : 指出任何XML实例文档所使用的且在此schema中声明过的元素必须被命名空间限定。(此行代码固定)
2,Schema约束的具体约束
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.yby.org/students"
xmlns:tns="http://www.yby.org/students"
elementFormDefault="qualified">
<element name="students">
<complexType>
<sequence>
<element name="student" minOccurs="1" maxOccurs="unbounded">
<complexType>
<sequence>
<element name="name" type="string" minOccurs="1" maxOccurs="1"/>
<element name="sex">
<simpleType>
<annotation>
<documentation>只能为男或者女</documentation>
</annotation>
<restriction base="string">
<enumeration value="男"/>
<enumeration value="女"/>
</restriction>
</simpleType>
</element>
<element name="age" minOccurs="1" maxOccurs="1">
<simpleType>
<annotation>
<documentation>年龄必须在15~50岁</documentation>
</annotation>
<restriction base="int">
<minInclusive value="15"/>
<maxInclusive value="50"/>
</restriction>
</simpleType>
</element>
<element name="subjects" minOccurs="1" maxOccurs="1">
<complexType>
<sequence>
<element name="subject" minOccurs="1" maxOccurs="3" type="string">
<annotation>
<documentation>主修科目最少为一门,最多为三门</documentation>
</annotation>
</element>
</sequence>
</complexType>
</element>
</sequence>
<!--注意属性约束的位置 -->
<attribute name="id" type="int" use="required"/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
<1>标签讲解
①<complexType>&<simpleType>:当一个元素(称为A)的子元素(称为B)存在子元素(称为C)时(好绕口,哈哈哈),必须使用<complexType>标签包裹元素B,如果不满足上述条件则必须使用<simpleType>包裹元素B。
②<sequence>&<all>&<choice>:<sequence>表示元素出现的顺序必须是schema约束中的顺序;<all>表示元素可以以任意顺序出现;<choice>表示简单元素只能出现一个。
③<annotation>&<documentation>:<annotation>包裹部分表示注解,<documentation>包裹部分为注解内容。
④<restriction>:此标签包裹用来写限制内容。
⑤<maxInclusive value="max"/>&<minInclusive value="min"/>:约束范围为min~max。
⑥<enumeration value="/>:约束值只能为枚举值中的一个。
⑦<attribute>:给指定的元素加入属性约束。
<2>数据类型&数量约束
①数据类型有很多种,如string,int,Integer等等,注意的是,在element标签中是写type,在restriction标签是写base。
②数量约束:minOccurs约束标签最少出现的次数,maxOccurs约束标签最多出现的次数,其中unbounded表示无穷次。
<3>属性:要给哪个元素添加属性约束就必须在属于该元素的部分的使用<attribute>标签来约束,其中use="required",表示属性是必须的,没有就会报错。
3,引入Schema约束
在xml文件的第二行写下面的代码:
<node xmlns="http://www.w3cschool.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3cschool.com.cn note.xsd ">
<!--node 写根元素名称-->
<!--xmlns="http://www.w3cschool.com.cn" 这一行写schema约束中的targetNamespace的地址 -->
<!--xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 这一行代码不变 -->
<!--xsi:schemaLocation="http://www.w3cschool.com.cn note.xsd " 这一行代码中地址写schema约
束文档的 xmlns:tns= 的地址,note.xsd 是Schema约束文档的文件名 -->
这一期写了四个小时,希望能给读者带来帮助,也希望兄弟们给小编点支持!!!下一期写如何解析XML文档!!!