加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML介绍

发布时间:2020-12-16 05:42:29 所属栏目:百科 来源:网络整理
导读:XML是通过数据文档、DTD、样式单三个分离的部分来描述数据的。 一、结构 1.逻辑结构 1)XML声明 XML声明是处理指令的一种,一个XML文档最好以一个XML声明作为开始。在一个XML的处理指令中必须包括version属性,指明所采用的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,和 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几乎包括了世界上所有现代语言通常使用的每一种字符。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读