XML:可扩展标记语言(EXtensible Markup Languague)
XML与HTML的区别:XML设计宗旨是为了传输数据,焦点在于数据的内容;HTML设计宗旨是为了显示数据,焦点在于数据的外观。
XML的几个用途:
①存储有关系的数据。
②用作软件配置文件。(最常用的)
③用作小型数据库。
XML基础
XML文档组成:
①文档声明
②元素 Element
③属性 Attribute
④注释 Comment <!-- 注释内容 -->
⑤CDATA <![CDATA[ ... ]]>
⑥处理指令PI
①文档声明:
由于XML是纯文本文件,首先要告诉它与其他文件诸如txt文件之间的区别,通知读取它的程序它为一个XML文件,因此需要文档声明。
文档声明中有(1)使用的XML版本,一般为version="1.0" (2)编码方式 encoding="UTF-8" (3)是否为独立XML文件(判断是否独立依据看是否有DTD文件约束)standalone="yes" 无DTD约束 (standalone="no"有约束时) 一般不写standalone属性。
例:<?xml version="1.0" encoding="UTF-8" ?> 其中<?xml ?>为固定格式,也是最简单的声明。
②元素(Element):
元素是开始标签、结束标签以及两者之间的所有内容,包括属性、注释、文本和子元素。
注意其与标签之间的区别:标签是一对尖括号和两者之间的内容,包括元素名和所有属性。
例如:<font color="red">是一个标签,</font>也是一个标签;而<font color="red">xml学习</font>是一个元素。
元素名放在开始标签中。
例:<font></font> font是元素名。
注:根元素的开始和结束标记用于包围 XML 文档的内容,所有的元素都是它的子元素。一个文件必须有且只能有一个根元素。
元素命名规范:①元素名中不能出现空格。②名称只能以英文字母开始,不能是数字或符号。(在第一个字母之后就可以使用字母、数字或规定的符号,或它们的混合)。③对大小写没有限制,但前后要保持一致,以免造成混乱。
③属性(Attribute):
一个元素中可以有0个或多个属性,属性放在元素开始标签内,紧跟元素名之后,多个属性名以空格隔开。
形式:<元素名
例:<书桌 长=“30” 宽=“20”>我的书桌</书桌>
注:元素属性可以使用子元素代替,用子元素可以方便扩展和改变值。一般属性是随着元素不变的值,绑定在一起的。比如<人 身份证号=“34128...”/>,人与身份证号绑定的。
而<人><身高>180</身高></人> 人这个元素使用子元素<身高>180</身高>子元素,该子元素的内容可变即可扩展。
④注释(Comment):
注释格式:<!--注释内容 -->
注:①XML声明之前不能有注释 ②注释不能嵌套
⑤CDATA区:
CDATA内数据不让解析器解析,当作原始数据进行处理(故里面可以有<>"")
格式: <![CDATA[内容]]>
特殊字符:(1)转义字符:
字符:& 替代符号:&
字符:< 替代符号:< (little than注意分号)
字符:>替代符号:> (great than)
字符:‘(单引号) 替代符号:&apos
字符:“(双引号) 替代符号:"
(2)自定义字符:
¥ 对应的符号为 ¥ (x表示16进制) 通过字符映射表来获取每个字符的编码
⑥处理指令(PI processing instruction)
处理指令用来指挥XML解析引擎如何解析XML文档内容。
例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。
格式:
<?xml-stylesheet type="text/css" href="path.css"?> type属性指的是使用什么类型的文件进行解析 href属性指明css文件的路径
</pre><pre name="code" class="html">属性是元素的属性,内容是元素的内容,子元素是元素的子元素。元素的内容还可以是子元素,所以删除元素要从其父元素删除其子元素,获得某一元素需要先获得父元素 。
XML部分基础可参看http://www.ibm.com/developerworks/cn/xml/x-newxml/ 进行学习,里面讲的还是挺好的。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
XML约束
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。
常用的约束技术:①DTD(Document Type Definition) 易学功能有限 ②Schema 难学功能强大
为何需要约束?
原因:①不同结构的XML需要用不同的解析方法进行解析,这就需要设计多种解析方法,不合理。②独立的XML太灵活,差不多是什么都可以写。但有些情况必须得有限制,如一本书不可能有两个售价,因此要约束书元素不能有两个售价元素,否则不合逻辑。③④...原因很多。
约束都会约束什么?
答:
1)约束模式定义了XML文档中允许出现的元素名(element)、元素中的属性(attribute)、元素中的内容类型(PCDATA,CDATA)、元素之间的嵌套关系和出现顺序以及子元素的个数(+ ? *)等。
2)如果没有为一个XML文档指定约束模式,那么该文档中可以包含任何类型的标记;如果为一个XML文档指定了约束模式,那么它必须满足约束模式所规定的结构、数据类型和数据关联等内容。
DTD学习:
①编写方式 ②DTD约束语法细节(元素定义、属性定义、实体定义)
①编写方式:
(1)作为单独的文件编写,XML进行引用
引用方式:
a.当引用的文件在本地时,采用如下方式:<!DOCTYPE 根元素名 SYSTEM "DTD文件的URL">
例如: <!DOCTYPE 书架 SYSTEM “book.dtd”>。
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL"
例如:<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD WebApplication 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
(2)XML内部编写。
在声明之后编写 <!DOCTYPE 根元素名 [ ]>
②DTD约束语法
元素定义(element):☆
在DTD文档中使用ELEMENT声明一个XML元素。XML中出现的所有元素都必须在DTD中有声明。
语法格式如下所示:
<!ELEMENT 元素名称 元素类型>
其中元素类型可以是元素内容或类型。元素内容指的是该元素会含有什么内容(内容要么是文本,要么是子元素),内容如果是文本内容,则用#PCDATA;内容如果是子元素,则写出子元素名字。类型指的是元素是空还是元素内容为任意内容。
1.如为元素内容:则需要使用()括起来,如
<!ELEMENT 书架 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
内容:文本或子元素、组合关系、元素出现次数。
描述内容的组合关系有三种方式:
①元素内容使用空白符间隔表示出现的顺序没有要求:<!ELEMENT 书架 (书 作者)> 书和作者元素没有顺序要求。
②元素内容使用逗号分隔表示出现的顺序有要求,要求和声明的顺序一致:<!ELEMENT 书架 (书,作者)> 书元素要在作者元素之前
③元素内容使用|分隔表示任选其一:<!ELEMENT 人 (真名|别名)> 真名元素和别名元素只能选写一个
描述内容中元素出现的次数四种方式:
① +: 一次或多次 (书+)
② ?: 0次或一次 (书?)
③ *: 0次或多次 (书*)
④不加+?*: (书) 有且只有一次
属性定义(attribute):
<!ATTLIST 元素名
属性名1 属性值类型 设置说明
属性名2 属性值类型 设置说明
……
>
ATTLIST:Attribute List 因为属性是元素的属性,所以在属性名之前要有元素名。实体定义:
实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
(1)引用实体
引用实体主要在 XML 文档中被应用
&实体名称; (注意分号;)
<!ENTITY copyright “I am a programmer">
……
<copy>©right; </copy> 等效于<copy> I am a programmer</copy>
(2)参数实体
参数实体被 DTD 文件自身使用
语法格式:
<!ENTITY % 实体名称"实体内容">(注意这里有%,%后面有空格,与实体名称不连着。而引用实体声明里没有&)
引用方式:
%实体名称;需要使用外部实体
举例1:
<!ENTITY%TAG_NAMES"姓名|EMAIL |电话|地址">
<!ELEMENT 个人信息 (%TAG_NAMES;|生日)> 等效为<!ELEMENT个人信息(姓名|EMAIL |电话| 地址|生日)>
<!ELEMENT 客户信息 (%TAG_NAMES;| 公司名)> 等效为<!ELEMENT 客户信息 (姓名|EMAIL |电话|地址| 公司名)>
由于两者共用了姓名 |EMAIL | 电话 | 地址,写两次太复杂,所以可以使用参数实体。