XML 总结

一、概述

  • XML是一种通用的数据交换格式
  • 许多系统配置文件(记录应用程序的配置信息)
  • JSP文档逐步向XML语法格式过渡
  • 与HTML
  • ** 与数据库**
  • XML文档的组成单元
    XML声明(declaration)
    DOCTYPE声明语句
    处理指令(processing instruction)
    元素(element)
    注释(comment)
    CDATA区

二、基本语法

2.1 文档声明

必须的,第一行

前后'?xml'与'<'间不能有空格,目前只有版本1.0,但必须写
<?xml version="1.0" ?>   

encoding属性说明文档的字符编码,如果没有则默认UTF-8(UTF-16),GB2312是国标的,实际保存和此处要统一,不然会报错
<?xml version="1.0" encoding="GB2312" ?>

standalone属性说明文档是否独立
<?xml version="1.0" encoding="GB2312" standalone="yes" ?>

2.2 元素定义

使用'<>'和'</>'定义,一个元素可以嵌套多个元素,第一个元素为根元素,只能有一个,
空元素如<img />,标签之间不允许交叉

规范,区分大小写,不能以数字下划线开头,不能含有xml组合字符,不能包含‘:’
建议,不要用点、下划线,尽量简短,大小写统一,使用中文需谨慎

2.3 属性定义

属性值必须用双引号或单引号,可以改写成子元素描述,遵循元素相同的命名规范

2.4 注释

和HTML完全一样
xml声明之前不能有注释
注释符号不能相互包含
注释同样要注意编码

2.5 空格和换行处理

标签以外的所有空格和换行,都要交给下游程序处理

2.6 CDATA区

“<![CDATA[” 开始,“ ]]>”结束

<script type="text/javascript">
<![CDATA[       for(var x=0;x<3;x++)
                         {
                                  alert(x);
                         }
]]>
</script>

2.7 特殊字符

特殊字符 替代符号
& &
< <
> >
" "
' '

2.8 处理指令

简称PI,用来为处理XML文档的应用程序提供指示信息
处理指令以“<?”开头,以"?>"结尾,XMl声明语句就是常见的处理指令
XML分析器会把处理指令原封不动的传给应用程序,由应用程序来解释这个指令

例如:book.xml

<?xml version="1.0" encoding="GB2312" ?>
<?xml-stylesheet type="text/css" href="book.css" ?>
             <bookstore>
                  <book>
                         <bookname>Java教程</bookname>
                         <author>李华</author>
                         <price>99元</price>
                  </book>
            </bookstore>

book.css

    bookname{display:block; color:red}
    author{display:block; font-style:italic}
    price{display:block; color:olive}

三、XML约束模式

3.1 格式良好的XML

解析器Parser

3.2 XML的约束模式

虽然解析不会出错,但不符合真实的逻辑,所以要有约束模式
定义文档中允许出现的元素名、属性、内容以及嵌套关系和出现顺序

定义Xml文档的词汇表,尊徐的结构
xml文档看做数据库中的表,则约束模式相当于表结构的定义

3.3 XML的约束语言

定义另一种语言的语言为元语言,单独的文件,模式文档,xml文档实例文档
约束模式语言,XML DTD、XML Schema、XDR、SOX等,前两种最广泛

3.4 有效的XML

遵守XML基本的语法规则,而且符合指定的约束模式,称为Valid XML
解析器程序检查是否符合约束模式称为校验,因此非校验类解析器和校验类解析器,IE是非校验类解析器

3.5 DTD

Document Type Definition,早期的约束模式语言

  • DTD初步认识

包含元素,元素之间关系,属性、实体以及符号的定义
book.dtd,可以使用正则表达式,使用UTF-8,unicod编码

 <!ELEMENT 书架 (书+)>                  
   <!ELEMENT 书 (书名,作者,售价)>
   <!ELEMENT 书名 (#PCDATA)>
   <!ELEMENT 作者 (#PCDATA)>
   <!ELEMENT 售价 (#PCDATA)>
PCDATA代表普通的字符串,(书名,作者,售价)按这个顺序, (书+)出现多次
  • 在xml文档中引入外部的DTD
    DOCTYPE文档类型定义语句,紧跟xml文档声明语句后面,两种格式
自定义:SYSTEM组织内部,或自定义
<!DOCTYPE 文档类型名称 SYSTEM "DTD文件的的URL">
公共的:PUBLIC权威机构公开的文件
<!DOCTYPE 文档类型名称 PUBLIC “DTD名称” "DTD文件的的URL">

例如:
<!DOCTYPE 书架 SYSTEM "book.dtd">
<!DOCTYPE web-app PUBLIC “-//Sun Miorosystems, Inc.//DTD Web Application 2.3//EN” "http://java.sun.com/dtd/web-app_2.3.dtd">
“-”表示未被改进的非ISO标准的DTD,“+”表示被改进的非ISO标准的DTD

例如book.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
.....
</书架>
standalone即使为no,只要DOCTYPE声明,也会去校验
  • xml文档中直接嵌入DTD
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 根元素名 [
     DTD定义语句
    ...
]>

四、相关定义

4.1 元素定义

  • 语法格式:
    <!ELEMENT 元素名称 使用规则>
  • 举例:
    <!ELEMENT 书架 (书名,作者,售价)>
    <!ELEMENT 书名 (#PCDATA)>
  • 使用规则:
    (#PCDATA) 是parsed character data简写,表示可以是普通字符串
    (书名,作者,售价)
    (书名,#PCDATA)
    EMPTY 内容为空,如<HR />
    ANY 元素内容任何形式

PS:
a、DTD注释和XML文档一样
b、每条元素定义语句顺序随意
c、具有不同用途的元素不能使用相同的元素名
d、一个元素的各个组成成分之间可以有各种关系
<!ELEMENT MYFILE (TITLE AUTHOR EMAIL)> 三个子元素顺序任意
<!ELEMENT MYFILE (TITLE, AUTHOR ,EMAIL)> 三个有序的子元素
<!ELEMENT MYFILE (TITLE |AUTHOR| EMAIL)> 三个中的任意一个
e、在元素的使用规则中可以定义子元素出现的次数
(书+)一次或者多次,(书?)一次或者不出现,(书)不出现或者一次多次,(书)只能一次
f、一对圆括号可用于将括在其中的内容组合成一个可统一操作的分组,分组中可以嵌套更小的分组
<!ELEMENT MYFILE ((TITLE
, AUTHOR?,EMAIL)*|COMMENT)>

4.2 属性定义

  • 语法格式
    <!ATTLIST 元素名
    属性名1 属性类型 设置说明
    属性名2 属性类型 设置说明
    ...
  • 举例
    <!ATTLIST 商品
    类别 CDATA #REQUIRED
    颜色 CDATA #IMPLIED
  • 设置说明
    REQUIRED 必须设置
    IMPLIED 可有可无
    FIXED 设为固定值,如:CDATA #FIXED “页面作者”
    直接使用默认值 如:CDATA “上网”
  • 属性类型
    CDATA 普通文本字符串,特殊字符用转义字符串
    ENUMERATED 枚举类型
    ID用于标示唯一的,相当于KEY
    IDREFIDERFSNMTOKENNMTOKENSNOTATIONENTITYENTITYS

4.3 实体定义

  • 作用 为一段文本内容创建一个别名,,在XML中多次引用这个别名,解析器会自动把别名转为对应的文本
  • 定义 DTD中用<!ENTITY...>定义,两种类型:引用实体和参数实体

引用实体:DTD中定义,xml中引用
<!ENTITY 实体名称 “实体内容”>
<!ENTITY 实体名称 SYSTEM "外部XML文档的URL">
引用方式:&实体名称;

参数实体:DTD中定义,DTD中引用
<!ENTITY % 实体名称 “实体内容”>
引用方式:&实体名称;

五、XML Schema

5.1 XML Schema与DTD的比较

和DTD一样,定义xml文档结构,比DTD更有发展前途。

  1. 自身符合xml语法结构
  2. DOM 、SAX等XML API更容易解析
  3. 采用和xml文档同样的合法性验证机制
  4. 对名称空间更好的支持
    5.比DTD支持更多的数据类型,并支持用户自定义数据类型
  5. 定义约束的能力更强大
  6. 基本上满足了关系模式在数据描述上的需要
    缺点:不能像DTD定义实体,很多细节比DTD更复杂

5.2 通过一个例子初步认识XML Schema

5.3 名称空间的概念

5.4 名称空间的声明

5.5 默认名称空间

5.6 属性的名称空间问题

5.7 引入XML Schema文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 1,965评论 1 7
  • 经过两天的奋战,终于把xml简略的过了一遍。 1.1XML介绍 xml是Extensible Markup lan...
    Ystrator阅读 853评论 0 2
  • 什么是约束? 在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这就是XML约束。约束定义了文档的结...
    tobe_superman阅读 840评论 0 3
  • 我的钢琴调音师是个台湾人,名叫王文星,看这个名字,大概是没有文化的父母,希望孩子读点书,摆脱贫穷。他今年五十六岁了...
    一条小鱼两条小鱼阅读 1,052评论 4 4
  • 幼儿园开学第一天,一对父子在幼儿园门口极有吸引力。父亲拍拍儿子的头声音细腻的说:“好好听课,别让你爸爸担心。”“知...
    邯夙阅读 264评论 2 5