版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章 标记和核心概念,XML技术教程,要点及主要内容,了解XML标签对象以及XML文档的含义 掌握XML元素、属性、注释及名字空间等的使用规则 了解实体类型及实体引用方式,2.1 XML标记,XML对信息资料进行标记,形成一个结构化框架,标记就是这个框架中的组成单元。标记的基本功能包括:标记元素的边界、插入注释和特殊指令以及声明语法分析的环境配置信息等。XML语法分析程序依靠标签将XML文档分解成离散的XML对象,从而完成语法分析工作。,XML文档结构图,XML对象类型简要说明-1,元素(Element)是XML中最常见的一种对象类型。一个元素可以包含字符数据,也可以嵌套包含其他的元素,XM
2、L文档就是由一个个这样的元素所构成的。 在元素的开始标签中,有时会在标签名后面出现pri=重要 这种形式的额外字符串,在XML中这些额外的字符串被称为属性(Attribute)。它们为不适合加入文本数据的元素添加相关信息。 声明(Declarations)一般出现在XML文档序言,以及外部文档类型定义文件中,应该注意的是声明绝对不会出现在元素中。在XML中声明的功能包括:对文档解析过程进行参数配置、定义有效性规则以及声明用来代替文本信息的特殊实体。,XML对象类型简要说明-2,处理指令(Processing instructions)作为在XML文件中嵌入信息的明确机制,用于私有的应用程序而不
3、是XML语法分析器或浏览器。其余用途包括,处理指令可以提供关于如何查看不可析外部实体的附加信息。 注释(Comments)以结束。介于之间的全部数据均被XML处理器忽略,就像它们根本不存在一样。注释用于提醒XML文档作者或临时标注出文档中不完善的部分。 大多数情况下,出现在一对尖括号“”之间字符的是标签名,不在尖括号中的是字符数据。但是有一种情况例外,在CDATA段(CDATA sections)中所有文本都是纯字符数据。在CDATA段中看起来与标签或者实体相似的文本,但XML处理器是不会将它们解释为标签或实体的。 实体引用(entity references)是指分析文档时会被字符数据取代的
4、标记。实体引用用于XML文档中的特殊字符,否则这些字符将被解释为标记的组成部分。例如,实体引用<;代表小于号“”,否则会被解释为一个标签的起始部分。,2.2 XML文档,读者需要对XML有一个重要的术语:文档(document)有所认识。也许在看到这个术语时,人们就会想到由段落和章节组成的可供人进行阅读的书籍、文章或短文等。在XML中,文档这个概念具有更普通的含义:它是由元素和其他一些标记按照一定的次序构成的,它是XML信息的一个基础单位。XML文档可以包含一段文本,如一个故事或一篇文章,但这不是XML文档仅能包含的。XML文档更多的是象数据库一样保存数据信息,或保存一些为显示化学分子式或
5、数学公式而设计的抽象结构信息等。实际上,XML最吸引人的应用是在应用程序之间进行各种不同类型数据的格式转换。在此,请记住XML文档不同于人们心中惯有的传统文档,它具有更广泛的定义,有更强大的用途。,XML中的文档到底指什么?,XML文档采用一种特殊的结构对数据进行存档,保证最大程度的方便解析器程序的处理。XML文档应该看作是一个逻辑实体(logical entity)而不是一个物理实体(physical entity),即XML文档并不是只可能保存在一台计算机中的一个物理文件里面。通常情况下,一个XML文档可能分散在很多物理文件中,这些物理文件中的一些也可能存在于不同的计算机系统中。这要求XM
6、L解释程序有能力将这些分散的部分组装称一个相关的逻辑整体。,2.3 XML文档序言,2.3.1 XML声明,XML声明是为XML分析器进行文档处理时提供相关细节的一个很小的配置信息集合。每一个XML文档应当包含一个XML声明,并且XML声明必须放在文档的第一行。,XML声明中包括有三个属性,每个属性设置的具体形式为:属性名称 = “属性值”。其中属性值需使用双引号或者单引号括起来。多个属性之间使用空格进行分隔。XML声明中的三个属性的名称分别是:version、encoding和standalone。,version属性,用来声明XML文档所遵循的XML标准的版本。现在,通常情况下该属性的值都
7、是1.0,尽管XML 1.1已经成为W3C的推荐标准,但是大部分XML分析器还是采用的是XML 1.0的标准。version是XML声明中必须包含的一个属性。,encoding属性,用来告知XML分析程序,当前XML文档使用什么样的字符编码。该属性是可选的,当XML声明中没有明确给出字符编码方式时,XML分析程序将默认认为XML文档采用的是UTF-8字符编码。 常用encoding属性值:,encoding指定编码与XML文本物理保存编码,通过encoding进行XML文档的字符编码配置后,并不能确保XML分析程序就能正确的处理XML文档,还必须保证XML文档保存到磁盘时采用了合适的编码方式。
8、 例如,某用户通过Windows系统的自带文本编辑器Notepad编写包含中文字符的XML文档时,使用XML文档默认字符编码方式UTF-8,随后采用Notepad的默认编码方式ANSI保存XML文档到磁盘。然而当该用户使用IE浏览器打开先前保存在磁盘上的那个XML文件时,会发现IE浏览器提示有非法字符存在。出现这个问题的根本原因在于,UTF-8和ANSI两种字符编码在表示中文字符时的不同所导致的。所以在为XML文档选择了特定字符编码的同时,也要确保选择了正确的编码方式来保存XML文档。,standalone属性,XML文档可能: 存储在数据库中 由CGI程序在内存中瞬间创建的 由几个相互嵌套的
9、不同文件组合而成 不存在于自身的文件中 但是如果把一个XML文档看作一个文件也是可以的,只要记住它可能并不是存在于硬盘上的真实文件。,standalone属性值的含义,如果由一个实体构成的简单的XML文档,并且文档中只包含文本数据,不包含诸如图片小程序一类的二进制数据,能够完全独立被理解而无需读取其他文件,那么就说这个XML文档是独立存在的。这种文档通常在它的XML声明中含有一个值为yes的standalone属性设置。如果XML文档不是独立存在的,还需要访问其他外部实体时,在XML文档声明就可以含有一个值为no的standalone属性设置。,2.3.2 文档类型声明,文档类型声明指定了文档
10、使用的DTD(Data Type Definition),即文档类型定义。文档类型声明是XML文档序言的一部分,处在XML声明之后和文档根元素之前。它可能包括文档类型定义或是标识文档类型定义所在文档的URL。有些情况下文档类型定义有内外两个子集,则文档类型声明可能同时包括以上两种情况。,文档类型声明的的基本语法,声明中“”分别标记文档类型声明部分的开始和结束, “!DOCTYPE”要求所有字符之间没有空格,且英文字母必须全部大写的。“”和“”分别标记在XML文档内部的DTD子集的开始和结束。除了用于界定作用的标记以外,文档类型声明还包括了以下三个部分: 根元素名 外部DTD URI 内部DTD
11、子集,根元素名,此部分在文档类型声明中是必须的,其内容通常就是文档类型声明所在的XML文档的根元素名,并且要求与根元素名称保持严格的一致。,外部DTD URI,这部分是可选的。当XML文档需要引用外部DTD文件时,在文档类型声明中需要包含此部分告知XML分析程序DTD文件的存储位置。其具体形式有两种: SYSTEM “文件系统路径或网络URL” PUBLIC “公共DTD名称” “文件系统路径或网络URL”,SYSTEM “文件系统路径或网络URL”,其中关键词SYSTEM是为单个作者或小组所用的私有的DTD使用的,即以此形式引用的DTD文件是在一个很小的范围内使用的,通常是供学习和测试之用的
12、。 在关键词SYSTEM之后双引号包括的部分表示DTD文件的具体存储位置,可以是在本地文件系统中的绝对地址或相对地址,也可以是web站点上的URL地址。 书写时,应注意关键词SYSTEM要求全部是大写字母,而DTD文件路径要求包括在双引号之间。,PUBLIC “公共DTD名称” “文件系统路径或网络URL”,XML标准的设计目标是令覆盖整个产业的广泛组织(如ISO或IEEE)能够将公共DTD加以标准化,以便用于各自的专门领域。这样的标准化可以让人们不用为同一项目重复作标记,并且使用户共享公用文档更容易。 编写者在引用某个组织创建的公共DTD时,需使用PUBLIC关键词而不是SYSTEM关键词。
13、为了避免多个DTD文件之间发生标记重复的冲突,每个标准化的DTD都会有一个公共DTD名称,其定义有一定的规则可以遵循。,公共DTD名称定义规则,如果一项DTD是ISO标准,它的名称要以字符串“ISO”开始。如果是非ISO标准组织批准的DTD,它的名称以加号(+)开始。如果不是标准组织批准的DTD,它的名称以连字符 (-)开始。这些开始字符串后接双斜线(/) 和DTD所有者的名字,其后接另一个双斜线和DTD描述的文档类型标识,然后又是一个双斜线后接ISO639语言标识符,如EN表示英语。 下面是引用一个W3C组织的名为XHTML 1.0 Transitional的DTD的例子: PUBLIC “
14、-/W3C/DTD XHTML 1.0 Transitional/EN” /TR/xhtml1/DTD/xhtml1-transitional.dtd,内部DTD子集,这部分也是可选的,内部DTD子集就是一些声明语句的集合。如果用户编辑XML文档时,需要对其有效性进行检查,那么就需要使用DTD。如果在XML文档中已经引入了外部DTD,且外部DTD已能保证XML文档的有效性要求,就没有必要再添加内部DTD子集了,但是如果外部DTD的限定并不完全或者需要自行定义实体,那么就需要在内部DTD子集部分添加相关内容的声明。 不过,用户完全可以将外部DTD文件的所有内容都罗
15、列于内部DTD子集部分中,这样就不需要引入外部DTD文件了,但是这种方法在实际应用中不推荐,只适合在学习过程中使用。不管内部DTD子集还是外部DTD文件,它们都是规定元素清单、属性、标记、文档中的实体及其相互关系的。 所以,内部DTD子集包括了元素、属性、实体以及相互间的关系限定等方面的一些声明,这些声明的具体形式请参考后续相关章节中的介绍。,2.4 XML 元素,2.4.1 语法, 元素类型及语法形式,XML文档元素具有两种形式: 非空元素 内容 注意:XML元素的开始标签名与结束标签名应该保持严格的一致。如果是采用英文命名,那么组成标签名的字符串字符大小写要保持完全相同。 空
16、元素 空元素与非空元素最大的不同就是没有内容及结束标签部分。空元素所仅有的部分和非空元素的开始标签非常类似,只不过标签的结束部分是由“/”和“”组成。, 标签命名规则,标签名必须以字母或下划线“_”开始,名称中后续字符可以包含字母、数字、下划线、连字符和句号。其中不能含有空格(经常用下划线替代空格)。,不推荐在标签名中使用冒号,虽然冒号出现在标签名中从语法上讲是合法的,但是它们被保留用于名字空间。 由于XML标准是依据Unicode制定的,XML文档理论上应能使用世界上的任何一种语言,所以标签名也可以使用除英文字母之外的其他语言字符,比如简体中文,日文等。但是实际应用中为了XML
17、文档的通用性,一般不采用英文字母之外的文字符号来命名标签。, 标签、标记与元素比较,首先,标签不是元素,元素也不是标签。元素是由开始标签、结束标签以及包含其间的一些内容共同构成。标签是标记一个元素的开始或结束的符号标识。也许读者会说:空元素看起来不就是个标签吗?实际上前面介绍的空元素语法形式是一个简化版本,其完整的形式为:。由此可以看出其实空元素就是元素内容为空的一种特例情况。 其次,标记不象标签和元素,在XML文档中有具体的形式和对应物。标记不是一个XML标准中特定的语法对象或概念,它是XML中对各对象的一种统称。总之,在XML文档中标记可以指标签、注释、XML声明、文档类型声
18、明、CDATA段以及命令处理等。,2.4.2 属性,属性,属性是包含在非空元素的开始标签或空元素中的由“=”连接的名-值对。, 属性名,属性名是字符串,遵循与标签名同样的命名规则。 同一个标签中不能有两个同名的属性。 -错误 属性名是区分大小写的。 -允许,但是不推荐, 属性值,属性值也是字符串。 与属性名不同,对属性值包含的内容没有任何限制。属性值可以包含空格,可以以一个数字或任何标点符号开头。 XML属性值应包含于引号(双引号或单引号)中。与HTML属性不同,XML属性值必须加引号。大多数情况下是使用双引号,但是如果属性值本身含有双引号,就需要使用单引号。 如果
19、属性值中既包含双引号又包含单引号,那么属性值中的引号必须用合适的实体引用代替。可以使用” 上面属性value的值实际是:The diner said,”Waiter, Theres a fly in my soup!”, 属性与元素,如例2-2所示,使用属性和子元素的方式来记录数据都可行,那么是否在任意情况下属性与子元素之间可以互换使用呢?理论上可以的,但在实际应用中是不可取的。何时使用子元素或属性没有严格的规则可循,通常要看哪一种更适合自己应用的需要。一种经验规则是:如果是数据本身应当存储在元素中;如果是有关数据的信息(元数据,metadata)应当存储在属性中;在不确定时,就
20、把信息放在元素中。 数据和元数据分别指的是什么呢?它们之间怎么区分呢?首先,确定是否会有一些用户希望看到一条特别的信息(即数据,用户直接需求的信息)。如果答案是肯定的,那么该信息应当包含在一个子元素中。相反,那些用户不感兴趣,且与数据本身有关联的信息,即元数据,则应包含在一个属性中。如果从该文档中删除所有标记与属性,文档的基本信息应当还存在。属性是放置ID号、URL、参考资料及其他与读者不直接相关的信息的好地方。,2.4.3 名字空间,使用名字空间的目的,前面已经介绍过XML是一种元标记语言,任何领域的用户都可以通过XML标准定义满足各自领域需求的应用标签集合。每一个应用标签集合中的标签都有唯
21、一的名称,不会与其他标签之间出现名称冲突的问题。但是多个标签集合的混合使用,由于多个标签集合是由不同的人或组织设计的,且为具有相似用途的标签编制名称时,人们很容易想到相同的词汇,这就不能避免出现标签名称冲突的问题。, 名字空间声明,名字空间声明有两种形式: 有前缀名字空间 无前缀名字空间,有前缀名字空间声明,名字空间声明其实就是元素的一个属性,其中“xmlns:前缀名”是属性名,而URI是属性值。URI就是标识名字空间的名称,在有前缀名字空间声明中URI值不能为空;而prefix_name给出名字空间前缀的名称,该前缀用来将XML文档元素与属性的名字与URI关联在一起。,有前缀名
22、字空间声明示例:, 该名字空间名称为/people,因为URI可以包含一些XML名称中不允许的字符,而且太长,所以需要一个简短的名字空间前缀,在上面例子中,即是people,它与名字空间名称/people相关联。从而就可以使用前缀people来标识XML文档中的某个元素或属性是属于名字空间/people中的。例如:是由名字空间前缀和本地标签名通过“:”分隔而构成的一个限定名(qualified name),它表示标签title是存在于名字空间前缀people所关联
23、的名字空间中的一个标签。 名字空间前缀可以是不包含“:”,除了XML有保留用途的xml和xmlns以外的任何合法的XML名称。,无前缀名字空间声明,这种声明形式中没有给出名字空间的前缀名,URI所标识的是默认的名字空间。在无前缀名字空间声明中,URI可以为空。例如: 表示声明了一个无前缀的名字空间,books元素及其所有没有前缀的元素都属于/book所标识的名字空间,所以该名字空间也被称为默认名字空/people间。 注意:在名字空间声明中,URI只是形式上的标识符,其唯一的目的是提供一个唯一的名字,并不需
24、要指向一个有效的内容,在URI所标识的位置上,可以不存在任何东西。, 名字空间在元素中的使用,具有二义性标签的示例:,例2-4解决了前面示例的标签二义性,在一个元素中可以包括多个名字空间声明作为其属性,如例2-5所示。 在名字空间声明中,重要的是URI而不是名字空间前缀。前缀可以任意改变,只要URI不变,那么文档的含义就不会发生变化。如例2-6使用前缀p和b代替people和book,但是该文档和例2-5的效果是相同的。 提示:名字空间声明不一定非要放在XML文档根元素上,可以根据实际需要在任何元素上声明名字空间,只是名字空间的作用域有所变化而已。,例2-5:,例2-6:,在例2
25、-5和例2-6中具有一个相同的特点,就是包括了太多的名字空间前缀book和b,这给用户编写XML文档需要为处于名字空间/book中的所有元素添加前缀,这是件非常繁琐的事情。 为了避免这种问题的出现,可以使用前面介绍的无前缀的名字空间来解决这一问题,将默认名字空间附加给元素及其子元素,元素本身及其子元素都被视为是在默认的名字空间中,除非他们有明确的名字空间前缀。如例2-7所示。 例2-7中元素books本身没有名字空间前缀和它的内容中所有没有名字空间前缀的元素都属于默认名字空间/book,而author元素的
26、子元素name和title则属于名字空间/people。如果元素books有名字空间前缀,则元素books不属于默认名字空间,而它的内容中包含的没有名字空间前缀的元素仍属于默认名字空间中。,例2-7:,默认名字空间声明中的URI设为空字符串,那么在它声明的范围内,没有名字空间前缀的元素将被视为不存在于任何名字空间中。如例2-8与例2-4中没有定义默认名字空间的效果相同。,例2-8:, 名字空间在属性中的使用,由于属性是属于某个元素的,可以很容易把一个属性与其他元素中的同名属性区分开来,所以为属性添加名字空间不如给元素添加名字空间那么重要
27、。但是如果有必要,仍然可以给属性添加名字空间。如例2-9中,指定author元素的属性id_card存在于名字空间/people中。 注意:如果想使一个属性存在于某个名字空间中,必须给属性加上名字空间前缀,没有前缀的属性不存在于任何名字空间中(包括默认名字空间)。即使拥有属性的元素在某个名字空间中,没有前缀的属性仍然不在该名字空间或任何其他名字空间中。,例2-9:,在XML文档中,没有任何一个标签可以包含两个相同的属性。所谓相同有两种情况:一种是属性的名字完全相同;另一种是属性限定名中的本地部分完全相同,而不同的前缀绑定到相同的名字空间。下面使用例2
28、-10与例2-11共同说明名字空间在属性中的使用应注意的问题。,例2-10:,例2-11:,2.4.4 空白字符,在编辑XML文档时,用户经常使用空白字符(空格、制表符和空行)来分隔标签,以获得较好的可读性。然而,在最终交付的XML文档中,这些空白字符可能就不需要了,但有时,又需要保留这些空白字符,例如,诗歌或程序代码中的空白。 XML标准规定XML分析程序应总是将文档中不是标签的所有字符都传递给应用程序,而一个进行有效性检查的XML分析程序会通知应用程序这些字符中,哪些是出现在XML元素内容中的空白。,对于XML分析程序来说,下面三个XML文档是各不相同的。,XML分析程序分析文档1时,将给
29、出以下几个文本部分:,XML分析程序分析文档2时,将给出以下几个文本部分:,保留还是忽略空白?,在XML文档中,可以在元素中使用一个特殊的属性xml:space,来通知应用程序保留该元素中的空白。在有效的XML文档中,这个属性和其他属性一样,在使用时必须声明。xml:space属性必须被声明为枚举类型(Enumerated),其属性值必须是“default”和“preserve”两种之一,也可以两者都取。例如: “default”表示对于此元素使用应用程序的默认空白处理模式,“preserve”指示应用程序保留所有的空白。如果一个元素使用了xml:space属性,该属性将适用于该元素内容中的所
30、有元素,除非被另一个xml:space属性的实例覆盖。,空白的默认处理,大部分XML应用程序在显示和处理XML文档时,对空白的默认处理方式就是忽略掉所有无意义的空白字符。例如对前面介绍的三个文档分别使用IE浏览器显示,所得到显示结果都是一样的。,现在分别对上面介绍的文档1和文档2,在元素document的开始标签中设置属性xml:space=“preserve”,然后通过IE浏览器打开文档,分别得到如下图中的效果。 通过图中可以了解,IE在分析明确指出要保留空白字符的XML文档时,各标签之间的空白字符都得以保存了下来,但是对于data元素内部的文本数据中的空白都被忽略。如果要保留元素内部的文本
31、数据中空白字符需要使用后面将要介绍的CDATA段。,2.4.5 XML文档树,XML文档中的元素以图形方式可以表示成为一个由上到下的树状结构。最外层的元素,就像一棵树的根,向下扩展分支到更小一级的元素,而这些更小的元素又以根元素类似的方式向下延伸直到最内层的文本内容,最终构成一棵倒挂的XML文档树。,XML文档树节点的家谱关系,2.5 实体,实体,实体是XML中可以被替换的占位符号。用户可以在文档序言或者DTD文档中声明实体,然后在XML文档中多次引用实体。不同类型的实体有不同的用途。比如,使用字符实体来替代那些难于或不可能键入的符号;使用外部实体引入存在于XML文档之外的内容;使用用户自定义
32、的一般实体来避免一遍一遍的输入重复的内容。,实体的使用,实体由名字和替换值组成。XML分析程序开始处理一个文档时,首先将读取一系列声明,其中一些可能定义了由一个名字和替换值关联的实体。替换值可以是从一个单独字符到一个XML标记文件的任何东西。当分析程序扫描XML文档时,将会碰到实体引用,是由实体名字衍生而来的特殊标识。分析程序会参考内存中的一个信息表的内容来替换文档中的实体引用。一个实体引用的替换值中如果还包含其他实体引用,那么该实体引用也将被替换,直到所有实体引用都被替换。 实体引用是由“&”符号紧接实体名字,最后以“;”符号而构成的,符号间没有任何空白。 所有实体在XML文档内被使用之前都
33、需要声明。对于本地实体可以把实体声明放在内部子集中;而对于需要在多个文档间共享的实体可以将其声明放在外部DTD文档中。如果XML分析程序执行过程中碰到了实体引用,但是该实体既没有被显式也没有被隐式的声明,那么XML分析程序就不能为该实体进行文本替换。这是一种影响XML文档形式良好性的错误。,2.5.1 字符实体, 预定义字符实体,在XML文档的文本数据中有些符号是不能够被直接包含的,因为将这些字符包含于文本数据中会和XML标准中规定的一些特定标记界定符互相冲突。例如,尖括号“”被用于界定元素的标签。,例2-12:, 数值引用,XML标准支持Unicode字符集,该字
34、符集是一个由好几万个不同的符号、字母及表意符号组成。在XML文档中应该能够使用任意的Unicode编码的字符,然而要使用只具有100多个按键的键盘输入这些符号是非常困难的一件事情。XML提供了一种使用编号字符引用的方式来解决这一问题。编号字符引用就是采用在Unicode字符集中为每个独特字符设定的编号来输入这些字符。 数值引用是将以十进制或十六进制表示的字符编号作为实体名字。其引用方式与预定义字符实体的引用方式稍有不同,采用十进制表示编号的引用方式如下所示:,而采用十六进制表示编号的引用方式如下所示:,例2-13:,2.5.2 混合内容实体,混合内容实体,实体的替换值不仅仅只限为单个字符,而更
35、一般的混合内容实体可以包含不限长度,且可以包含标记内容。混合内容实体可以分成两类:内部实体和外部实体。对于内部实体的替换值是定义在实体声明中;而对于外部实体的替换值是处于另外的一个文件里。, 内部实体,内部混合内容实体通常用于需要反复多次使用的短语、名称和模板型文本等进行替换。相对于输入一大段文本而言,在编写XML文档时使用实体引用更容易,并且可使文档具有良好的扩展性和维护性。,例2-14:,内部实体使用注意事项-1,当在实体声明的替换值中包含了标签时,一定不要使用前面介绍的预定义字符实体来表示标签的界定符“”。由于处于实体声明的替换值中的标签是包含于引号中的,XML分析程序只将
36、其视为简单文本,而不是有界定作用的XML标签。 下面的实体声明是正确的声明方法: 寰宇影业公司 而下面的实体声明就不能实现用户的真实目的,而且会破坏XML文档的形式良好性。 ,内部实体使用注意事项-2,如果用户定义的实体替换值中本身包含了双引号,那么该双引号会与实体声明中包含替换值的具有界定功能的双引号发生冲突,这时就需要使用预定义字符实体引用“ 注意:实体替换值中可以包含其他实体引用,只要这些实体在被引用前已经声明。但是不要将一个实体引用包含于其自身的实体声明中,或者和其他实体形成循环引用模式,这样会使分析程序陷入死循环。虽然有些XML分析程序能够解释该循环引用,但是这是错误使用方法。,2.
37、5.2.2 外部实体,有时用户需要创建实体替换大容量的混合内容,然而将这样的混合内容置于实体声明之中是不现实的。因此,用户需要使用外部实体将需要替换的大容量混合内容放在XML文档之外的一个文件中。外部实体适合导入那些很多文档共享的内容,以及需要频繁更改的内容等。外部实体也能够将一个非常大的文档分解成更小的部分,以便协同编辑以及获得更好的网络传输性能。 外部实体非常有效的将一个文档分解成多个不同的物理部分,但是最终XML分析程序还是需要将这些不同部分组装成一个完美的整体。这就要求一个XML文档被分解的不同部分都必须遵循形式良好的规则,且这些物理部分不会影响文档的整体含义,以便XML分析程序能将这
38、些部分组合成一个具有正确标记要求的逻辑文档。,外部实体声明,通常情况下,使用上面这种外部实体声明方式就可以满足要求了。其中SYSTEM是XML关键字,是固定部分。其后面跟随的由双引号包含URI可以是本地文件系统的文件路径或者是互联网资源连接符URL。但是这种方式存在一个问题,即如果引用的外部文件的位置发生改变,那么就会出现坏链,导致不能正确找到对应文件。为了解决这个问题,遂有下面这种形式的外部实体声明方式:,为了这种声明形式有效,并能解决前一种方式存在的问题,必须要求XML分析程序能够明白如何使用公共标识。具体的做法可以是在互联网中的某个地方维护一个保存公共标识与URI对应关系的数据表,当URI发生变化,该数据表就实时更改表中对应该URI的记录。这样就能解决当需要替换的文件位置变化后出现坏链的问题。,例2-15:,xml-commnet.txt,xml-body1.txt,xml-body2.txt,运行结果,在保证以上文件都在同一个目录的情况下,用IE显示例2-15。,2.5.3 不可解析实体,前面所介绍的各种类型实体都是可解析实体,而最后在本章中讨论的这类实体即为不可解析实体。不可解析实体所包括的内容不同于文本或XML标记内容,通常是XML分析程序不能解析的二进制文件,例如,图形、声音等非字符型数据。在XML文档中唯一可以出现不可解析实体的地方就是属性值中,且在XML文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 土方机械装配调试工标准化知识考核试卷含答案
- 防水卷材制造工诚信品质测试考核试卷含答案
- 海水淡化工操作评估竞赛考核试卷含答案
- 甲壳类繁育工诚信品质竞赛考核试卷含答案
- 粮油保管员班组管理考核试卷含答案
- 液化气体生产工成果评优考核试卷含答案
- 油气管道维护工安全理论竞赛考核试卷含答案
- 搅拌工班组管理强化考核试卷含答案
- 皮革及皮革制品加工工安全管理水平考核试卷含答案
- 井下充填制备工安全培训效果竞赛考核试卷含答案
- 内分泌科糖尿病足管理指南
- 2026年江西枫林涉外经贸职业学院单招综合素质考试题库及答案详解一套
- 西藏吊桥施工方案(3篇)
- 2025中智信通第三批社会招聘(公共基础知识)综合能力测试题附答案解析
- 全国人大机关直属事业单位2026年度公开招聘工作人员备考题库附答案解析
- GB/T 46469-2025皮革物理和机械试验抗张强度和伸长率的测定
- 快递员外包合同范本
- 工程居间费合同范本
- 2025年10月自考02324离散数学试题及答案
- 2025中国未来交通产业发展全景图及趋势研究报告
- 合伙饭店协议书模板
评论
0/150
提交评论