XML开发技术——第一章
可能你还不了解XML,只是听说课水分高就报了(我也是),那就跟着我的笔记,来一起了解XML吧!
本系列笔记适合读过课本后过来进行总结,所以还是要先预习啊(双关)
注:这系列的笔记将多采用Q E C形式,即 Question Evidence Conclusion 的形式
XML基础知识
1.1 XML及其相关技术概述
Q1:什么是XML?
C1:XML(eXtensible Markup Language),即可扩展性标记语言,是标记语言中的一种。
Q2:什么是标记?
C2:标记是指计算机所能理解的信息符号,通过标记,计算机之间可以相互表示包含各种信息的文档。
1.1.1 XML的发展史
Q3:标记语言(ML)的发展过程是什么?
C3:
- SGML,它是XML的前身,由三部分构成,即语法定义、文件类型定义DTD和文件实例。但由于它过于庞大复杂,难以理解学习,真正大行其道的是其子集,如HTML和XML。
- HTML,它是SGML的一种实际应用,其DTD作为标准被固定下来。因此,HTML的功能单一,只能用于编写网页。
- XML,它是一套使用上规则严谨,但是语法简单的信息描述语言。它的目的是以一种更中立的方式,让用户自行决定要如何理解、呈现从服务端所提供的信息,而着重表示数据以及数据之间的联系。
1.1.2 XML的特点
Q4:XML的特点主要包含什么?
C4:主要包含四个方面:
- 可扩展性:XML允许使用者创建和使用他们自己的标记,而不是HTML的有限词汇表。
- 灵活性:XML提供了一种结构化的数据表示方式,使得用户界面分离于结构化数据,使得Web用户所追求的许多先进功能在XML环境下更容易实现。
- 自描述性:XML文档通常包含一个文档类型声明,不仅人能读懂,计算机也能处理,XML表示数据的方式真正做到了独立于应用系统,并且数据能够重用。
示例文档
- 简洁性:XML比完整的SGML简单得多,易学、易用并且以实现。
XML文档包含三个不同的组成部分:
数据内容:即文档本身(对应XML)
结构:文档类型及其元素的组织形式,文档包括何种类型的元素,以及他们的排列次序(对应DTD/SCHEMA)
- 表现形式:在一张纸上、浏览器屏幕上向读者描述数据的方法,还有对每种元素类型使用何种字体等。(对应XSL/CSS)
1.1.3 XML的实际应用
XML 成为一种与平台无关的、数据表示和数据交换的载体。
1.2 XML规范及XML文档分类
XML文档实际上是一个文本文件,但并不是任何文本文件都是正确的XML文档,W3C的XML1.0规范对XML文档的语法格式进行了严格的定义。
1.2.1 XML文档中的XML声明
Q5:声明有哪些特点和注意事项?
E5:
1 |
C5:
XML声明部分本身是可选的(可以没有声明)。但如果包含声明部分,必须是整个XML文档的第一行内容(第一行不能为注释或空行)。<?xml要顶格,且中间无空格。
完整的 XML 声明包括三个部分:
(1) 版本声明 (version)通常情况下为1.0,在声明中是必须的,并且必须为作为第一个属性出现。
(2) 编码声明 (encoding)该属性的取值用于指明当前XML文档中所使用的符号的编码方式。一般采用”UTF-8”,这个属性是可选的(默认为UTF-8)。
注:这个编码方式与XML在文档在系统中保存时使用的编码方式没有直接关系。
(3) 文档独立性声明 (standalone)该属性的取值表明当前XML文件是否独立使用、还是与其他标记文件配套使用。若为“yes”,则解析当前XML文档时无需其他的外部标记声明文件。若为”no“,则可能需要使用外部的标记声明文件。这个属性是可选的。
示例中,no的原因是因为该文档引用了外部1.ent中定义的实体: 
而如果存在外部标记声明,且没有standalone声明,则解析器将认为standalone的值为no
如果有encoding 属性和standalone属性,那么encoding属性必须放standalone属性前面。
1.2.2 处理指令和注释
Q6:什么是处理指令?
E6:
1 |
C6:处理指令是表示将XML文档用于特殊的应用程序时表示需要执行的特定操作,而XML解析器不会执行特定的操作。
语法格式:<? target-name data ?>
其中,<?和?>表示处理指令的开始与结束;target-name表示该处理指令的名称,data部分描述该指令的具体内容。E6的含义为:当XSL的执行引擎碰到这个处理指令时,将会根据href的取值获得指定的xsl文件,并对输入的xml文档进行相应的转换。
Q7:注释的注意事项是什么?
C7:语法格式 <!--......-->
,与HTML一致。
在注释的内容中,不应该出现两个连续的横线。
注释不应该出现在元素的标记中,注释之中不应该嵌套注释。
1.2.3 XML文档中的元素和属性
Q8:什么是元素?
E8:
1 | <element_name att1="val1" att2="val2"> |
C8:元素是最基本的组成单元,在元素的开始标记中还可以包含相关的属性。元素中可以包含文本、子元素、或者两者的组合。可以存在空元素,即不包含任何内容的元素,但它可以包含属性:
1 | <details></details> |
一个元素可以包含任意多个子元素,可以包含多个同名的子元素;子元素的顺序非常重要。
Q9:什么是属性?
E9:
1 | <author firstname="Tom" lastname="hanks"></author> |
C9:属性不能独立于元素而存在,通常以名-值对的形式出现,用于描述当前元素的某个方面的特征。
属性的取值必须加上引号(单引号或者双引号)
元素在其开始标记中可以包含任意多个属性,但不能包含同名的属性。
对于一个元素所有的属性,它们不分先后顺序,因为它们之间可以通过名称相互区别。
Q10:如何命名元素和属性?
E10:
1 | <example-one/> <_example2/> <:Example.Three/> <!--这些标记名称都是正确的--> |
C10:
- 名称的开头必须以字母、下划线或者冒号开头。
- 除开头之外的其他部分可以是字母、数字、横线(-)、下划线、点号(.)、冒号的任意组合。
- 元素名称分大小写。
- 元素和属性的名称长度没有限制。
- 可以使用非英文的元素名。
Q11:如何选择子元素和属性的使用?
C11:
- 对于简单的标量数据(无结构的数据),可以采用属性,否则应该采用子元素。
- 对于可能在数目上发生变化的特性,应该使用子元素,比如某本书籍可能有多个作者。
1.2.4 XML文档中的文本内容和CDATA段
在文本内容中,一些符号会产生歧义,使得解析器不能正确辨识。比如
1 | <lessthan>one<two</lessthan> <!--文本中的小于号产生了歧义--> |
XML 1.0 规范中定义了五种预定义实体:而除此以外的的其他实体,必须在使用前进行声明。
1 | <lessthan>one ⁢two</lessthan> |
注:预定义实体以&表示实体的开始,最后有一个分号表示实体的结束,容易遗漏,特别注意
Q12:什么是CDATA段?
E12:
1 | <customer> |
C12: 假设XML文档的某块文本内容中包含大量的特殊字符,那么可以将整个文本块的内容放入到一个CDATA段中
即:<![CDATA[]]>
使用 CDATA 段,可以告诉解析器不要试图从该文本块中查找 XML 标记,它仅仅就是文本内容,从而避免了歧义的产生,因此可以使用非法字符。
同理,CDATA段的文本内容中不能直接出现]]>,并且CDATA段不应该嵌套使用。(与注释类似)
Q13:什么是空白字符?
C13:XML文档中的空白字符包括空格、回车、换行、制表等四种符号。
注:在缺省的情况下,对于连续出现的空白字符,解析器会将其缩减为一个空格字符。如果准备显示标记包含的全部空格,在编辑xml文件时将输入法换成“中文”输入法,并选择“全角状态”来编辑空格字符。
1.2.5 XML文档的良构性规则
Q14:良构的XML文档要满足什么要求?
C14:
- 开始标记必须与结束标记相对应。
- 标记是大小写敏感的。
- 标记必须正确的嵌套。
1 | <book><author>tom hanks</book></author> <!--这是错误的--> |
- 属性值必须使用引号括起来:
1 | <details about=Location/> <!--不加引号是错误的,可加单引号或双引号--> |
- 有且只有一个根元素。
1 | <author>tom hanks</author> |
1.2.6 XML文档的分类
XML 既可以是面向数据(Data Centric)的,又可以是面向文档(Document Centric)的。
面向数据的文档主要利用 XML 来传送应用数据,这些文档包括销售订单(参见 data-centric.xml)、病人记录和科学数据等。
面向数据的 XML 文档的物理结构,如元素的顺序、或者数据被存储为属性还是子元素,通常不是很重要。它们的特征是高度有序的结构,并且同时带有那些数据结构的多个项目,类似于关系数据库系统中的多条记录。
面向文档的 XML 文件几乎没有结构,元素结构粗糙。面向文档的文档是利用 XML 来获取自然(人类)语言的那些文档,如留言信息(参见 doc-centric.xml)、用户手册。
它们以复杂或无规则的结构和混合内容为特征,而且文档的物理结构非常重要。这些文档的处理侧重于给用户提供信息的最终表示,因此它们也被称作面向表示的文档。
1.3 命名空间
Q15:什么是命名空间?
C15:命名空间 (namespace) 主要是通过某种形式来表示标识符 (identifier) 的上下文,可以将逻辑上相关的标识符组织成相应的命名空间,可使整个系统更加模块化。
1.3.2 XML中命名空间的声明和使用
Q16:如何声明命名空间?
E16:
1 | <myns:element xmlns:myns="http://www.myns.com"> |
C16:声明XML命名空间的语法为:xmlns:prefix-name=”URI”。其中,xmlns是XML的保留属性,用来声明命名空间。命名空间的前缀名称是以字母或下划线(_)开头的、不包含空白字符和冒号(:)的字符串,通常规定不应该使用 XML 中的保留字,比如 xml、xsl 等等。
对于例子,myns:element表示element元素属于myns这个命名空间,而myns只是命名空间的简称,后面的语句才是命名空间的声明,表示myns命名空间的全程为字符串”http://www.myns.com"。
Q17:为什么不建议用简短的字符串作为命名空间的全称?
C17:为了减少不同命名空间标识符冲突的可能性。
Q18:怎样使用缺省命名空间?
E18:
1 |
|
C18:由例子:根元素company的开始标记中声明了一个无前缀名的命名空间,它的作用范围为整个XML文档。因此在该文档中,任何没有显示地指定命名空间的元素和属性(即除了disivion命名空间下的其他),都属于这个缺省的无名命名空间。
教学要求:能较系统地了解XML及其相关技术概述,XML在各个领域方面的应用,XML规范及XML文档分类,命名空间,XML数据模型规范等;
1.4 XML文档的数据模型规范
以下片段都将转化为<a b='upcase'> Hello! </a>
1 | <a b='upcase'> <[CDATA[Hello!]]> </a> |
结
XML第一章的内容都属于基础,比较简单,多考于选择题,因此需要广覆盖知识点,不要在这里失分。