第一章
XML概述:
XML与HTML的比较:
1、 HTML中的标记用来显示数据,XML中的标记用来描述数据的性质和结构
2、 HTML不区分大小写,XML是严格区分
3、 HTML可以有多个根元素,XML有且只有一个
4、 HTML中属性值的引号可用可不用,XML中属性值必须放在引号中
5、 HTML中,空格自动过滤,XML中的空格不会自动删除
6、 HTML中,标记是预定义的,XML中的标记是可以随便定义的,可扩展
XML语法:
XML声明必须是文档第一行
文档声明语法格式:
<?xml版本信息 [编码信息] [文档独立性信息]?>
<?xmlversion=”1.0” encoding=”utf-8” standalone=”yes”?>【文档独立性声明是设置是否依赖外部文档,默认是standalone=”no”;’<?xml’和’?>’这几个之间是没有空格的】
book.xml
<?xmlversion="1.0" encoding="utf-8"?>
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>58.00元</售价>
</书>
<书>
<书名>EJB3.0入门经典</书名>
<作者>黎活明</作者>
<售价>39.00元</售价>
</书>
</书架>
元素定义:
<城市>北京</城市>
等同:
<城市北京/>【见怪不怪】
元素名称可以包含自字母、数字以及一些可见字符
区分大小写
其他:简而言之,不要取一些奇怪的元素名字组合
属性定义:
<售价 单位=”元”>68<售价/>【单位=’元’,单引号或者双引号都可以】
同:
<售价>
<价格>68</价格>
<单位>元</单位>
</售价>
注释:
<!—注释信息-->
1、不能抢占第一行,第一行是XML文档声明的
2、不能出现在标记里面【<城市<!—注释信息-->>北京</城市>,wrong】
3、字符串”--”不能在注释中出现
4、不能嵌套【白痴才会去嵌套】
特殊字符处理:
特殊字符 | 预定义实体 | 特殊字符 | 预定义实体 |
& | & | “ | " |
< | < | ‘ | &apos |
> | > |
|
|
CDATA区:
当转义字符比较多的时候,嫌麻烦就用这个,CDATA区中的数据被解析器忽略,全部以原始的形式显示在浏览器上
<![CDATA[--代码信息--]]>
<?xmlversion="1.0" encoding="utf-8"?>
<java>
<![CDATA[
if(a>b&&c<b)
max=a;
]]>
</java>
DTD约束:
对XML文档进行一些约束
book.xml
<?xmlversion="1.0" encoding="utf-8"?>
<书架>
<书>
<书名>Java就业培训教程</书名>
<售价>8.00元</售价>
<作者>张孝祥</作者>
<售价>58.00元</售价>
</书>
<书>
<书名>EJB3.0入门经典</书名>
<作者>黎活明</作者>
<售价>39.00元</售价>
</书>
</书架>
book.dtd
<!ELEMENT书架(书+)>
<!ELEMENT 书(书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)>
两种引入方式
外部引用:
<!DOCTYPE 根元素名称 SYSTEM “外部DTD文件的URI”>【本地】
<!DOCTYPE 根元素名称 PUBLIC “DTD名称” “外部DTD文件的URI”>【网络】
<?xmlversion="1.0" encoding="utf-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名>Java就业培训教程</书名>
<售价>8.00元</售价>
<作者>张孝祥</作者>
<售价>58.00元</售价>
</书>
<书>
<书名>EJB3.0入门经典</书名>
<作者>黎活明</作者>
<售价>39.00元</售价>
</书>
</书架>
【standalone不能设置为yes】
内部引用:
<?xmlversion="1.0" encoding="utf-8"standalone="yes"?>
<!DOCTYPE 根元素名 [
DTD定义语句
…
]>
<?xml version="1.0" encoding="utf-8"standalone="yes"?>
<!--<!DOCTYPE 书架 SYSTEM "book.dtd">-->
<!DOCTYPE 书架 [
<!--<!ELEMENT 书架(书+)>-->
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)>
]>
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>58.00元</售价>
</书>
<书>
<书名>EJB3.0入门经典</书名>
<作者>黎活明</作者>
<售价>39.00元</售价>
</书>
</书架>
DTD语法:
元素定义:
<!ELEMENT元素名称 元素内容>
元素内容有五种形式:
1、#PCDATA:普通文本字符串【<!ELEMENT书名 (#PCDATA)>】
2、子元素:元素包含的元素【<!ELEMENT书(书名,作者,售价)>】
3、混合内容:表示元素既可以包含字符数据,也可以包含子元素,混合内容必须被定义零个或多个【<!ELEMENT 书(#PCDATA|书名)>,表示书中嵌套的子元素书名包含零个或多个,并且书名是字符串文本格式】
4、EMPTY:空元素【<!ELEMENTbr EMPTY>,br是没有内容的空元素】
5、ANY:包含任何字符数据和子元素【<!ELEMENT 联系人 ANY>】
元素内容中包含一些符号:
?:表示该对象可以出现0次或者1次
*:表示该对象可以出现0次或者多次
+:表示该对象可以出现1次或者多次
|:表示在列出的对象中选择1个
,:表示对象必须按照指定的顺序出现
():用于给元素进行分组
属性定义:
语法格式:
<!ATTLIST元素名
属性名1 属性类型 设置说明
属性名2 属性类型 设置说明
>
设置说明:
#REQUIRED:表示元素的该属性是必须的【联系人的联系电话属性】
#IMPLIED:表示该属性对元素可有可无
#FIXED:固定的属性默认值
默认值:同上
属性类型:
1、 CDATA:字符数据,同元素内容说明中的#PCDATA
2、 Enumerated:枚举,列表中选一个
<?xmlversion="1.0" encoding="utf-8"standalone="yes"?>
<!DOCTYPE购物篮 [
<!ELEMENT 购物篮 ANY>
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品种 (鸡肉|牛肉|猪肉|鱼肉) "鸡肉">
]>
<购物篮>
<肉 品种="鱼肉"/>
<肉 品种="牛肉"/>
<肉/>
</购物篮>
3、 ID:用于唯一标识XML文档中的一个元素,且ID类型的属性必须设置为#IMPLIED或#REQUIRED【都ID了,肯定具有唯一性】
4、 IDREF和IDREFS:建立关系
<?xmlversion="1.0" encoding="utf-8"?>
<!DOCTYPE联系人列表 [
<!ELEMENT联系人列表 ANY>
<!ELEMENT联系人 (姓名,EMAIL)>
<!ELEMENT姓名 (#PCDATA)>
<!ELEMENTEMAIL (#PCDATA)>
<!ATTLIST联系人 编号 ID#REQUIRED 上司 IDREF #IMPLIED>
]>
<联系人列表>
<联系人 编号="id1">
<姓名>张三</姓名>
<EMAIL>zhangsan@qq.com</EMAIL>
</联系人>
<联系人 编号="id2" 上司="id1">
<姓名>李四</姓名>
<EMAIL>lisi@qq.com</EMAIL>
</联系人>
</联系人列表>
5、 NMTOKEN和NOTAKENS:表示由一个或者多个字母、数字、句点(。)、连字号(-)或下划线(_)所组成的一个名称【不太懂】
6、 NOTATION:处理图像、声音、影像等
第一种:<!NOTATION 符号名 SYSTEM “MIME类型”>
第二种:<!NOTATION 符号名 SYSTEM “URI路径名”>
<?xmlversion="1.0" encoding="utf-8"standalone="yes"?>
<!DOCTYPE文件 [
<!NOTATIONmp SYSTEM "movPlayer.exe">
<!NOTATIONgif SYSTEM "Image/gif">
<!ELEMENT 文件 ANY>
<!ELEMENT 电影 EMPTY>
<!ATTLIST 电影 演示设备 NOTATION(mp|gif) #REQUIRED>
]>
<文件>
<电影 演示设备="mp"/>
</文件>
7、 ENTITY和ENTITYS:实体引用
1、引用实体:
<?xmlversion="1.0" encoding="utf-8"standalone="yes"?>
<!DOCTYPE书架 [
<!ENTITY itcast "你好哇!!!">
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)>
]>
<书架>
<书>
<书名>Java就业培训教程</书名>
<作者>&itcast;</作者>
<售价>58.00元</售价>
</书>
<书>
<书名>EJB3.0入门经典</书名>
<作者>黎活明</作者>
<售价>39.00元</售价>
</书>
</书架>
2、参数实体:
<!ENTITY%实体名称 “实体内容”>
<!ELEMENT%TAG_NAME “姓名|EMAIL|电话|地址”>
<!ELEMENT个人信息 (% TAG_NAME;|生日)>
<!ELEMENT客户信息 (%TAG_NAME;|公司名)>
【相同的部分定义为一个参数实体】
<!ENTITY % common.attributes‘id ID #IMPLIED account CDATA #REQUIRED’>【属性的相同定义】
Schema约束:
要有命名空间:
Schema语法:
元素定义:
<xs:elementname=”xxx” type=”yyy”/>
xs:string | xs:decimal | xs:integer | xs:boolean | xs:date | xs:time |
字符串类型 | 小数类型 | 整数类型 | 布尔类型 | 日期类型 | 时间类型 |
XML代码:
<lasename>Smith</lastname> <age>28</age> <dateborn>1980-03-27</dateborn> |
Schema代码:
<xs:element name=”lastname” type=”xs:string”> <xs:element name=”age” type=”xs:integer”> <xs:element name=”databorn” type=”xs:date”> |
属性的定义:
<xs:attribute name=”xxx” type=”yyy”> |
example:
<lastname lang=”EN”>Smith</lastname> <xs:attribute name=”lang” type=”xs:string”> |
简单类型:
只包含字符数据的元素都是简单类型,使用xs:simpleType元素来定义
添加限制,需要用到xs:restriction元素
1、 xs:minInclusive和xs:maxInclusive元素对值得限定
<xs:element name=”age”> <xs:simpleType> <xs:restriction baxe=”xs:string”> <xs:minInclusive value=”18”/> <xs:maxInclusive value=”58”/> </xs:restriction> </xs:simpleType> </xs:element> |
2、xs:enumberation元素对一组值得限定
<xs:element name=”car”> <xs:simpleType> <xs:restriction baxe=”xs:string”> <xs:enumberation value=”Audi”/> <xs:enumberation value=”Golf”/> <xs:enumberation value=”BMW”/> </xs:restriction> </xs:simpleType> </xs:element> |
3、xs:pattern元素对一系列值得限定
<xs:element name=”letter”> <xs:simpleType> <xs:restriction baxe=”xs:string”> <xs:pattern value=”[a-z]”/> </xs:restriction> </xs:simpleType> </xs:element> |
4、xs:whiteSpace元素对空白字符的限定
<xs:element name=”car”> <xs:simpleType> <xs:restriction baxe=”xs:string”> <xs:whiteSpace value=”preserve”/> </xs:restriction> </xs:simpleType> </xs:element> preserve:不处理 replace:移除 collapse:所以缩减为一个单一字符 |
复杂类型:
使用xs:complexContent元素来定义
复杂类型的元素可以包含子元素和属性,称为复合元素;如果复合元素十五开始标记和结束标记之间只包含字符数据内容,使用xs:simpleContent,否则,使用xs:complexContent
1、 空元素:
不包含内容,只包含属性
<product prodid=”1234”/> |
Schema:
<xs:element name=”product”> <xs:complexType> <xs:attribute name=”prodid” type=”xs:positiveInteger”> </xs:complexType> </xs:element> |
2、 包含其他元素的元素:
<person> <firstname>John</firstname> <lastname>Smith</lastname> </person> |
Schema:
<xs:element name=”product”> <xs:complexType> <xs:sequence> <xs:element name=”firstname” type=”xs:string”> <xs:element name=”lastname” type=”xs:string”> </xs:squence> </xs:complexType> </xs:element> |
3、 仅包含文本的元素:
需要使用extension或restriction元素来扩展或限制元素的基本简易类型
<shoesize country=”france”>35</shoesize> |
Schema:
<xs:element name=”product”> <xs:complexType> <xs:simpleContent> <xs:extension> <xs:attribute name=”country” type=”xs:string”> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> |
4、 包含元素和文本的元素
<letter> Dear Mr.<name>John Smith</name> Your order<order>1032</order> will be shipped on<shipdate>2001-07-13</shipdate> </letter> |
Schema:
<xs:element name=”letter”> <xs:complexType mixed=”true”> <xs:sequence> <xs:element name=”name” type=”xs:string”/> <xs:element name=”orderid” type=”xs:positiveInteger”/> <xs:element name=”shipdate” type=”xs:date”/> </xs:sequence> </xs:complexType> </xs:element> |