XML介绍

XML是通过数据文档、DTD、样式单三个分离的部分来描述数据的。

一、结构

1.逻辑结构

        1)XML声明

        XML声明是处理指令的一种,一个XML文档最好以一个XML声明作为开始。在一个XML的处理指令中必须包括version属性,指明所采用的XML的版本号,而且它必须在属性列表中排在第一位。standalone属性表明该XML文档是否和一个外部文档类型定义DTD配套使用。encoding属性则指明了数据所采用的编码标准。如:          

<?xml version = "1.0" encoding = "GB2312" standalone = "no"?>

        2)元素

        元素是XML文档内容的基本单元。从语法上讲,一个元素包含一个起始标记、一个结束标记以及标记之间的数据内容。当一对标记之间没有任何文本内容时,可以不写结束标记,而在起始标记的最后冠以斜杠"/"来确认。这样的标记称为"空标记"。标记中可以包含任意多个属性,属性以名称/取值对出现,属性名不能重复,名称与取值之间用等号"="分隔,且取值用引号引起来。格式如:

<标记>数据内容</标记>
        3)CDATA节

        在标记CDATA下,所有的标记、实体引用都被忽略,而被XML处理程序一视同仁地当作字符数据看待。CDATA的文本内容中不能出现字符串"]]>",另外,CDATA不能嵌套。CDATA的形式如下:

<![CDATA[ 文本内容 ]] >
        4)注释

        在注释文本中不能出现字符"-"或字符串"--";不要把注释文本放在标记之中,类似地,不要把注释文本放在实体声明之中或之前;注释不能被嵌套。

        5)处理指令PI

        处理指令是用来给处理XML文档的应用程序提供信息的,XML分析器把这些信息原封不动地传给应用程序,由应用程序来解释这个指令,遵照它所提供的信息进行处理。格式如:

<? 处理指令名 处理指令信息 ?>

2.物理结构

        1)通用实体

        可用在所有XML文档中,内部声明方式:<!ENTITY 实体名 文本内容>,外部声明方式:<!ENTITY 实体名 SYSTEM 外部文件URL>,引用方式为:&实体名;。

        2)参数实体

        只可用在DTD的元素和属性的声明中,内部声明方式:<!ENTITY % 实体名 文本内容>,外部声明方式:<!ENTITY % 实体名 SYSTEM 外部文件URL>,引用方式为:%实体名;。

二、DTD

1.内部dtd

<?xml version = "1.0" encoding="GB2312" standalone = "yes"?>
<!DOCTYPE 根元素名 [元素描述]> 
文档体.......

2.外部dtd

<?xml version = "1.0" encoding="GB2312" standalone = "no"?>
<!DOCTYPE 根元素名 SYSTEM "外部DTD文件的URL"> 
文档体.......
或者

<?xml version = "1.0" encoding="GB2312" standalone = "no"?>
<!DOCTYPE 根元素名 PUBLIC DTD名称 外部DTD文件的URL> 
文档体.......

3.ETD(Element Type Declaration)

           1) 空元素类型
        定义方式为: <!ELEMENT 元素名 EMPTY> 
        这类元素在XML文档中使用空元素标记,元素中没有内容。

        2) ANY元素类型
        定义方式为:<!ELEMENT 元素名 ANY> 
        XML文档里该元素中可以包含任何内容。建议一般只把文档的根元素规定为ANY类型。

        3) 父元素类型
        这类元素中可以包含子元素,在DTD中通过正则表达式规定子元素出现的顺序和次数。语法分析器将这些正则式与XML文档内部的数据模式相匹配,判别出一个文档是否是"有效的"。表格列出了正则表达式中可能出现的元字符:

元字符含义举例
元素A 元素B 元素C元素列表,无顺序要求<!ELEMENT 联系人 (姓名 EMAIL)>
,(半角逗号)并(AND),有顺序要求<!ELEMENT 联系人 (姓名,EMAIL)>
+出现一次或多次<!ELEMENT 联系人 (姓名,EMAIL+)>
*(半角星号)出现零次或多次<!ELEMENT 联系人 (姓名,EMAIL*)>
()
一组要共同匹配的表达式
<!ELEMENT 联系人 (姓名,EMAIL)+>
|或(OR)<!ELEMENT 联系人 (姓名,(电话|EMAIL))>
?不出现或出现一次<!ELEMENT 联系人 (姓名,(电话|EMAIL),地址?)>


        4)混合元素类型

       定义方式为:<!ELEMENT 元素名(#PCDATA|子元素名1|子元素名2|……)*>

       这类元素中可以包含文本,同时文本之间可以有选择地插入子元素,但子元素出现的顺序和次数不受限制。

4.DTD元素的属性声明

       格式是:<!ATTLIST 元素名 (属性名 属性类型 缺省值)*>

       属性类型有十种:

类型含义
CDATA纯文本,由可显示字符组成的字符串
Enumerated取值来自一组可接受的取值的列表
NOTATION取值是一个DTD中声明的符号,这个类型对于使用非XML格式的数据非常有用
ID以属性值的方式为文档中的某个元素定义唯一的标识,用以区分具有相同结构相同属性的不同元素
IDREF /IDREFS属性值引用已定义的ID值,方法是把那个元素的ID标识值作为该属性的取值;IDREFS是IDREF的复数形式,取值可以是若干个ID标识
ENTITY /ENTITIES取值为一个已定义的实体
NMTOKEN/NMTOKENS面向处理程序的类型


       缺省值有以下四种:

名称定义说明方式
必须赋值的属性XML文档中必须为这个属性给出一个属性值
<!ATTLIST 元素名 属性名 属性类型  #REQUIRED>
可有可无的属性不要求在XML文档中给该属性赋值,而且也无须在DTD中为该属性提供缺省值
<!ATTLIST 元素名 属性名 属性类型  #IMPLIED>
固定取值的属性需要为一个特定的属性提供一个缺省值,并且不希望XML文档中另外给出元素值把这个缺省值替代掉
<!ATTLIST 元素名 属性名 属性类型  #FIXED "缺省值">
默认缺省值的属性需要在DTD中提供一个缺省值,在XML文档中可以为该属性给出新的属性值,也可以不另外给出属性值,采用DTD中给出的缺省值。
<!ATTLIST 元素名 属性名 属性类型  "缺省值">


三、XML Schema

1.Schema 

        是XML Schema中第一个出现的元素,用于声明该XML文档是一个Schema文档。Schema具有两个属性:name指定该Schema的名称,而xmlns则指定该Schema包含的命名空间。

2.ElementType

        用于定义该XML Schema文档中出现的元素。通过属性content来表明ElementType所声明的元素是否为空、是否包含文本、是否包含子元素、还是既包含文本又包含子元素,通过dt:type指定该元素的数据类型,通过order指定该元素的子元素的排列规则,相应取值有:one、seq、many。element元素是用于声明在ElementType中出现的元素,它需要同ElementType配合使用。

3.AttributeType

        用于定义在Schema文档中出现的属性类型。其属性dt:type指定所声明属性类型的数据类型,可支持的数据类型包括:entity, entities, enumeration, id, idref, idrefs, nmtoken, nmtokens, notation, 和 string。default属性可用于指定该属性类型的缺省取值。required属性指定该属性对于引用它的元素是否是必须的。 attribute元素实际上是对AttributeType声明的属性的引用,它也需要同AttributeType配合使用。

4.group

        用于将XML 文档中的元素分组。通过属性order可指定该分组中的元素或子分组的顺序,通过minOccurs和maxOccurs分别指定该分组在XML实例文档中出现的最少和最多次数。

5.datatype

        用于为ElementType和AttributeType指定数据类型。XML Schema支持两种数据类型,一种是XML 1.0标准中定义的十种基本数据类型:entity, entities, enumeration, id, idref, idrefs, nmtoken, nmtokens, notation, 和 string;另外,还支持一些扩展数据类型,包括:bin.base64, bin.hex, boolean, char, date, dateTime, dateTime.tz, fixed.14.4, float, int, number, time, time.tz, i1, i2, i4, r4, r8, ui1, ui2, ui4, uri, uuid。

6.description

        主要作用是为ElementType和AttributeType元素提供描述信息。

四、XML命名空间

        XML命名空间的定义由命名空间的声明、"合法名称"的定义及应用、命名空间的作用域三部分组成。

1.命名空间的声明

        1)直接定义方式:xmlns:[命名空间前缀] = [命名空间名]

        2)缺省定义方式:xmlns = [命名空间名]

2."合法名称"的定义和应用

        "合法名称"由用半角冒号":"分开的前缀部分和本地部分组成,其中前缀部分和本地部分都是一个合法的XML名称。如:"班主任:姓名"。在用缺省方式声明命名空间时,由于"命名空间前缀"为空,因此,这时的"合法名称"只剩下本地部分。

<?xml version ="1.0" encoding = "GB2312" ?> 
<学生 xmlns = http://www.xml.net.cn/学生 xmlns:班主任 = http://www.xml.net.cn/班主任> 
    <姓名>李明</姓名> 
    <班级>三年级二班</班级> 
    <住址>135楼210室</住址> 
    <班主任> 
        <班主任:教师> 
            <班主任:姓名>李华</班主任:姓名> 
            <班主任:住址>432楼133室</班主任:住址> 
            <班主任:电话>(021)32566178</班主任:电话> 
        </班主任:教师> 
    </班主任> 
</学生>

        "合法名称"的应用主要有三种情况:

            1)用于起始元素标记、结束元素标记和空元素标记。

            2)用于属性的定义。

<?xml version ="1.0" encoding = "GB2312" ?> 
<学生:学生 xmlns:学生 = http://www.xml.net.cn/学生> 
    <学生:姓名>李明</学生:姓名> 
    <学生:班级学生:数字类型 = "中文">三年级二班</学生:班级> 
    <学生:住址学生:数字类型 = "阿拉伯">135楼210室</学生:住址> 
</学生:学生>
            3)用于DTD中的元素名和属性类型。

<?xml version="1.0" encoding="GB2312" ?> 
<!ELEMENT 学生:学生 (学生:姓名,学生:班级,学生:住址)> 
    <!ATTLIST 学生:学生 xmlns:学生 CDATA #FIXED "http://www.xml.net.cn/学生"> 
        <!ELEMENT 学生:姓名 (#PCDATA)> 
        <!ELEMENT 学生:班级 (#PCDATA)> 
        <!ELEMENT 学生:住址 (#PCDATA)>
3.命名空间的作用域

<?xml version ="1.0" encoding = "GB2312"?> 
    <学生 xmlns = http://www.xml.net.cn/学生> 
        <姓名>李明</姓名> 
        <班级>三年级二班</班级> 
        <住址>135楼210室</住址> 
        <班主任> 
            <班主任:教师 xmlns:班主任 = http://www.xml.net.cn/班主任> 
                <班主任:姓名>李华</班主任:姓名> 
                <班主任:住址>432楼133室</班主任:住址> 
                <班主任:电话>(021)32566178</班主任:电话> 
            </班主任:教师> 
        </班主任> 
    </学生>
        缺省命名空间"http://www.xml.net.cn/学生"的作用域在"教师"元素以外的地方,而"http://www.xml.net.cn/班主任"命名空间的作用域在"教师"元素内,包括"教师"元素本身。

五、文档显示与样式单

        W3C已经给出了两种样式单语言的推荐标准,一种是层叠样式单CSS(Cascading Style Sheets),另一种是可扩展样式单语言XSL(eXtensible Stylesheet Language)。CSS和XSL同属于样式单,它们的区别表现在于CSS既可用于HTML,也可用于XML。但XSL是专门针对XML提出的,它不能处理HTML文档。样式单一般不包含在XML文档内部,以独立的文档方式存在。如果对一个XML文档施加某一个样式单,可在 XML文档中使用标记:

<?xml-stylesheet type="text/css" href="mystyle.css" ?>   或   <?xml-stylesheet type="text/xsl" href="mystyle.xsl" ?>
XSL在网络中的应用大体分为两种模式:

1.服务器端转换模式

        在这种模式下,XML文件下载到浏览器前先转换成HTML,然后再将HTML文件送往客户端进行浏览。有两种方式:

        1)动态方式;即当服务器接到转换请求时再进行实时转换,这种方式无疑对服务器要求较高。

        2)批量方式;实现将XML用XSL转换好一批HTML文件,接到请求后调用转换好的HTML文件即可。

2.客户端转换模式

        这种方式是将XML和XSL文件都传送到客户端,由浏览器实时转换。前提是浏览器必须支持XML+XSL。

六、XML的字符编码

        XML标准规定,XML文件使用Unicode字符集编码。虽然Web是国际性的,但由于HTML对跨文种编码支持的不足,极大地限制了跨文种网页的制作和浏览。XML通过对双字节Unicode字符集和其压缩表示方式UTF-8、UTF-16提供完全支持,使Web的国际性在数据表现和数据交换层上真正得以实现,因为Unicode几乎包括了世界上所有现代语言通常使用的每一种字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值