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