XML基础教程(第2版)_第2章_规范的XML文件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.3.2 非空标记_1. 语法格式
非空标记必须由“开始标签”与“结束标签”构成,它们之 间是该标记的内容。 开始标签以“<”标识开始,用“>”标识结束,标识之间 是标记的名称和属性列表开始标签的语法格式分别为: <标记的名称 属性列表 > 或 <标记名称> 注意:在标识“<”和标记名称 之间不要含有空格,允许“>” 的前面可以有空格或回行。
2.2.1 version属性 一个简单的XML声明中可以只包含属性version,目 前该属性的只可以值可以取1.0,指出该XML文件使用 的XML版本。
2.2.2 encoding属性
encoding属性规定XML文件采用哪种字符集进行编码,该属性 的默认值是“UTF-8” . <?xml version="1.0" encoding="UTF-8" ?> 注: encoding属性值不同, XML文件保存时的编码要与之对应。 1. 如果XML使用UTF-8编码,那么标记的名字以及标记包含文本 内容中就可以使用汉字、日文、英文等,XML解析器就会识别 标记的名字并正确解析标记中的文本内容。这时XML文件必须 选择“UTF-8”编码来保存 。 2. 如果在编写XML文件时只准备使用ASCII字符和汉字, 可以 将encoding属性的值设置为“gb2312”。例:
►
GBK字符集编码
GBK 编码是GB2312编码的超集,向下完全兼容GB2312,同时GBK收 录了Unicode基本多文种平面中的所有CJK汉字。同 GB2312一样,GBK 也支持希腊字母、日文假名字母、俄语字母等字符,但不支持韩语中的 表音字符(非汉字字符)。GBK还收录了GB2312不包含的 汉字部首符 号、竖排标点符号等字符。 GBK的整体编码范围是为0x8140-0xFEFE,不包括低字节是0×7F的组 合。高字节范围是0×81-0xFE,低字节范围是0x40-7E和0x80-0xFE。
<?xml version=“1.0” ?> 如果一个XML文件省略XML声明,各种XML解析器 将默认该XML文件是有XML声明的,而且XML声明是: <?xml version="1.0" encoding="UTF-8" ?>
注:W3C在XML规范中建议每个XML文件都显示地写 有XML声明。
结束标签以"</"标识开始,用">"标识结束,之间是标记的名 称。 "</"和标记名称之间不要含有空格,允许">"的前面可以有空 格或回行。 正确的空标记:
<name> 李云龙 </name >
错误的空标记:× < name> 李云龙 </name >
2.3.2 非空标记_2.非空标记的内容
例子1说明标记内容中的文本数据和子标记,为了叙述方便, 用符号“□”表示编辑操作所输入的空格、“¶ ”代表编辑操作 所输入的回行符。 <?xml version="1.0" encoding="UTF-8" ?> <student>¶ <name> ¶ □□□□□□张大山¶ □□□□□□<grade> ¶ □□□□□□□□□一年级¶ □□□□□□</grade> ¶ □□</name> ¶ </student>
Java应用程序,输出的“你” 的UTF-8编码
class InputUTF_8 { public static void main(String args[]) { String s1="你",s2="α"; try{ byte b[]=s1.getBytes("UTF-8"); System.out.print("汉字\'你\'的UTF-8编码: "); for(int k=0;k<b.length;k++) { String str=Integer.toBinaryString(b[k]); str=str.substring(str.length()-8); System.out.print(" "+str ); } } catch(Exception e){} }
《XML基础教程(第2版)》
第2章 规范的XML文件
第2章 规范的XML文件
本章主要内容
§2.1 规范性
符合W3C制定的基本语法规则的XML文件称为规范的XML 文件。 规范的XML文件如果再符合额外的一些约束就称为有效 的XML文件。
§2.2 XML 声明
规范的XML文件应当以XML声明作为文件的 第一行,在其前面不能有空白、其他的处理指令 或注释。 XML声明以 “<?xml” 标识开始、 以“?>” 标识结束。以下是一个最基本的XML声明:
GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双 字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文 字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。
GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8 UTF8--Unicode--GBK、GB2312 对于一个网站、论坛来说,如果英文字符较多,则建议使用UTF-8节省 空间。不过现在很多论坛的插件一般只支持GBK。
低字节是0x40-0x7E的GBK字符有一定特殊性,因为这些字符占用了 ASCII码的位置,这样会给一些系统带来麻烦。
有些系统中用0x40-0x7E中的字符(如“|”)做特殊符号,在定位这些 符号时又没有判断这些符号是不是属于某个 GBK字符的低字节,这样就 会造成错误判断。在支持GB2312的环境下就不存在这个问题。需要注意 的是支持GBK的环境中小于0x80的某个字节未必就 是ASCII符号;另外 就是最好选用小于0×40的ASCII符号做一些特殊符号,这样就可以快速 定位,且不用担心是某个汉字的另一半。Big5编码中也 存在相应问题。 CP936和GBK的有些许差别,绝大多数情况下可以把CP936当作GBK的 别名。
►Байду номын сангаас
UTF-8字符集编码
Unicode Transformation Format-8bit,是用以解决国际上字符的一种 多字节编码,它对英文使用8位(即一个字节),中文使用24为(三 个 字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编 码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器 上显 示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文, 他们无需下载IE的中文语言支持包。
2.3.2 非空标记_3.作用
非空标记包含的内容中既可以有文本数据也可以有子标记. 当需要用“整体-部分”关系来描述数据时,就可以使用非 空标记,XML文件中的可以有如下结构的标记: <学生> <姓名>张三</姓名> <学号>A1001</学号> </学生> 当需要使用文本来描述一个数据时,也需要使用非空标记
►
GB2312字符集编码
GB2312是基于区位码设计的,区位码把编码表分为94个区,每个区对 应94个位,每个字符的区号和位号组合起来就是该汉字的区位码。区位 码一般 用10进制数来表示,如1601就表示16区1位,对应的字符是 “啊”。在区位码的区号和位号上分别加上0xA0就得到了GB2312编码。 GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名 及片假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生 僻字。可以用繁体汉字测试某些系统是不是只支持GB2312编码。 GB2312的编码范围是0xA1A1-0x7E7E,去掉未定义的区域之后可以理 解为实际编码范围是0xA1A1-0xF7FE。 EUC-CN可以理解为GB2312的别名,和GB2312完全相同。 区位码更应该认为是字符集的定义,定义了所收录的字符和字符位置, 而GB2312及EUC-CN是实际计算机环境中支持这种字符集的编码。HZ和 ISO-2022-CN是对应区位码字符集的另外两种编码,都是用7位编码空间 来支持汉字。区位码和GB2312编码的关系有点像 Unicode和UTF-8。
以下是2个空标记(正确的空标记): <water /> <张三 age="28" sex="男" /> 错误的空标记:× <water />
< 张三 age="28" sex="男"/> < water />
2.3.1 空标记_2.作用
由于空标记不包含任何内容,因此在实际编写XML文件时, 空标记的名称主要用于抽象带有属性的数据,该数据本身并不需 要用具体文本进行描述,比如,如果XML需要描述宽12、长20 的长方形,但不准备有任何关于长方形的文字描述,那么就可以 使用如下的标记: <长方形 width="12" length=20 /> XML解析器主要关心空标记中的属性,并可以解析出这些 属性的值。
}
2.2.3 standalone属性
在XML声明中可以指定standalone属性的值,该 属性的默认值是“no”。 该属性可以取值“yes”或“no”,以说明XML文件 是否是完全自包含的。 下列XML声明指定standalone属性的值为“yes”:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<?xml version="1.0" encoding="gb2312" ?>
这时XML文件必须使用“ANSI”编码保存 。 3 . 如 果 在 编 写 XML 文 件 时 只 准 备 使 用 ASCII 字 符 , 可 以 将 encoding属性的值设置为“ISO-8859-1”。例如:
<?xml version="1.0" encoding=" ISO-8859-1" ?>
►
unicode字符集编码
每一种语言的 不同的编码页,增加了那些需要支持不同语言的软件的 复杂度。因而人们制定了一个世界标准,叫做unicode。unicode为每个 字符提供 了唯一的特定数值,不论在什么平台上、不论在什么软件中, 也不论什么语言。也就是说,它世界上使用的所有字符都列出来,并给 每一个字符一个唯一特定数值。 Unicode的最初目标,是用1个16位的编码来为超过65000字符提供映射。 但这还不够,它不能覆盖全部历史上的文字,也不能解决传输的问题 (implantation head-ache's),尤其在那些基于网络的应用中。已有的软 件必须做大量的工作来程序16位的数据。 因 此,Unicode用一些基本的保留字符制定了三套编码方式。它们分别 是UTF-8,UTF-16和UTF-32。正如名字所示,在UTF-8中,字符是 以8位 序列来编码的,用一个或几个字节来表示一个字符。这种方式的最大好 处,是UTF-8保留了ASCII字符的编码做为它的一部分,例如,在UTF -8 和ASCII中,“A”的编码都是0x41. UTF-16和UTF-32分别是Unicode的16位和32位编码方式。考虑到最 初的目的,通常说的Unicode就是指UTF-16。在讨论Unicode时,搞清楚 哪种编码方式非常重要。
§2.3 标记
XML文件中的标记分为空标记和非空标记两种 .
2.3.1 空标记_1. 语法格式
1. 语法格式 所谓空标记就是不含有任何内容的标记。空标记以“<”标识 开始,用“/>”标识结束. 空标记的语法格式分别为: <空标记的名称 属性列表 /> 或 <空标记的名称 />
正确的空标记:
<张三 age="24" sex="男" />
这时XML文件也必须使用“ANSI”编码保存 。
ASCII 、GB2312、GBK、unicode、UTF-8 字符集编码
► ASCII字符集编码
ASCII码是7位编码,编码范围是0x00-0x7F。 ASCII字符集包括英文字母、阿拉伯数字和标点符号 等字符。其中0x00-0x20和0x7F共33个控制字符。 只支持ASCII码的系统会忽略每个字节的最高位, 只认为低7位是有效位。HZ字符编码就是早期为了 在只支持7位ASCII系统中传输中文而设计的编码。 早期很多邮件系统也只支持ASCII编码,为了传输中 文邮件必须使用BASE64或者其他编码方式。