DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML基礎 >> 什麼時候不應該使用 XML(2)
什麼時候不應該使用 XML(2)
編輯:XML基礎     

 

僅僅因為知道某些東西是 XML 格式並不意味著可以用一般 XML 語法分析器來理解輸入。嘗試將來自木星衛星的光譜數據塞進公司的記帳程序中也許是有趣的,但這會惹惱會計。這可能象剪切 Apache 配置文件並將它粘貼到圖形程序中。公共的數據格式是了不起的,但語法標准不暗示所有程序能夠理解所有數據。

XML 是差的人機界面
直到現在,我只討論了程序間用於交談的數據格式。除了前面部分中的告誡,對於大多數程序對程序數據格式需求,XML 應該是一個安全的賭注。程序、規范、初始化文件以及類似於人機之間的對話一類東西又怎樣呢?在這一節中,我希望使您信服人們不一定必須編寫和充分理解 XML。與許多提供優秀界面的現有標准專用語言相比,XML 大概離您能得到的自然人類語言還差得很遠吧。

我的論點很簡單:人類具有將結構應用到字符串(句子)的天生能力,所以,添加標記符號只能使我們閱讀更困難,輸入更吃力。問題是,在設計和對計算機語言進行語法分析方面,大多數程序員沒有什麼經驗。與其把時間花在設計和分析人類友好的語言上,程序員倒不如使用最快的路徑來提供規范語言和實現:“哦,用 XML。就這樣吧。”並且那也不錯,但我希望程序員認識到,當他們走那種捷徑時,他們正在提供一種較差的界面。不相信我?在本文余下部分中,我將一對一地比較專門針對人類的語言和他們不自然的 XML 結構化的等價物。

讓我們從一個簡單的算術表達式開始。人類已使用至少有一千年的專用語法,與 XML 語言相比,哪個更易於讀和寫呢?


數學 XML 語法
3+4*5 <add>
 <int>3</int>
 <mult>
   <int>4</int><int>5</int>
 </mult>
</add>




的確,3+4*5 更容易讀和寫。人類已經精確地構建了專門的領域特定的語言,來有效地使用這些語言描述問題(注意,有大量專用編程語言,如 PostScript、PERL、Mathematica,等等)。上述 XML 規范是表達式的語法分析樹(結構)表示 - 記得句子結構圖嗎?在處理之前,語言語法分析器將輸入轉換成語法分析樹,因為明確的語法分析樹要比易於人類理解的隱式句子結構更易於計算機處理。輸入明確的結構避免了在程序中需要專門語法分析器,但這給用戶添加了大量負擔。

免得您認為表達式太簡單而不能成為適合的示例,請考慮我設計和實現的、從 jGuru 的對象數據庫抽取數據的定制的查詢語言。清單 1 是一個簡單查詢。

清單 1. 沒有用 XML 格式的簡潔查詢
query type Person props (email,firstname,lastname) where "EID>100"




人類當然喜歡輸入簡潔的一行查詢語句,而不是清單 2 中等價的 XML。

清單 2. XML 格式的同一個查詢 <query>
 <type>Person</type>
 <props>
   <prop id="email"/>
   <prop id="firstname"/>
   <prop id="lastname"/>
 </props>
 <cond>
   <gt>
     <prop id="EID"/>
     <int>100</int>
   </gt>
 </cond>
</query>



自然地,專門的語法分析器在內存中將查詢轉換成樹狀結構,該結構就象 XML。我要說的是,人類輸入簡單查詢,而計算機做明確地演算該結構的工作。請注意,該查詢結果,一組對象,以序列化的 XML 數據被送回客戶機,因為它表示程序對程序通信,並且它是 XML 極適合的使用。

更大的規范又怎樣?使用面向人類的語言,它們更容易理解。考慮課程描述符文件,我們在 jGuru 上用它將各種課程模塊組合成一個完整的課程。清單 3 顯示了 JavaIntro 課程的簡短描述。

清單 3. Java 介紹課程的簡短非 XML 描述
course JavaIntrocourse {
 title = "Java Language Essentials"
 caption = "Core features of the Java programming language"
 mmlvers = "2"
 content {
   intro = "intro.mml"
   variables = {useApplets="false", genTM="true", genIBM="true"}
   modules = { "JavaIntro.mod", "vsCOBOL.mod" }
 }
}




描述中有許多信息,但真正只是一串賦值語句和字符串列表。甚至非程序員也能看懂其基本含義。我猜想,清單 4 中的等價 XML 可能會給大多數非程序員帶來理解性問題。

清單 4. 清單 3 的 XML 等價
<course>
 <title>Java Language Essentials</title>
 <caption>Core features of the Java programming language</caption>
 <mmlvers>2</mmlvers>
 <content>

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved