第一部分:XML即可扩展标记语言,是由w3c组织发布的,XML出现的根本目标在于描述生活中经常出现的有关系的数据。在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据,一个标签分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其他标签描述其他数据,以此来实现数据关系的描述。起初,XML的发布是为了取代HTML,可那么多年过去,XML依然未能成功,于是现在XML常用作配制文件。
xml分为文档声明,元素,属性,注释,CDATA区、特殊字符和处理指令。最简单文档声明,<?xml vorsion="1.0" ?>(不能出现全角空格) ,用encoding属性说明文档的字符编码,<?xml vorsion="1.0" enconding="GB2312" ?>( <?xml vorsion="1.0" enconding="UTF-8" ?>此时记事本存储时也用UTF-8,不会出现错误),用standalone属性说明文档是否独立, <?xml vorsion="1.0" enconding="GB2312" standalone="yes" ?>。
1)元素,标签。含标签体,<a>...</a>,不含标签体,<a>...</a>,简写为<a/>。格式良好文档必须有且仅有一个根标签。xml标签中出现的空格或换行,xml解析程序都当作
标签内容处理。命名可以包含字母、数字以及其他一些可见字符,但必须遵守:区分大小写、不能以数字或下划线开头、不能以xml(XML或Xml等)开头、不能含有空格、
不能含有冒号。每个标签都可以有多个属性,每个属性都有它的名称和取值。
2)CDATA区,有些内容不想被解析引擎解析,而当作原始内容处理,放置在CDATA区。<![CDATA[内容]]>。
3)转义字符。& &,< <,> >," ",' &apos。
4)用来指挥解析引擎如何解析xml文件。stylesheet。例如,应用css文件解析xml文档。
example1.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="1.css" ?>
<body>
<a>
<a1 id="a1">中国</a1>
<a2 id="a2">俄国</a2>
</a>
<b>
<b1 id="b1">美国</b1>
<b2 id="b2">日本</b2>
</b>
</body>
example1.css
@CHARSET "UTF-8";
a1{
font-size:300px;
color:red;
}
a2{
font-size:200px;
color:bule;
}
b1{
font-size:100px;
color:green;
}
b2{
font-size:50px;
color:black;
}
第二部分:XML约束。在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,称之为XML约束。通常使用的约束技术是XML DTD或者XML Schema。
XML DTD。
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "3.dtd">
<书架>
<书>
<书名>java编程基础</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
</书架>
<!DOCTYPE 书架 SYSTEM "3.dtd">意思是声明此XML遵循的DTD文档。还有另一种写法,可以把约束写在XML文档顶部。如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 [<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>]>
<书架>
<书>
<书名>java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
<书>
<书名>java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
</书架>
元素类型可以是元素内容或类型。
1)若为元素类型,则需要用()括起来。<!ELEMENT 书(书名,作者,售价)>
2)若为元素类型,则直接书写,DTD规范定义了如下几种类型。
EMPTY,用于定义空元素,例如<br/><hr/>。
ANY,表示元素内容为任意类型。
元素内容可以使用以下方式,描述内容组成关系
1)用逗号分隔,表示内容出现顺序必须与声明时一致。
2)用|分隔,表示任选其一,即多个只能出现一个。
元素内容也可以使用+,?,*等符号表示出现次数。
1)+:一次或多次出现。
2)?:至多一次出现。
3)*:零次或多次出现。
可以使用圆括号批量设置。
属性设置说明:
1)#REQUIRED:必须设置该属性。
2)#IMPLIED:可以设置也可以不设置。
3)#FIXED:该属性取值为一个固定值。
4)直接使用默认值。
属性值类型:
1)CDATA:普通文本字符串。
2)ENUMERATED:枚举。
3)ID:id。
4)ENTITY:实体。
schema定义和描述xml文档的看结构和内容的模式语言。
1)schema符合xml语法结构。 后缀名.xsd,其根节点名称是Schema。
2)schema支持比dtd更多的数据类型,并支持自定义数据类型。
3)schema无实体,比dtd等复杂。
4)可引入多个schema。
编写一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URL地址上,在XML Schema技术中有一个专业术语描述此过程,即把XML Schema文档声明的元素绑定到一个名称空间上,以后XML文件就可以通过这个URL(名称空间)来告诉解析引擎,XML文档别写的元素来自哪里,被谁约束。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.javanet.cn" elementFormDefault="qualified">
<xs:element name='书架'>
<xs:complexType>
<xs:sequence maxOccurs='unbounded'>
<xs:element name='书'>
<!-- complexType放的元素为复杂类型 -->
<xs:complexType>
<!-- 顺序出现 -->
<xs:sequence>
<xs:element name='书名' type='xs:string'/>
<xs:element name='作者' type='xs:string'/>
<xs:element name='售价' type='xs:string'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
其中,targetNamespace绑定名称空间,elementFormDefault="qualified"将所有元素绑定,若取值为unqualified只绑定根节点,使用javanet指向声明的名称,便于后面对名称空间的引用 ,complexType放的元素为复杂类型 ,sequence顺序出现。
<?xml version="1.0" encoding="UTF-8"?>
<javanet:书架 xmlns:javanet="http://www.javanet.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.javanet.cn 1.xsd">
<javanet:书>
<javanet:书名>xxx</javanet:书名>
<javanet:作者>xxx</javanet:作者>
<javanet:售价>xxx</javanet:售价>
</javanet:书>
</javanet:书架>
声明书架来自 "http://www.javanet.cn"这个名称空间,受此名称空间绑定的Schema约束,而名称空间是虚的,必须通过要通过schemaLocation告诉来自哪个Schema文档.而schemaLocation的名称空间"http://www.w3.org/2001/XMLSchema-instance"这是个著名的名称空间,默认知道这个名称空间对应的Schema文档。
Schema声明语法:
(1)定义简易元素:<xs: element name="xxx" type="yyy">,此处xxx指元素名称,yyy指元素类型。
简易元素的默认值和固定值。
<xs:element name="color" typr="string" default="red">,缺省值为red。
<xs:element name="color" typr="string" fixed="red">,固定值为red。
(2)属性:拥有属性的元素称为复合类型。<xs:attribute name="xxx" type="yyy">,同样拥有默认值和固定值。此外,默认属性是可选的,如需规定必选,则使用use。<xs:attribute name="xxx" type="yyy" use="required">
(3)限定:
a.对值得限定。
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0">
<xs:maxInclusivevalue="120">
<xs:restriction>
</xs:simpleType>
</xs:element>
b.对一组值的限定。
<xs:elsement name="car">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:enumeration value="Audi">
<xs:enumeration value="BMV">
<xs:enumeration value="Golf">
</xs:restriction>
</xs:simpleType>
</xs:element>
c...
(3)复杂元素。<employee>
<firstname>xx</firstname>
<lastname>xx</lastname>
</employee>
在Schema有两种方式声明复杂元素。
a。通过命名此元素,可直接对“employee”元素进行声明。
。<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string">
<xs:element name="lastname" type="xs:string">
</xs:sequence>
<xs:complexType>
</element>
b.“employee”元素可以直接使用type属性。
<xs:element name="employee" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string">
<xs:element name="lastname" type="xs:string">
</xs:sequence>
<xs:complexType>