2.1XML基础
在实际开发中,不通语言项目之间数据的传输的格式 有可能不兼容,为解决此问题w3c推出一种新的数据交换标准——XML,它是一种通用的数据交换格式,轻松使数据在各种程序之间交换。
2.1.2 XML概述
1.什么是XML
现实中各种事物之间存在一定关联关系,例如中国有很多省份,每个省份又有很多城市,这种关系可以构成树状图来描述,而对于程序来说解析图片有点困难,所以可以用XML来描述这种树状层次结构。
XML是extensible marking language的缩写,类似于HTML的标记语言,成为可扩展标记语言,所谓可扩展就是——用户可以按XML标准自定义标记。
<?xml version="1.0" encoding="UFT-8"?>
<中国>
<山西>
<城市>太原</城市>
<城市>大同</城市>
</山西>
<河北>
<城市>石家庄</城市>
<城市>张家口</城市>
</河北>
</中国>
2.XML与HTML的比较
都是标记语言,在结构上大体上相同,但有本质区别。
(1)HTML用来格式化显示数据,XML用来传输和存储数据。
(2)HTML不区分大小写,XML严格区分大小写。
(3)HTML可以有多个根元素,良好格式的XML只能有一个根元素。
(4)HTML中空格自动过滤,XML中空格不会自动删除。
(5)HTML中的标记都是预定义的,XML中标记可以自定义并可扩展。
总之XML不是HTML的升级,也不是替代品。XHTML——XML应用被重新定义的HTML。
2.1.2XML的语法
1.文档声明
XML文档中必须有一个声明,且在第一行。
<?xml version="xml版本" encoding="编码方式" standalone="是否为独立文档yes/no"?>
2.元素自定义
主题都是有元素构成,元素由开始标记、属性、元素内容、结束标记构成。
若一个元素没有被其他元素套嵌则为根元素,若一个元素没有 套嵌任何元素则为空元素,这时不需要使用结束标签,在开始标签后加/。
3.属性定义
XML文档中可以为元素自定义属性,属性是对元素的进一步描述和说明。
<售价 单位="元">68</售价>
4.注释信息
<!-- 注释内容 -->
2.1.3 DTD约束
1.什么是约束
在书写XML文档时,内容必须满足一些条件的限制,如 <书>标签中不能出现两个<价格>标签,这样就很难区分哪个是普通价格和会员价格。在对XML文档进行约束时,同样需要遵守一系列的语法规则,这种语法就形成的XML约束语言。最常见的两种约束语言DTD约束和Schema约束。
2.DTD约束
book.dtd文件:
<!ELEMENT 书架 (书+)> <!--表示书在书架元素中出现1次或多次-->
<!ELEMENT 书 (书名,作者,售价) > <!--表示书元素有三个子元素,且要按照顺序出现-->
<!ELEMENT 书名 (#PCDATA)> <!--表示书名元素套嵌的内容是普通的文本字符-->
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
3.DTD的引入方式
(1)引用本地的的dtd文件 可以为一个绝对值地址和相对地址 此时standalone属性不能设为yes
<!DOCTYPE 根元素名称 SYSTEM ".dtd文件的url">
(2)引用公共的dtd文件 地址为Internet上的一个绝对url地址
<!DOCTYPE 根元素名称 PUBLIC "DTD名称" ".dtd文件的url">
(3)内嵌方式 standalone可以为yes
<!DOCTYPE 根元素名称[
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价) >
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
多个XML文档可共享一个DTD文件
4.DTD语法
(1)元素定义<!ELEMENT>用于定义一个元素。
<!ELEMENT 元素名称 元素内容>
元素内容有5中内容:
- <!ELEMENT 书名 (#PCDATA)> 表示书名为普通的文本字符串
- <!ELEMENT 书(作者,单价,书名)> 表示套嵌的子元素
- <!ELEMENT 书(#PCDATA|书名)*> 表示前两种的混合
- <!ELEMENT br EMPTY> 表示br为没有内容的空元素
- <!ELEMENT ANY> 表示可以包含任何元素,避免使用
符号:?1次或0次 *0次或多次 +1次或多次 | 列出的对象选一个 ,必须按顺序出现 ()给元素分组
(2)属性定义
<!ATTLIST 元素名
属性名1 属性类型 属性说明
属性名2 属性类型 属性说明
>
1)属性说明中有四种设置:
- #REQUIREN 表示元素的该属性是必须的
- #IMPLIED 表示元素可以包含该属性
- #FIXED 表示一个属性的默认值,不能将元素设为其他值 需要提供一个默认值当不包含该属性时自动设置为dtd中的默认值
- 默认值 如果不包含该属性自动设为默认值 与#FIXED不同的是该默认值可以被改变
2)属性类型:
有10中属性类型,常见的有
- CDATA 表示属性类型为字符类型,与元素内容中的#PCDATA是一样的,属性值设置中的特殊字符也需要使用转义字符来表示,&表示&,&it表示<。
- Enumerated 枚举类型
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 购物篮[
<!ELEMENT 购物篮 ANY>
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品种(鸡肉|牛肉|猪肉) "鸡肉">
]>
<购物篮>
<肉 品种="鸡肉"/>
<肉 品种="猪肉"/>
</购物篮>
品种为Enumerated类型,其值只能为列出来的值,默认值为鸡肉
- ID一个id类型的属性用来唯一标示xml文档中的一个元素,id必须设置为#IMPLIED或#REQUIRED,因为对id设置默认值无意义。
<?xml versiong"1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE 联系人列表[
<!ELEMENT 联系人列表ANY>
<!ELEMENT 联系人 (姓名, EMAIL)>
<!ELEMENT 姓名 (#PCDATA) >
<!ELEMENT EMAIL (#PCDATA) >
<!ATtlist 联系人 编号 ID #REQUIRED>
]>
<联系人列者>
<联系人 编号="id1">
<姓名>张三</姓名>
<EMAIL>zhang@itcast. cn</ EMAIL>
</联系人>
<联系人 编号="id2">
<姓名>李四<7姓名>
<EMAIL>li@itcast.cn</ EMAIL>
</联系人>
</联系人列表>
- IDREF 表示不同id之间的联系 在两个元素之间建立一对一的关系
<?xml version="1.0" encoding= "UTF-8” standalone="yes"?>
<!DOCTYPE联系人列表[
<!ELEMENT 联系人列表 ANY>
<!ELEMENT 联系人(姓名, EMAIL)>
<!ELEMENT 姓名(#PCDATA)>
<!ELEMENT EMAIL (#PCDATA) >
<!ATTLIST联系人
编号 ID #REQUIRED
上司 IDREF #IMPLIED>
]>
<联系人列表>
<联系人 编号="id1">
<姓名>张三</姓名>
<EMAIL> zhang@itcast .org</EMAIL>
</联系人>
<联系八 编号= "id2"上司="id1">
<姓名>李四</姓名>
<EMAIL>li@itcast .org</EMAIL>
</联系人>
</联系人列表>
- IDREFS 建立一对多的关系
<!ATTLIST person borrowed REFS # REQUIRED>
<books>
<book bookid="b0101">
<title>Java就业培训教材</title>
</book>
<book bookid="b0102">
<title>Java Web 开发内幕</title>
</book>
<book bookid="b0103">
<title>Java开发宝典</title>
</book>
</books>
<records>
<item>
<data>2013-03-13</data>
<person name="张三”borrowed="b0101 b0103" />
</item>
<item>
<data>2013-05-23</data>
<person name="李四”borrowed="b0101 b0102 b0103" />
</item>
</records>
2.1.4Schema约束
1. Schema约束
是DTD约束的升级,他的出现克服了dtd的局限性。
- Schema本身采用XML语法格式,本身也是一种XML文档,更好理解。DTD采用非XML语法格式。
- Schema采用与XML文档相同的合法性检验机制,与DTD的解释器不同。
- Schema对命名空间的支持非常好,DTD就不支持。
- Schema比DTD支持的数据类型更多,包括自定义数据类型。
- Schema约束能力更强大、细致。
2.命名空间
可以近似的看作对象调用该类的属性。
使用命名空间前应先声明。声明命名空间就是在XML实例文档中为某个模式文档的命名空间指定一个临时的简写名称。以xmlns或xmlns:作为前缀。
3.引入Schema文档
(1)使用命名空间引入XML Schema文档
<?xml version="1.0" encoding="UTF-8"?>
<书架 xmlns="http://www.it315.org/xmlbook/schema" <!--规定默认空间-->
xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" <!---->
xsi:schemaLocation="http://www. it315.org/xmlbook/schema <!--命名空间-->
http://www. it315.org/xmlbook.xsd" > <!--Schema文件的url-->
<书>
<书名>JavaScript网页开发</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>
xsi:schemaLocation属性在标准命名空间"http://www. w3.org/2001/XMLSchema-instance"中定义的,
(2)不使用命名空间来引入XML Schema文档
还可以通过xsi:noNamespaceSchemalocation属性引属性直接指定,noNamespaceSchemalocation属性也是在标准名称空间"http://www. w3.org/2001/XMLSchema-instance"的,它用于定义指定文档的位置。
<?xml version="1.0" encoding="UTF-8"?>
<书架 xmlns:xsi="http:/ /www. w3. org/2001/XMLSchema- instance"
xsi :noNamespaceSchemaLocation=" xmlbook.xsd">
<书>
<书名>JavaScript网页开发</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>
4.Schema语法
(1)元素定义
声明一个元素
<xs:element name="xxx" type="xxx">
type指元素类型:
- xs:string 字符串
- xs:decimal 小数
- xs:integer 整数
- xs:boolean 布尔类型
- xs:date 日期类型
- xs:time 时间类型
<lastname> Smith</lastname>
<age>28</age>
<dateborn>1980-03-27</dateborn>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs: integer"/>
<xs:element name="dateborn" type="xs :date"/>
(2)属性的定义
<xs:attribute name="xxx" type="xxx">
<lastname lang="En"> Smith</lastname>
<xs: attribute name="lang" type="xs:string">
(3)简单类型
1 ) xs:minInclusive和xs:maxInclusive元素对值的限定
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs :integer">
<xs:minInclusive value="18" />
<xs:maxInclusive value="58" />
</xs:restriction>
</xs:simpleType>
</xs:element>
2) xs.enumeration元素对组值的限定(枚举列出取值范围)
<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
3) XS:pattern元素对一系列值的限定
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
4) xstestriction元素对空白字符的限定
在XML文档中,空白字符比较特殊,如果需要对空白字符(Witepaice Caraces)进行处理,可以使用WhiteSpace元素。whiteSpace 元素有3个属性值可以设定,分别是preserve、replace和collapse。其中,preserve 表示不对元素中的任何空白字符进行处理,replace 表示移除所有的空白字符, collapse表示将所有的空白字符缩减为一个单一字符。
<xs:element name="address">
<xs:simpleType>
<xs:restriction base= "xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xssimpleType>
</xs:element>
(4)复杂类型
<xs:complexType></xs:complexType>
1)空元素<xs:complexType></xs:complexType>
2)包含其他元素的元素<xs:complexType><sequence></sequence></xs:complexType>
3)仅包含文本的元素
4)包含元素和文本的元素<xs:complexType mixed="ture"><sequence></sequence></xs:complexType>