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) 空元素类型 2)ANY元素类型 3)父元素类型
定义方式为:<!ELEMENT 元素名(#PCDATA|子元素名1|子元素名2|……)*> 这类元素中可以包含文本,同时文本之间可以有选择地插入子元素,但子元素出现的顺序和次数不受限制。 4.DTD元素的属性声明 格式是:<!ATTLIST 元素名 (属性名 属性类型 缺省值)*> 属性类型有十种:
缺省值有以下四种:
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几乎包括了世界上所有现代语言通常使用的每一种字符。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |