⼀、xml基础详解:1、概述:
xml:即可扩展标记语⾔,xml是互联⽹数据传输的重要⼯具,它可以跨越互联⽹任何的平台,不受编程语⾔和的限制,可以说它是⼀个拥有互联⽹最⾼级别通⾏证的数据携带者。xml是当前处理结构化⽂档信息中相当给⼒的技术,xml有助于在服务器之间穿梭结构化数据,这使得开发⼈员更加得⼼应⼿的控制数据的存储和传输。
Xml⽤于标记电⼦⽂件使其具有结构性的标记语⾔,可以⽤来标记数据、定义数据类型,是⼀种允许⽤户对⾃⼰的标记语⾔进⾏定义的源语⾔。Xml是标准通⽤标记语⾔(SGML)的⼦集,⾮常适合Web传输。XML提供统⼀的⽅法来描述和交换独⽴于应⽤程序或供应商的结构化数据。
2、xml的特点及作⽤:特点:
v xml与、编程语⾔的开发平台都⽆关;v 实现不同系统之间的数据交互。作⽤:
v 配置应⽤程序和⽹站;v 数据交互;v Ajax基⽯。
在配置⽂件⾥边所有的配置⽂件都是以XMl的格式来编写的。
跨平台进⾏数据交互,它可以跨操作系统,也可以跨编程语⾔的平台。
Ajax是现在⽬前⽐较流⾏的⼀个⽹络交互的技术。Ajax⾥⾯最后⼀个x实际上就是xml的缩写。Xml(Extensible Markup Language)是可扩展标记语⾔
⼀个xml⽂档必须要有第⼀⾏的声明和它的⽂档元素的描述信息就可以了。3、xml声明 例⼦:
注:xml声明⼀般是xml⽂档的第⼀⾏;xml声明由以下⼏个部分组成:4、根元素
它是xml⽂档⾥⾯唯⼀的;它的开始是放在最前⾯,结束是放在最后⾯。5、元素:
(1) 所有的xml元素都必须有结束标签;(2) xml标签对⼤⼩写敏感;(3) xml必须正确地嵌套;(4)元素的命名规则:
名称中可以包含字母、数字或者其他的字符;名称不能以数字或者标点符号开始;名称中不能包含空格。
(5)空元素6、属性(1)语法
<元素名 属性名=“属性值”/>例:
属性值⽤双引号包裹;⼀个元素可以有多个属性,它的基本格式为:<元素名 属性名=“属性值” 属性名=“属性值”>;属性值中不能够直接包含<.”,&。7、实体:
在xml中,⼀些字符拥有特殊的意义。如果把字符“<”放在xml元素中,会发⽣错误,这是因为解析器会把它当作新元素的开始,这样会产⽣xml错误:
为了避免这个错误,请⽤实体引⽤来代替“<”字符:xml中5个预定义实体8、注释
注:注释内容中不要出现”--”;不要把注释放在标签中间;注释不能嵌套。9、总结:
(1)xml描述的是⽂档的内容与语义,⽽不是⽂档应当如何显⽰;(2)格式正规(well formed)的xml⽂档遵循如下规则的xml⽂档称为格式正规的xml⽂档:v 必须有xml声明语句;v 必须有且仅有⼀个根元素;v 标签⼤⼩写敏感;v 属性值⽤双引号;v 标签成对;v 空标签关闭;v 元素正确嵌套。
(3)有效的(valid)xml⽂档。⾸先xml⽂档是个格式正规的xml⽂档,然后⼜需要满⾜DTD的要求,这样的xml⽂档称为有效的xml⽂档;10、解析器11、命名空间
11.1、xml命名空间(xml Namespaces)(1)xml命名空间提供避免元素命名冲突的⽅法。
(2)在xml中,元素名称是由开发者定义的,当两个不同的⽂档使⽤相同的元素名时,就会发⽣命名冲突。11.2、xml命名空间⽰例
(1)使⽤前缀⽰例
与仅仅使⽤前缀不同,我们为标签添加了⼀个xmlns属性,这样就为前缀赋予了⼀个与某个命名空间相关联的限定名称。⼆、DTD技术——xml⽂件的验证机制1、DTD概述:
⽂档类型定义——Document Type DefinitionDTD⽤来描述xml⽂档的结构,⼀个DTD⽂档包含: 元素的定义规则;元素之间的关系规则;属性的定义规则。2、为什么要⽤DTD呀
v 有了DTD,每个xml⽂件可以携带⼀个⾃⾝格式的描述,所谓格式描述就是我的xml⽂档⾥⾯可以写哪些东西,⽐如元素、属性;
v 有了DTD,不同组织的⼈可以使⽤⼀个通⽤DTD⽤来交换数据,xml是随意定义的,有了DTD,我们可以限制多个公司之间按照这种DTD的规则来编写xml⽂档,由于DTD都是统⼀格式,所以不同的公司之间,不同的组织之间就可以⽤这种通⽤的xml⽂档格式进⾏交互数据了;v 应⽤程序可以使⽤⼀个标准DTD校检从外部接收的xml数据是否有效。3、如何编写⼀个DTD
DTD分成三⼤类,第⼀是内部DTD,第⼆是外部DTD,第三是内外结合的DTD。(1)内部DTD⽂档(Students.xml):
(2)就是说这个xml⽂档⾥⾯既包含xml定义,⼜包含DTD的定义。这个[]⾥⾯是DTD的定义的内容,就是第⼀个叫内部DTD⽂档。(3)外部DTD⽂档(Students.xml Students.dtd):
所谓外部就是DTD的定义和我们的xml⽂档是在不同的⽂件⾥⾯。
那么外部的DTD如何使⽤呢?那就需要在前⾯的xml⽂档的根元素的上⾯这个位置跟刚才内部的是⼀样的,要写上
这类年改⾰⽂档在同⼀个⽂件夹下⾯,就可以了。有内部DTD了,为什么还要学习外部DTD呢??
内部的DTD,它只能验证当前的这个xml⽂档。那假如说,我们有⼀个DTD需要验证多个xml⽂档的话,那就直接使⽤外部DTD就⾏。(4)内外部DTD⽂档结合
4、DTD的具体定义——元素的定义元素名称:是指xml⽂档⾥⾯的元素名称元素类型:(1)EMPTY
⽰例第⼀个是对的,第⼆个是错误的,因为它有内容了。(2)#PCDATA
第⼀个是对的,第⼆个是错误的。(3)纯元素类型的DTD语法
(4)ANY
5、定义属性的语法结构
xml⽂档携带数据的⽅式,不仅仅是xml的元素的内容,还可以是元素的属性。所以说在DTD⾥⾯我们有必要对属性进⾏限制。(1)编写属性验证的语法规则:(2)属性类型——CDATA
CDATA是表⽰属性的值,可以是任何字符,这⾥包括数字和中⽂。问题⼀:属性的CDATA与元素的CDATA节有何区别呢??
属性的CDATA表⽰属性值是任何的字符,元素⾥的CDATA节是表⽰在CDATA节⾥⾯的内容不被xml⽂档进⾏解析。问题⼆:#PCDATA与CDATA有何区别??
#PCDATA是限制元素⾥⾯的内容是字符类型的,⽽这个CDATA是限制属性⾥⾯的内容是字符类型。(3)属性类型——ID
表明该属性的取值必须是唯⼀的。(4)属性类型——IDREF/IDREFS
v IDREF是指它的值要指向⽂档当中其它地⽅声明的ID。把IDREF当成的外键,把ID当成主键理解就⾏;v IDREFS同IDREF,但是可以具有由空格分开的多个引⽤;(5)属性类型——Enumerated
预先定义了⼀些值,属性的值必须在所列出的值的范围内(6)属性特点——#REQUIRED
它表⽰元素的所有的实例都必须有该属性的值(NOT NULL)(7)属性特点——#IMPLIED
这就表⽰该属性的值是可以被忽略的。(8)属性特点——#FIXED
元素中该属性的值必须为指定的固定值。(9)属性特点——Default为属性提供⼀个默认的值。三、实体1、实体概述
实体,简单理解就是C#中的常量,我们在DTD⾥⾯定义,在xml⽂档⾥⾯去使⽤。(实际上就是⾃定义实体,与前⾯的预定义实体差不多是⼀回事)。2、实体的定义四、xml之Schema技术
1、Schema概述:xml Schema是⽤⼀套预先规定的xml元素和属性创建的,这些元素和属性定义了xml⽂档的结构和内容模式。Xml Shema规定xml⽂档实例的结构和每个元素/属性的数据类型。
理解:对于Schema来讲,我们可以将shema⽐喻成为是表结构。在表结构⾥,定义⼀些数据的限制要求。然后我们xml⽂档呢就相当于是数据表将来要存储的数据u,也就是⾥⾯的数据表数据了,所以整体来讲的话schema它就是⽤于验证xml⽂档的。2、有了DTD,为什么要⽤Schema呢?
(1)DTD的局限性
DTD不遵守xml语法(写xml⽂档实例时⽤⼀种语法,写DTD的时候⽤另外⼀种语法);DTD数据类型有限(与数据库数据类型不⼀致);DTD不可扩展;DTD不⽀持命名空间(命名冲突)。(2)Schema的新特性
Shema基于xml语法的;Shema可以⽤能处理xml⽂档的⼯具处理;Schema⼤⼤扩充了数据类型,可以⾃定义数据类型;Schema⽀持元素的继承——Object-Oriented;Shema⽀持属性组。
3、Shema(模式):其作⽤与DTD⼀样,也是⽤于验证xml⽂档的有效性,只不过它提供了⽐DTD更强⼤的功能和更细粒度的数据类型,另外Schema还可以⾃定义数据类型。此外,Schema也是⼀个xml⽂件,⽽DTD则不是。4、所有的Schema⽂档,其根元素必须为Schema。5、Schema的⽂档结构6、Schema的数据类型6.1、Schema的数据类型概述6.2、简单类型:(1)内置的数据类型:基本的数据类型;扩展的数据类型;
(2)⽤户⾃定义简单类型(通过simpleType定义)。6.3、复合类型(通过complexType定义)6.4、数据类型的特征7、Schema的元素类型7.1、Schema根元素
作⽤:包含已经定义的Schema⽤法: 属性:xmlns/targetNamespace/elementFormDefault例⼦: 7.2、element元素作⽤:声明⼀个元素 属性:name/type/ref/minOccurs/maxOccurs例⼦:7.3、group元素 作⽤:把⼀组元素声明组合在⼀起属性:name例⼦: 7.4、attribute元素作⽤:声明⼀个属性 属性:name/type/use/default/fixed 例⼦: 7.5、attributeGroup元素 作⽤:把⼀组属性声明组合在⼀起属性:name/ref例⼦: 7.6、simpleType元素 作⽤:定义⼀个简单类型,它决定了元素和属性值的约束和相关信息属性:name 常⽤的两种⽅式:restriction——>⼀个约束;list——>从列表中选择。(1)simpleType元素的⼦元素——>restriction⼦元素为: (2)simpleType元素的⼦元素——>list ⼦元素为: 7.7、complexType元素 作⽤:定义⼀个复合类型,它决定了⼀组元素和属性值的约束和相关信息。属性:name 常⽤的两种⽅式:sequence——>⼀个序列;choice——>设置选择项。(1)complexType元素——sequence作⽤:给⼀组元素⼀个特定的序列例⼦: (2)complexType元素——choice 作⽤:把⼀组属性声明组合在⼀起,以便可以被复合类型应⽤属性:name/ref例⼦: 7.8、complexType与simpleType区别 simpleType类型的元素中不能包含元素或者属性; 当需要声明⼀个元素的⼦元素和或属性时,⽤complexType; 当需要基于内置的基本数据类型定义⼀个新的数据类型时,⽤simpleType。 因篇幅问题不能全部显示,请点此查看更多更全内容