XML基础

一、XML技术概述

  • XML的起源和作用
        XML是eXtensible Markup Language(可扩展标记语言)的缩写,
            是为了实现计算机之间的文档交换而设计的文档内容编写规范。
        XML的根本作用就是要统一信息的结构,使文档对人和机器都可阅读。
  • XML文档结构
        XML不能描述网页具体的外观,它只是描述数据的结构和内容,它没有固定的标记,
            允许用户随便发明和创建自己的标记,这就是XML的可扩展性。
        XML片段的结构:
            <书架>
                <书>
                    <书名> </书名>
                    <作者> </作者>
                    <售价> </售价>
                <书>
            </书架>
        XML也是结构化的,其结构化主要体现在两个方面:
            1、每一部分(每一个元素)都和其他元素有关联,这种关联就形成了树结构。
            2、标记本身的含义与它描述的信息相分离。
  • XML与HTML的比较
        XML与HTML类似:
            都以一对相互匹配的起始和结束标记符来标记信息。
        XML与HTML的区别:
            1、HTML将数据和其显示效果混在一起,它是一种表现技术;
                而XML文档只是存储了数据和描述了数据之间的关系。
            2、HTML格式要求比较松散;
                而XML是非常严格的标记语言。
            3、HTML的标记集合是固定的;
                而XML没有提供一组事先已经定义好的标签。
            4、XML允许粒度更新;
                HTML不支持类似功能。
  • XML与数据库的比较
        XML是一种文档,它具有三个要素:文档结构、文档数据和文档样式。
            XML文档结构就像数据库中的表结构;
            在一个标签对中嵌套的数据就相当于数据库表中的某一条记录中的某个字段的数据;
            XML文档中可以指定用来控制该文档样式的CSS或XSL文件。

二、XML的基本语法

  • 文档声明
        最简单的XML文档声明语法如下:
            <?xml version="1.0" ?>
                在“<”和“?”之间、“?”和“>”之间以及第一个“?”和xml之间不能有空格,
                    这就是XML语法严格性的一个体现。
                声明语句中的version属性表示XML的版本。
        在XML文档声明中指定encoding属性。
            <?xml version="1.0" encoding="GB2312" ?>
                W3C的XML1.0规范里规定,所有的XML解析器必须接受UTF-8和UTF-16编码的Unicode字符。
                encoding属性默认的设置是Unicode编码,如果文档中的字符是以UTF-8或者UTF-16作为编码,
                    则可以不设置这个属性。
        还可以指定另外一个属性:standalone
            <?xml version="1.0" encoding="GB2312" standalone="yes" ?>
                standalone属性用于说明文档是否独立的。
                如果同时设置了encoding和standalone属性,standalone属性要位于encoding属性之后。
  • 元素定义
        元素
            一个XML元素由一个标记来定义,包括开始和结束标记以及其中的内容。
                <书名>Java</书名>
        根元素
            没有嵌套在其他元素内的元素为根元素,根元素通常是XML文档中定义的第一个元素。
                格式良好的XML文档必须有且仅有一个根元素,其他元素都是这个根元素的子孙元素。
        空元素
            如果在一个元素中没有嵌套子元素和数据,也就是标记对之间没有内容,这样的元素称为空元素。
                空元素可以不使用结束标记,但必须在起始标记的结束定界符(>)前面增加一个正斜杠(/)
                字符来说明该标记是一个空元素。空元素标记一般都与属性配合使用。
        XML元素的标记名称中可以包含字母、数字以及其他一些可见字符,但必须遵守下面的一些规范:
            区分大小写;
            不能以数字或“_”(下划线)开头;
            不能以字符组合xml(或XML、或Xml等)开头;
            不能包含空格;
            名称中间不能包含冒号(:);
            不要使用“.”;
            最好不要使用“-”,而以下划线(_)代替;
            名称尽量简短;
            名称的大小写尽量采用同一标准;
            名称可以使用非英文字符。
  • 属性定义
        XML中的属性也是自己随便定义的,用于对标签进一步描述和说明。
            <售价 单位="元">58</售价>
                属性值一定要用双引号(")或者单引号(')引起来。
  • 注释
        语法:
            <!-- 注释信息 -->
                XML声明只能作为XML文件中的第一行,所以不要把注释放在XML声明之前。
                注释不能嵌套使用。
  • 空格和换行的处理
        在XML文本中出现的所有空格和换行,XML解析程序都要一个个如实的交给下游程序去处理。
  • CDATA区
        CDATA是character data的简写,即字符数据。
            CDATA区指的是不想被解析程序解析的一片原始数据区,它以“<!CDATA[”开始,以“]]>”结束。
            还要注意CDATA区中的起始和结束处的空格、换行等空白字符的影响。
            还应注意其中的“<!CDATA[”不能写成“<![cdata[”或“<![Cdata[”等形式。
            CDATA区内部不能出现字符串“]]>”,因为它是CDATA区的结束标志。
  • 特殊字符
        在XML文档中,有些特殊字符需要用转义字符序列表示其原始字面意义。
            &    &amp;
            <    &lt;
            >    &gt;
            "    &quot;
            '    &apos;
  • 处理指令
        处理指令是Processing Instruction的中文解释,通常简称PI,用来为处理XML文档的应用程序提供指示信息。
            <?xml-stylesheet type="text/css" href="book.css"?>
                使用CSS控制XML文档显示。

三、XML的约束模式

  • 格式良好的(Well-formed)XML
        遵守XML基本语法规则和规范的XML文档就可以被称为“Well-formed XML”。
  • XML的约束模式
        约束模式定义了XML文档中允许出现的元素名(也就是标记名)、
            元素中的属性、内容类型、以及元素之间的嵌套关系和出现顺序。
  • XML的约束模式语言
        XML约束模式的内容也需要遵循一定的语法规则,这些语法规则就形成了XML约束模式语言。
        XML约束模式语言有XML DTD、XDR、SOX、XML Schema等,
        其中应用最广泛和具有代表意义的是XML DTD和XML Schema。
  • 有效的(Valid)XML
        Valid XML
            一个遵守XML的基本语法规则、且符合为它指定某个XML约束模式的XML文档
                就可以称之为“Valid XML”文档。
        校验
            将一个XML文档和它所引用的XML约束模式进行比较分析,看其中的内容
                是否符合XML约束模式的过程叫校验。
        XML解析器
            根据能否对XML文档进行约束模式校验,可以将XML解析器分为两类:非校验类解析器和校验类解析器。

四、DTD

  • 对DTD的初步认识
        一个DTD文件可以包含元素和元素之间的关系的定义,元素的属性定义,以及实体和符号的定义。
        语法格式:
            <!ELEMENT 元素名称 使用规则>
                元素的使用规则定义了元素中包含的组成成分,以及每种组成成分出现的次数、次序,
                    还可以是某些成分进行某种关系组合后出现的次数、次序。
        DTD文件应该使用UTF-8或Unicode编码。
  • 在XML文档中引入外部DTD文件
        XML文档通过使用DOCTYPE声明语句(文档类型定义语句)来指明它所遵循的DTD文件。
        DOCTYPE声明语句紧跟在XML文档声明语句后面,有两种格式:
            1、<!DOCTYPE 文档类型名称 SYSTEM "DTD 文件的URL">
            2、<!DOCTYPE 文档类型名称 PUBLIC "DTD 名称" "DTD 文件的URL">
                文档类型名称可以由XML文档编写者自己定义;
                关键字SYSTEM表明XML文件所遵循的是一个本地或组织内部所编写和使用的DTD文件;
                    关键字PUBLIC表明该XML文件所遵循的是一个由权威机构制定的、
                    公开提供给特定行业或公众使用的DTD文件。
                "DTD 名称"用于指定该DTD文件的表示名称,它只在使用关键字PUBLIC的DOCTYPE声明语句中出现。
                "DTD 文件的 URL"部分指定该DTD文件所在的位置。
  • 在XML文档中直接嵌入DTD定义语句
        格式:
            <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
            <!DOCTYPE 根元素名 [
                DTD定义语句
                ...
            ]>
        在使用DOCTYPE声明语句引入一个外部的DTD文件的同时,
            还可以在这个DOCTYPE声明语句嵌入DTD定义语句:
            <!DOCTYPE web-app
                PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
                "http://java.sun.com/dtd/web-app_2_3.dtd"
            [
                !ENTITY copyright SYSTEM "http:www.it315.org/copyright.xml"
            ]>
        一个完整的XML文档包括如下一些组成部分:
            XML声明(declaration)
            DOCTYPE声明语句;
            处理指令(processing instruction);
            元素(element);
            注释(comment)
            CDATA区。

五、DTD的语法细节

  • 元素定义
        语法格式:
            <!ELEMENT 元素名称 使用规则>
                元素的使用规则定义了元素中包含的组成成分,以及每种组成成分出现的次数、次序,
                    还可以是某些成分进行某种关系组合后出现的次数、次序。
                在DTD的元素定义规则中,可以有以下一些形式:
                    (#PCDATA)表示元素中嵌套的内容是普通文本字符串。
                    用一对圆括号()将元素中要嵌套的一组子元素括起来。
                    元素中也可以嵌套文本字符串与其他子元素的混合。
                    关键字EMPTY表示元素中不包含任何子元素和普通文本字符串。
                    关键字ANY表示元素中可以有任何类型的子元素和普通文本字符串,以及他们的混合。
                对DTD文件中的元素定义,还有下面的一些补充细节说明:
                    XML DTD使用与XML文档同样的注释方式。
                    每条元素定义语句的顺序是无关紧要的。
                    在XML文档结构中具有不同用途的元素不能使用相同的元素名。
                    一个元素的各个组成成分可以以任意顺序出现,也可以强制遵循一定顺序。
                        如果元素的使用规则中的各个组成成分用空白符分隔,那么它们的出现顺序没有严格要求;
                        如果元素的使用规则中的各个组成成分用(,)分隔,
                            那么它们在XML文档中的出现顺序必须与它们的排列顺序一致。
                    如果一个元素的各个组成成分以竖杠字符(|)分隔,那么在XML文档中只能出现它们之中的任何一个。
                    在元素的使用规则中可以通过正则表达式来定义子元素出现的次数。
                    一对圆括号()可用于将括在其中的内容组成一个可统一操作的分组,分组中可以嵌套更小的分组。
  • 属性定义
        语法格式:
            <!ATTLIST 元素名称
                属性名1 属性类型 设置说明
                属性名2 属性类型 设置说明
                ......
            >
        在DTD中定义元素的属性时,可以有下面几种设置说明:
            1、#REQUIRED
                关键字#REQUIRED说明必须设置该属性。
            2、#IMPLIED
                关键字#IMPLIED说明可以设置,也可以不设置该属性。
            3、#FIXED
                关键字#FIXED说明该属性的取值固定为一个默认值,在XML文件中不能将该属性设置为其他值。
                    使用#FIXED关键字时,还需要为该属性提供一个默认值。
            4、直接使用默认值
                如果在属性的设置说明部分没有使用上面任何一种关键字,而是直接指定一个默认值的话,
                    那么在XML文件中可以设置,也可以不设置该属性。
                    如果XML文件中没有设置该属性,该属性将被自动设置,设置值为DTD中定义的默认值;
                    如果XML文件中设置了该属性,可以使用新的属性值来覆盖DTD中定义的默认值。
        在DTD中定义元素的属性时,可以将属性设置成下面的10种类型:
            1、CDATA
                它表示属性值为普通文本字符串。
            2、ENUMERATED(枚举类型)
                属性的类型可以是一组取值的列表,在XML文件中设置的属性值只能是这个列表中的某个值。
            3、ID
                使用关键字ID作为属性类型时,它表示属性的设置值将用于唯一标识一个XML文件中的某个元素。
            4、IDREF和IDREFS
                使用关键字IDREF作为属性类型时,一个元素的IDREF类型的属性设置值
                    将是同一个XML文件中的另一个元素的ID类型的属性的设置值。
                IDREFS关键字用于表示IDREF的列表类型,一个元素的IDREFS类型的属性设置值可以
                    是同一个XML文件中的另外多个元素的ID类型的属性的设置值,每个ID属性值之间用空格分开。
            5、NMTOKEN和NMTOKENS
                NMTOKEN表示由一个或多个字母、数字、句点(.)、连字号(-)或底线(_)所组成的一个名称。
                    除了第一个字符位置外,NMTOKEN属性的设置值中也可以包含冒号(:)。
                    NMTOKENS关键字用于表示一种列表类型。
            6、NOTATION
                NOTATION定义语句分为两种情况:
                    <!NOTATION 符号名 SYSTEM "MIME类型">
                    <!NOTATION 符号名 SYSTEM "URL路径名">
            7、ENTITY和ENTITYS
                使用关键字ENTITY作为属性的类型时,表明其属性值必须为在DTD中使用<!ENTITY...>
                    语句定义的一个实体(entity)的引用。
                    ENTITYS关键字用于标识一种列表类型,一个元素的ENTITYS类型的属性设置值可以是
                    多个实体的引用,每个实体的引用用空格分隔。
  • 实体定义
        在DTD定义中,一条<!ENTITY...>语句用于定义一个实体。实体可分为两种类型:引用实体和参数实体。
            1、引用实体
                引用实体两种语法定义格式:
                    <!ENTITY 实体名称 "实体内容">
                    <!ENTITY 实体名称 SYSTEM "外部 XML 文档的 URL">
                引用实体主要在XML文档中被引用,其引用方式为:
                    &实体名称;
            2、参数实体
                定义语法格式:
                    <!ENTITY % 实体名称 "实体内容">
                对参数实体进行引用的方式为:
                    %实体名称;
                参数实体可以实现模块化的DTD,即模块化的约束模式。

六、XML Schema

  • XML Schema与DTD的比较
        XML Schema相比XML DTD,具有一些显著优点:
            1、XML Schema符合XML语法结构。
            2、一些常用的XML API,例如DOM和SAX,它们只能处理XML实例文档,
                并没有提供解析XML DTD文档内容的功能。
            3、XML有非常高的合法性要求,XML Schema则采用与XML文档同样的合法性验证机制。
            4、XML Schema对名称空间支持得非常好,而XML DTD几乎不支持名称空间。
            5、XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
            6、DTD定义约束的能力也非常有限,而XML Schema定义约束的能力非常强大。
            7、XML Schema比XML DTD更适合描述关系数据。
        XML Schema一些缺陷:
            不能像DTD一样定义实体,XML Schema比DTD更复杂。
  • 一个XML Schema例子
        xsd文件的解释:
            1、<schema>元素为所有XML Schema模式文档的根元素。
            2、XML Schema模式文档里面的词汇都是有特定含义和作用的,这些词汇来自另外一个统一规定的模式文档。
            3、模式文档中的每一个<element>元素用于定义实例文档中的一个元素,
                <element>元素可以是不包含任何子元素的空元素的形式,也可以是包含子元素的成对标签的形式。
                <element>元素定义的实例文档中的每个元素都对应一种类型。
            4、<element>元素所定义的实例文档中的元素包含子元素或者具有属性,
                那么这个元素的类型即为复杂类型。
                在模式文档中必须使用<complexType>元素来定义复杂类型。
                复杂类型的定义可以直接嵌套在相关的<element>元素中,
                也可以在<element>元素的外部进行定义,然后在<element>元素中使用type属性来进行引用。
                用于声明子元素的语句必须嵌套在<sequence>、<choice>等标签内。
                <sequence>标签用于说明各个子元素在实例文档中的出现顺序
                    必须与它们在模式文档中声明时的排列顺序一致,
                <choice>用于说明在实例文档内只需出现其中声明的各个子元素之中的任何一个。
            5、<sequence>元素中的maxOccurs='unbounded'属性设置用于
                说明嵌套在<sequence>元素中的子元素定义可以在XML实例文档中出现多次。

七、名称空间

  • 名称空间的概念
        XML从两个方面来解决名称冲突的问题:
            1、使用名称空间这个概念来区分每个约束模式文档,每个约束模式文档被赋以一个唯一的名称空间,
                每个名称空间都用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示。
            2、在XML实例文档中为元素增加前缀部分,元素名称前增加前缀名称代表该元素属于的模式文档的名称空间。
  • 名称空间声明
        名称空间声明就是在XML实例文档中为某个模式文档的名称空间指定一个临时的简写名称,
            这个简写名称将作为该名称空间的元素或属性的前缀名。
        名称空间声明的基本格式为:
            xmlns:前缀名称="URI"
                其中的前缀名称是名称空间的一个临时缩写,URI需要使用引号(单引号或双引号)引起来。
        在任何元素中声明的名称空间,只对该元素及其中嵌套的所有子孙元素有效。
            一个名称空间声明可以作用到的那些元素和属性,就是该名称空间声明的作用域。
            如果在里层元素中声明的名称空间前缀与外层元素中声明的另外一个名称空间的前缀名相同,
            那么在里层元素及其子孙元素范围内,该前缀名对应的是里层元素中声明的名称空间。
        用冒号(:)把前缀与本地部分进行分割的名称,有一个专门的术语,即QName(Qualified Name,限定名),
            它表示被限定的某个名称空间的名称。
  • 默认名称空间
        在名称空间的声明中也可以省略掉前缀部分,其格式为:xmlns="URI"。
            以这种方式声明的名称空间作为其作用域内的所有元素的默认名称空间,
            即该作用域内的所有没有指定前缀部分的元素都属于这个名称空间。
  • 属性的名称空间
        如果属性名称中有一个前缀部分,该属性将被限定在该前缀所指定的名称空间中。
            如果属性名称中没有前缀部分,那么该属性就不属于任何名称空间。
  • xml:space和xml:lang属性
        在XML的规范中,定义了两个内置的属性,即xml:space和xml:lang。
        xml:space是一个Enumerated类型的属性,它的设置值只能是"default"或"preserve":
            "default"表示应用程序可以自行随意处理空格等字符;
            "preserve"则表示应用程序应把空格等字符当做普通文本字符处理。
            如果没有设置xml:space属性,解析器默认采用"default"作为其设置值。
        xml:lang属性用于设置元素的本地化语言信息,ISO-639规范中规定了代表各个国家和地区的本地化语言的名称,
            例如"en"表示英文、"la"表示拉丁文、"zh"表示中文、"zh-CN"表示中文(中国)、
                "zh-TW"表示中文(中国台湾地区)。
            xml:lang属性的默认值为"en"。
            xml:lang属性正是用于解决这种国际化的问题,以帮助XML文档支持国际化的应用。
        如果在某个元素中设置了xml:space和xml:lang属性,那么,嵌套在该元素中的子孙元素都将沿袭其设置结果。
            如果在子孙元素重新设置xml:space和xml:lang属性,那么在子孙元素的范围内采用它们自己的设置结果。

八、引入XML Schema文档

  • 在声明名称空间的元素中可以设置一个schemaLocation属性
            来指定名称空间所对应的XML Schema文档的存储位置。
            schemaLocation属性的设置值中包含两个部分:第一个部分就是名称空间的URI;
            第二个部分就是该名称空间所标识的XML Schema文件的位置或URL地址,这两个部分之间用空格分隔。
        schemaLocation属性的作用就是用于指定名称空间所对应的XML Schema模式文档在哪里,
            这个属性必须与它所设置的名称空间的声明语句位于同一元素中。
            由于schemaLocation属性与使用它的那个元素不在同一名称空间中,所以,在使用schemaLocation
            属性时,必须在其前面加上表示其名称空间的前缀,并要声明该前缀所对应的名称空间。
        XML解析程序都应内嵌有那些公认的标准名称空间的XML Schema文档的内容信息,
            因此在使用公认的标准名称空间时,不用去寻找它们所对应的XML Schema文档的内容,
            自然也就不用指定XML Schema文档的存储位置。
        一个XML实例文档可能引用多个名称空间的名称,schemaLocation属性的设置中可以包含多对名称空间与
            它们所对应的XML Schema文档的存储位置,每一对名称空间的设置信息之间也采用空格分隔。
  • 不使用名称空间引入XML Schema文档
        一个没有使用名称空间的XML实例文档也可以声明它遵循某个XML Schema文档,
            但它只可以引入一个XML Schema文件对其进行约束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值