曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
4. 屬性值編碼
第4章數據建模與XML使用97 下載
無論使用元素還是屬性表示對象的特性,都必須決定如何對它們的值進行編碼。
以下列出了一些常見的情況:
(1) 數量,例如高度、寬度和重量
第一個問題是是否將度量單位標準化(例如,所有長度都以米為單位),還是使用多種不同
的度量單位。如果度量單位是數據的一部分,你可以將它作為屬性值的一部分(h e i g h t = " 1 . 8 6 m "),
或者將它分離為獨立的項( <height units="m">1.86</height>)。最后,必須定義十進制數字的格
式,例如,用什么符號表示小數點和千位分隔符。一旦建立了X M L模式,只需引用標準的數字
數據類型,而不必擔心詞法編碼,但是目前這個任務仍然要由文檔設計者承擔。
要深入了解XML模式,參見第7章。
(2) Ye s / N o值
在英語語境中,使用字符串y e s和n o作為明確的表示,如果空間非常寶貴,可以使用縮寫y和
n。如果用屬性表示模型中的特性,還可以使用S G M L的習慣用法, H T M L中也采用這種方式
—例如b o r d e r = " b o r d e r "意味著y e s,如果缺少b o r d e r屬性意味著n o。這種方式在S G M L中有一定
的優越性,但是對于X M L來說,它已經成為歷史。為了保證與S G M L的互操作性, X M L不提倡
同一元素有兩個值集合相交的屬性,例如,兩個屬性都允許值y e s和n o。
(3) 其他有限的值集合
對于這些有限的集合,最基本的決策是使用代碼還是完整的名稱,例如: W或Wi t h d r a w n,
u k或United Kingdom。如果不考慮空間因素,擴展的名稱的最主要優點在于它能夠避免誤解
—用戶對代碼的理解常常與設計者的初衷大相徑庭,結果導致數據含義的混淆。
(4) 日期和時間
許多人都提倡根據ISO 8601的日期格式(Y Y Y Y- M M - D D)進行標準化,以避免出現模棱兩
可的情況。ISO 8601還定義了時間的表示法,其中包括時區。
實際上有許多標準是關于特定類型的特性的。表4 - 2列出了國際標準化組織( I S O)發布的
一些標準。
表4 - 2
標準范圍說明
ISO 2955 公制度量單位在信息系統中使用有限的字符集(不包括希臘字母)表示S I和
其他度量單位的方法
ISO 3166 國家代碼表示國家名稱代碼的規范;它包含兩字母代碼和三字母代碼。
兩字母代碼是廣為人們熟悉的I n t e r n e t域名,例如: d e代表德國
ISO 4217 貨幣代碼國家貨幣的代碼
ISO 5218 人類性別表示男和女的代碼(這肯定是目前所發布的最短的國際標準)
ISO 6093 數值三種數值表示法:字符串形式,機器可讀的形式和人類可識
別的形式
ISO 6709 位置使用經度、緯度和海拔高度唯一地標識位于地球表面、地上
和地下的點
ISO 8601 日期和時間日期表達式,包括:日歷的日期、序數的日期、星期幾和時
間,它使用標點符號進行分隔以免引起混淆
98使用XML 高級編程
下載
當然,你沒有義務一定要使用這些標準,但是遵循標準有兩大優點。第一,別人考慮到的
困難可能比你想到的多,第二,告訴其他人你將遵照標準執行能夠減少徒勞無益的爭論。
除此之外,還有許多其他標準: Internet RFC 1766定義了自然語言的編碼機制,它已經被廣
泛采納; X . 5 0 0 / L D A P標準定義了一套精心研制的在世界范圍內表示人名的方案(當然不僅僅是
名字,中間名的首字母和姓);另外還有許多應用于特定領域的標準,例如:出版領域的I S B N,
運輸業的機場編碼,等等。
在不久的將來,我們期待更多的通用數據類型被標準化,它們將成為X M L模式活動的一部
分。到那時, X M L解析器將接管解析和驗證使用這些類型的數據的任務,它能夠從一定程度上
減輕應用程序的負擔。
(5) 特性的名稱
當你使用元素或者屬性表示信息模型中的特性時,應該使用什么名稱呢?這個問題似乎是
顯而易見的,然而實際上你可以有兩種選擇:以數據類型命名,或者以它在父對象中的角色命
名。舉兩個簡單的例子,文檔的創建日期可以命名為d a t e - c r e a t e d或d a t e;客戶的地址可以命名為
a d d r e s s或b i l l i n g - a d d r e s s。
當然,如果存在多個日期或地址,你別無選擇只能使用較長的形式,你或許認為它的作用
僅僅是消除了含糊不清,從某種意義上講確實如此。遺憾的是,這種形式同時也刪除了隱含的
數據類型信息。應用程序軟件如何知道b i l l i n g - a d d r e s s和s e r v i c e - a d d r e s s有相同的有效性約束?另
外,如果每個元素都通過這種方式來區別, D T D將變得相當復雜。
相反,如果采用較短的命名形式,有可能使多個對象類型都包含相同的特性名稱,這是否
會導致該名稱重載?例如,旅游勝地、旅館和客戶都有名稱—在X M L文檔中使用< n a m e >標記
表示它們是否合理?從本質上講,在X M L中元素名稱是全局的(無論出現在哪里,含義都是相
同的),而屬性名稱則是屬于特定的元素類型,它對于該類型來說是本地的。這并不是不可違背
的規則;你可以重載元素名稱,特別是用于表示N A M E或T I T L E等簡單文本特性的元素,同樣,
在某些環境下(特別是X S LT樣式表),屬性名稱也可以被視作有全局意義。無論在哪種情況下,
最好不要用相同的名稱表示含義截然不同的事物,這是一條通用的設計規則,例如:不要用
S TAT U S同時表示個人的信貸價值和航空公司承諾的特性。
對于命名問題,你要考慮以下選擇:
• 使用系統的命名習慣,例如: < B i l l i n g . A d d r e s s >和< C r e a t i o n . D a t e >。這不僅能夠保證含義
清晰,而且能夠保持簡潔性,你甚至還可以將這種命名習慣擴展到應用程序軟件中,當然
這對于X M L軟件來說是沒有特殊含義的—特別要指出的是,這種結構化命名方式不能應
用于X S LT。(X M L名稱允許句點,它與其他字符的地位平等,沒有特殊意義。)其他可選
中國航空網 www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(42)