无废话XML阅读笔记(一)

无废话XML阅读笔记(一)
2008年6月4日

一. 介绍XML
        XML(eXtensible Markup Language,可延伸式标注语).
        1. XML的优越性:
                1). 异质系统间的信息互通;
                2). 自动化user agent不再是奢望
        2. XYZ专有名词大会串--XML应用实例:
                1). 数学ML: MathML 籍着XML定义出一套能充分表达数学式子的标注语言.
                2). 微笑串连: SMIL 是多媒体同步整合语言. (Synchronized Multimedia Integration Language).
        3. Xsl:Css之外,另一种替XML打扮外观的语言,Xsl所使用的方法和Css大异其趣.

二. XML语法领进门
        1. 前奏(/* XML声明 */)
                <?xml version="1.0" encoding="UTF-8"?>
                这个叫XML宣告(declaration),更有学问的称呼为前言(prolog),/* 国内就叫XML声明 */.其中version逐个注明版本的属性肯定要有,而encoding这个注明文字编码的属性则可有可无.如果省略的话,字符必须是Unicode,以UTF-8或者UTF-16做编码.在这样的情况下,甚至可以将整行<?xml ...?>一并省去,不过XML标准中强烈建议不要这么做,不管是不是Unicode,最好还是养成一律写的好习惯.而在XML文件的编码不是UTF-8或者UTF-16的情况下,XML声明决不可省,而且encoding也绝不可少.
       
        2. 元素与属性.
                俗称的"标签"(tags),实际上包含了"元素(elements)"和"属性(attributes)"两个部分.最高成的元素称为"根元素rootElement".
                <元素名 属性名 = "属性值">文字内容</元素名>.
               
        3. 注释.
                在XML中,注释语法和HTML中非常相似.虽然严格来讲,不完全一样,但是二者的差别在这里并不重要.<!-- 注释 -->.
       
        4. 不可或缺的解析器.
                在解释XML严格的语法规定之前,让我们先来谈谈Parsing这个重要的概念."parse"就是解析的意思.
       
        5. XML文件必先要"及格".
                "及格"在XML中的正式说法叫"well-formed",也就是格式正确.任何文件要能称得上是XML文件之前,必须先得"达到及格标准".达不到边准的文件,会让XML解析器卡壳,解析失败,什么都做不成,
                那么到底要怎么样的XML文件才算及格呢?主要有以下几个原则:
                (1). 所有元素都要正确地关闭.
                     备注:XML中有种叫"空元素(empty element)"的元素,其内部不含任何文字内容,只有属性.其关闭方式如:<元素/>
                (2). 标签之间内部得交叉.
                     备注:XML中规定,所有的元素排列必须是严谨的树状结构.树状结构的观念对学XML的人非常重要,在使用DOM,XSLT,和XPoiter分别控制,转换,连结XML文件,都需要随时对文件的内部结构了如指掌.
                (3). 所以的属性都得包上引号.
       
        6. XML规范DTD规则.
                DTD(Document Type Definition),也就是对某种XML文件再格式上的定义.我们可以其中规定,某某元素到底可以出现多少次,还有一个元素能包含那些属性,子元素,以及各个元素出现的顺序等,都能用DTD一一清楚的加以定义和规范.用DTD定义出来的一套XML应用,专业术语叫"语汇".可以用DTD来确认其正确性的XML文件称为valid(有法可证的)XML.根据DTD中定义来确认的XML文件正确性的解析器叫"validating parser",没有这种的功能的解析器叫"non-validating parser".在使用XML时,我们通常会使用DTD已经设计好的现成XML语汇.目前W3C正在研发,众望期盼的XML Schema(组织架构)标准,在未来不但可能逐渐取道DTD,更将提供更多的功能.更好的是,XML Schema完全采用XML语法,不想DTD那般,有自成一格的怪异表示法.
       
        7. 区分大小写.
                XML元素,属性名等读ushi区分大小写的.
       
        8. CDATA 区.
                再HTML文件中,每当我们要举例或者附上源代码时,我们会把它放到<pre>..</pre>或者<xmp>...</xmp>区块中.在XML中,要达到这样的功能,要用CDATA(读:C data).CDATA中的C是character(字)的缩写.在XML中,所有Unicode中定义的字码,包括中文字,都算是合格的字,而不狭窄的局限于英文字母.
                例子:<![CDATA[ Keona阅读"无废话XML"记录笔记! &;  ]]>
                CDATA区以"<![CDATA["为开始,"]]>"为终了.区块中唯一不能包含的,正是]]>这个终了信号.其他资料,只要是合格的Unicode字,都可以自由放置其中.依标准规定,出现再CDATA区中的资料,解析器在解析时不许乱碰,而要原封不动的交给下游的程序,严格的程度,就连任何在区块起始和结尾处的空白,换行字符也无法幸免.
       
        9. 一空两空大不同.
                在讨论XML对空白字符的处理态度之前,我们最好先对空白字符作明确的定义为,space(空格),tab(/t),CR(Carriage Return)和LF(Line Feed).CR是打字机时代遗留下来的称呼.这个ASCII字符通常是隐形的;它是MacOS平台上的换行记号.LF是Unix上的换行记号.DOS/Windows平台则使用一个CR,后头紧接着一个LF来标示换行.
                XML中规定,所有位于标签以外的空白,解析器要一个个忠实地交给下游程序作进一步处理.因为这个限制,我们必须改变我们的编程习惯.在写HTML标注文件时,不少人有适时换行,甚至缩排(indent)的好习惯,让源码清楚易读.大多数网页开发工具,甚至还会替我们做"pretty-print",依文件的逻辑架构,和标签出现的位置,作深浅不同的缩排,但在XML中,如果把<作者>XXX</作者>写成<作者>  XXX  </作者>二者是不一样的.如果我们想明确的告诉XML程序,不要随便的把空白字符去掉,可在标签中加入xml:space(网上说,好像只对空格起作用,回车/t等字符经过我自己测试,好像都只是做空格处理!)这个XML内定的属性.如:
        <诗句 xml:space="preserve">
        小雨伞啊!   小雨伞!
             一只小雨伞!
        </诗句>
       
        10. PI与样式链接.
        XML中还有一种标注,叫PI,是Processing Instruction(处理)的缩写.PI的标注是以"<?"开头,"?>"结尾.通常PI是用来传递情报给解析器下游的程序的,譬如我们想用样式表(stylesheet)来美化XML,不管是用CSS还是XSL,都必须有个机制,让浏览器知道要去哪里去找样式表.为此,W3C特别颁布了一个转为链接样式所设计的PI,写法为:
        <?xml-stylesheet href="style.css" type="text/css"?>
        "xml-stylesheet"这部分称作PI的目标(target).以上的PI是用来告诉浏览器去找一个叫style.css的css文档.如果要链接XSL样式,就写成:
        <?xml-stylesheet href="style.xsl" type="text/xsl"?> 这份链接样式可以去
http://www.w3.org/TR/xml-stylesheet 下载.

三. Unicode说明.
        1. Unicode(统一码)简介.
                Unicode(统一码)顾名思义是一个将世界上几十中紊乱的文字编码整合在一起的努力.其幕后是由美国各大电脑厂商所组成的Unicode策进会来推动的.目的是推广一个世界通行的编码体制,将所有世界上用的文字都涵盖进去,进而减少各电脑商开发国外市场时所遭到的问题.
                为了要将成千上万的文字统统收集到一个共通的编码机制底下爱在兼顾经济的原则下,不管是东方文字还是西方文字,每个字再Unicode中一律以两个bytes来代表.这样一来,就至少能有2的16次方(65536)种不同的组合,足以应付目前绝大多数场合的需要.
       
        2. UTF是Unicode/UCS Transformation Format(通用字符集/统一编码变换格式)的缩写.Unicode策进会推荐使用的UTF-8和UTF-16这两种格式.其中的"8"和"16"指的的是bits数,而不是bytes.
        UTF-16基本上就是Unicode双byte编码的实现,再加上一个应付来扩充需求的编码机制(很少用).
        UTF-8是一种不等副的编码方式,再UTF-8之下,英数字(即ASCII字符)保持原状,完全不受影响(因此不需要做转换);但其他语文的资料则需透过程序来做转换,而且会"变胖",因为每个字需要额外多用一或二个bytes来编码.
        UCS通用字符集中,定有UCS-2和UCS-4等编码方式,其中的2和4指的是bytes,而不是bits.UCS-2大体上就是Unicode采用的双byte编码.可以简单的把他们想成是一样的.UCS-4是以四个bytes来代表一个字符的编码方式,就目前而言,在每个UCS-2码之前补上两个空白的bytes,便可得到相对应的UCS-4码.
 3. 血淋淋的细节.
               Unicode中的空间分配:不意外,Unicode的头256个字符和ISO-8859-1(即俗称的Latin-1,西欧字母)完全相同,其中前半段就是ASCII.这段是从U+0000到U+00FF.当然,每个ISO-8859-1码必须在前面补上一个空byte(0x00)后才是相对的Unicode码.和我们有切身关系的Unihan统汉字,在Unicode中主要分布再U+3400到U+9FFF之间,此外U+F900和U+FAFF之间也有一些.事实上,Big5和GB2312中的汉字和符号都再U+4E00到U+9FFF这块里面.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值