曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
那么這些字符必須是ISO 3166國(guó)家碼中的一員(見(jiàn)下面的前兩個(gè)例子)。另外,子代碼可
以用來(lái)描述語(yǔ)言的書(shū)寫(xiě)符號(hào)、語(yǔ)調(diào)、地方變體等等。(見(jiàn)下面的后五個(gè)例子);例如,像
英語(yǔ)(“e n”)和挪威語(yǔ)(“n o”)這樣的語(yǔ)言變量,或者那些用于阿塞拜疆語(yǔ)的書(shū)寫(xiě)字母變
體:
程序清單2 - 5
• 字符串“I -”或“i -”,緊跟3個(gè)或8個(gè)字母、注冊(cè)過(guò)的I A N A語(yǔ)言代碼(h t t p : / / w w w. i s i . e d u / i n -
n o t e s / i a n a / a s s i g n m e n t s / l a n g u a g e s);例如,美國(guó)本地的方言,C h e r o k e e:
• 字符串“ X -”或“ x -”,緊跟一個(gè)用戶定義的語(yǔ)言代碼;例如,由Star T r e k發(fā)明的語(yǔ)言
K l i n g o n可以表示為:
用戶定義的語(yǔ)言代碼必需以“ x -”或“ X -”開(kāi)頭,以避免可能與注冊(cè)的I A N A代碼沖
突。
在I n t e r n e t用戶群中,有一種固定的習(xí)慣,就是用小寫(xiě)字母表示語(yǔ)言代碼,用大寫(xiě)字母表示
國(guó)家代碼。即使這些屬性值并非大小寫(xiě)敏感(這一點(diǎn)與大多數(shù)X M L命名不同),堅(jiān)持這一習(xí)慣還
是相當(dāng)必要的(記住X M L的設(shè)計(jì)目的是簡(jiǎn)化已有的I n t e r n e t協(xié)議的使用)。
下面的小段程序演示幾種可能出現(xiàn)的情況:
程序清單2 - 6
一個(gè)應(yīng)用程序(或樣式表)可能使用x m l : l a n g屬性根據(jù)一些用戶的語(yǔ)言配置設(shè)置決定顯示哪
32使用XML 高級(jí)編程
下載
一個(gè)< q u e s t i o n >標(biāo)記。
和x m l : s p a c e屬性一樣, x m l : l a n g屬性的值不僅應(yīng)用于包含該屬性的元素,而且也應(yīng)用于它所
有的子元素和其他屬性。此外,應(yīng)用程序沒(méi)有義務(wù)去關(guān)心x m l : l a n g屬性的情況。類似于x m l : s p a c e
屬性的一點(diǎn)是它可能對(duì)X M L數(shù)據(jù)的樣式化非常有幫助, x m l : l a n g屬性可能是幾乎所有國(guó)際化文
檔所必需的功能。
這里我們還需要提一提對(duì)該功能的其他描述方法:大多數(shù)處理多語(yǔ)言文本的用戶喜歡把
這種對(duì)內(nèi)容的處理叫做“語(yǔ)言標(biāo)記”。當(dāng)然,這會(huì)與X M L術(shù)語(yǔ)相沖突:因?yàn)閤 m l : l a n g屬性
并不是一個(gè)X M L標(biāo)記,所以,當(dāng)我們討論多語(yǔ)言X M L文本時(shí)應(yīng)當(dāng)注意過(guò)濾和轉(zhuǎn)化這種概
念。
現(xiàn)在我們已經(jīng)覆蓋了屬性和元素的語(yǔ)法,即X M L的基本組成,你應(yīng)該已經(jīng)能夠建立自己的
簡(jiǎn)單的X M L文檔。但是在我們深入討論另一個(gè)關(guān)鍵主題—實(shí)體之前,讓我們先簡(jiǎn)單地了解兩
個(gè)問(wèn)題,在你用自己的應(yīng)用程序處理文檔之前,這是必需掌握的內(nèi)容:空白和行尾處理。
2.5.2 空白
在討論x m l : s p a c e屬性時(shí),我們使用了還沒(méi)有真正介紹的術(shù)語(yǔ)“空白”。但不管是對(duì)于人類語(yǔ)
言還是計(jì)算機(jī)語(yǔ)言來(lái)說(shuō),空白確實(shí)一個(gè)非常重要的語(yǔ)言概念。在X M L數(shù)據(jù)中,只有4個(gè)字符可以
作為空白使用(參見(jiàn)表2 - 2)。
無(wú)論如何,制表位占用的位置都只不會(huì)
超過(guò)一個(gè)字符,所以它們中的每一個(gè)都可以
簡(jiǎn)單地看作是一個(gè)字符。同樣,任何由L F和/
或C R隱含的格式也是交給應(yīng)用程序和/或樣
式單處理。
同時(shí),統(tǒng)一代碼定義了許多不同種類的
空格,但其中沒(méi)有一個(gè)能夠成為X M L中的空白。
X M L規(guī)范要求X M L解析器將所有的字符,包括所有的空白字符,傳遞給應(yīng)用程序。如果使
用的是需要驗(yàn)證的解析器,當(dāng)空白字符出現(xiàn)在元素內(nèi)容中時(shí)(也就是說(shuō)這些空白字符是元素字
符數(shù)據(jù)的一部分),它會(huì)要求通知應(yīng)用程序。所以,負(fù)責(zé)處理空白的總是應(yīng)用程序。
X M L處理空白的規(guī)則非常簡(jiǎn)單:解析器會(huì)保留內(nèi)容中所有的空白字符并不加修改地傳遞
給應(yīng)用程序,但元素標(biāo)記和屬性值中的空白會(huì)被刪除。
在書(shū)寫(xiě)S G M L和H T M L文檔時(shí),標(biāo)記的縮進(jìn)是非常常見(jiàn)的做法,但在處理文檔時(shí), H T M L瀏
覽器只會(huì)留下單詞和文本中其他可識(shí)別單元之間的一個(gè)空白字符,即便是在文檔內(nèi)容中也是如
此。這就意味著在書(shū)寫(xiě)文檔時(shí),作者可以根據(jù)自己的需要添加任意多的空白以便使文檔更易于
閱讀并突出文檔的結(jié)構(gòu),但是在文檔處理時(shí)這一切都將失效。此外,不同的瀏覽器對(duì)于空白的
刪除辦法有不同的缺省規(guī)則,許多H T M L作者必須使用< p r e >標(biāo)記、& n b s p ;實(shí)體和/或表格標(biāo)記來(lái)
確定文本的空白部分。X M L的設(shè)計(jì)目的就是簡(jiǎn)化H T M L的處理辦法以及它在空白處理方面自相
矛盾的做法,同時(shí)避免S M G L針對(duì)空白的復(fù)雜規(guī)則。
第2章XML 語(yǔ)法使用33
下載
表2 - 2
字符值(十六進(jìn)制) 描述
0 9 水平制表( H T)
0 A 換行(L F)
0 D 回車(C R)
2 0 A S C I I碼中的空格字符
在H T M L中,標(biāo)記間的空白通常會(huì)被H T M L瀏覽器所忽略。S G M L在決定是否保留“由標(biāo)
記產(chǎn)生的”空白時(shí)有一大堆復(fù)雜的規(guī)則—但不論如何,這些規(guī)則從未非常清晰或簡(jiǎn)明。
現(xiàn)在,讓我們看一看X M L是如何處理文檔中的行尾的。
2.5.3 行尾的處理
X M L數(shù)據(jù)對(duì)象經(jīng)常存儲(chǔ)在離散的計(jì)算機(jī)文件當(dāng)中,它們被分割為若干個(gè)文本“行”。在四個(gè)
X M L空白字符當(dāng)中有兩個(gè)是標(biāo)準(zhǔn)的A S C I I碼行尾控制字符。正如我們前面提到的,在用來(lái)表示
行尾時(shí),有這兩個(gè)字符的三種常見(jiàn)組合: C R - L F,只有L F,以及只有C R。
為了簡(jiǎn)化X M L應(yīng)用程序的編碼, X M L解析器需要將所有的行尾字符串轉(zhuǎn)換為單個(gè)L F(換
行)字符。自然,這會(huì)讓U n i x編程者感到非常高興,而讓許多M S - Wi n d o w s的開(kāi)發(fā)人員怨聲
載道( M a c O S用戶已經(jīng)適應(yīng)了處理多種行尾字符串)。Tim Bray 曾經(jīng)提出過(guò)一些折衷辦法
(主要是考慮到M S - Wi n d o w s的市場(chǎng)份額),但結(jié)果是X M L仍然要求使用U n i x風(fēng)格的行尾字
符。
在了解了如何處理空白和行尾之后,讓我們著手正確解決字符和實(shí)體引用的問(wèn)題。
2.6 字符引用和實(shí)體引用
與之前的S G M L和H T M L一樣,X M L為顯示非A S C I I碼字符集中的字符提供了兩種方法:
中國(guó)航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(14)