• 沒有找到結果。

以XML為基礎的行動應用程式開發工具

N/A
N/A
Protected

Academic year: 2021

Share "以XML為基礎的行動應用程式開發工具"

Copied!
166
0
0

加載中.... (立即查看全文)

全文

(1)國立交通大學 資訊科學系 碩 士 論 文. 以 XML 為基礎的行動應用程式開發工具 XML-based Mobile Application Development Kit. 研 究 生:沈聖博 指導教授:袁賢銘. 中 華 民 國. 教授. 九 十 三. 年 六 月.

(2) 以 XML 為基礎的行動應用程式開發工具. 研究生:沈聖博. 指導教授:袁賢銘. 國立交通大學資訊科學研究所. 摘要. 隨著行動裝置(mobile device)近年來的蓬勃發展,造就了現在行動裝置的多樣 性。於是,在行動裝置上可以執行不同程式語言所撰寫出來的行動應用程式 (mobile application),例如:WAP 的行動應用程式、J2ME MIDP 的行動應用程 式......等等。也由於行動裝置的多樣性,造就了多種不同的裝置規格和計算能 力,因此,在不同的行動裝置上,行動應用程式也會有不同的使用者介面呈現和 執行表現。 由於以上的原因,對程式設計師所造成的困擾是:若想在不同行動執行環境上執 行相同功能的行動應用程式的話,就必須以不同的程式語言撰寫多份不同版本的 程式碼。因此,本論文提出以 XML 為基礎的行動應用程式開發工具(XML-based Mobile Application Development Kit),試圖從不同的角度及觀點來解決問題, 並減少撰寫和維護行動應用程式的成本。. I.

(3) XML-based Mobile Application Development Kit. Student:Sheng-Po Shen. Advisor:Shyan-Ming Yuan. Department of Computer and Information Science National Chiao Tung University. Abstract. As the mobile devices are developed vigorously in recent years, they have all kinds of variety. Therefore, many mobile applications are coded by many different programming languages. For example, WAP mobile applications and J2ME MIDP mobile applications can be run on various mobile devices. According to diversity of mobile devices, diverse specifications and computing capability of mobile devices are individually developed. Therefore, mobile applications have various presentations of user interfaces and computational performance on different mobile devices. As a result of previous facts, programmers have following trouble. If they want to run mobile applications with same function on various mobile execution environments, then they have to code various versions of program by using different programming languages. Therefore, this thesis proposes XML-based Mobile Application Development Kit to reduce the cost of coding and maintaining mobile applications and solve the problem with different points of view.. II.

(4) Acknowledgements. 首先感謝我的指導教授 – 袁賢銘教授,謝謝老師在我完成論文的這段期間給予 我許多的建議與指導,更要謝謝老師給我很大的發展空間,讓我能朝自己的理想 邁進,真的非常感謝。 再來要謝謝旨峰和淑卿兩位賢伉儷,謝謝你們平時的照顧、幫忙和關心,讓煩悶 無聊的生活充滿了溫暖,非常高興能認識你們。也謝謝研一時,一同參加比賽的 學長同學,邱繼弘、林書慶、李宣鋒、洪崇凱,那是一段非常棒的回億,很高興 能和你們一同參與。也謝謝一同在分散室系統實驗室打拼的同學,林奕宇、劉昀 昇、陸振恩、蘇科旭、洪崇凱、蔡明耀,平時受到你們很多的幫忙,謝謝你們, 希望你們在未來的道路上能平順、發達。還有實驗室小組的成員,高子漢、高啟 涵、吳仁凱、於之鈞,平時從大家的討論中獲益良多,謝謝你們,祝你們在求學 的過程中有很傑出的表現。 最後,謝謝我的父母,謝謝你們一直支持著我,讓我能隨心所欲地朝自己的夢想 前進,謝謝你們,謝謝。. III.

(5) Table of Contents Abstract in Chinese Abstract in English Acknowledgements Table of Contents List of Figures List of Tables. ……………………………………………......I ……………………………………………….II ……………………………………………....III ……………………………………………....IV ……………………………………………....VI ……………………………………………...VII. Chapter 1 Introduction ……………………………………………… 1 1.1 前言 ………………………………………………………………… 1.2 動機 ………………………………………………………………… 1.3 論文架構 ……………………………………………………………. 1 1 2. Chapter 2 Background and Related Works ……………………….. 3. 2.1 背景介紹. ……………………………………………………………. 3. 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5. MExE (Mobile Execution Environment) ……………………… 3 WAP (Wireless Application Protocol) ……………………… 4 J2ME (Java 2 Platform, Micro Edition) ……………………… 5 XML (Extensible Markup Language) ……………………… 6 XSLT / XPath(Extensible Stylesheet Language for Transformation / XML Path Language) …………………………………………… 6 2.2 相關研究文獻 ……………………………………………………… 7 2.2.1 XUL (XML User-interface Language) ……………………… 7 2.2.2 UIML (User Interface Markup Language) ……………………… 7 2.2.3 XForms ……………………………………………………… 8 2.2.4 JavaML ……………………………………………………… 9 2.2.5 Adaptive User Interface for Mobile Devices ………………… 9 2.2.6 Developing Adaptable User Interfaces for Component-based Systems …………………………………………………..........10 2.2.7 Mobile Adaptive Application for Ubiquitous Collaboration in Heterogeneous Environments …………………………………..10 2.2.8 可適性的行動應用程式開發平台 ..............................................11. Chapter 3 XML-based Mobile Application Development Kit. …12. 3.1 設計理念 ……………………………………………………………..12 3.2 Development Kit 裡頭的成員 ………………………………………..13. IV.

(6) Chapter 4 PGML / PUML …………………………………………..14 4.1 為什麼要設計 PGML 和 PUML? …………………………………..14 4.1.1 為什麼要將行動應用程式拆解成兩部份? …………………..14 4.1.2 為什麼要使用 XML 做為抽象層級的描述方法? ……………..14 4.1.3 為什麼要設計 PGML 和 PUML? ……………………………..15 4.2 PGML – Pervasive loGic Markup Language ………………………..16 4.2.1 PGML 簡介 …………………………………………………..16 4.2.2 PGML 的設計理念 ……………………………………………..16 4.2.3 PGML 所含有的 elements ………………………………………..18 4.2.4 PGML 標準函式庫 ……………………………………………..22 4.2.5 4.2.5 PGML 範例 ……………………………………………..23 4.3 PUML – Pervasive User-interface Markup Language ……………..27 4.3.1 PUML 簡介 …………………………………………………..27 4.3.2 PUML 的設計理念 ……………………………………………..27 4.3.3 PUML 所含有的 elements ………………………………………..28 4.3.4 PUML 範例 …………………………………………………..32. Chapter 5 Comparison ……………………………………………….37 5.1 使用者介面描述語言的比較 ………………………………………..37 5.2 邏輯運算描述語言的比較 ……………………………………………..40. Chapter 6 Mobile Application Transformation ……………………41 6.1 準備做行動應用程式的轉換. ………………………………………..41. 6.2 WAP Transformation Pattern ………………………………………..41 6.3 J2ME Transformation Pattern ………………………………………..51. Chapter 7 Mobile Application Example ……………………………..58 7.1 使用者介面導向的程式技巧 ………………………………………..58 7.2 兩個 PUML / PGML 行動應用程式的例子 ………………………..58. Chapter 8 Conclusion and Future Work. ………………………...67. 8.1 結論 …………………………………………………………………..67 8.1.1 達到行動應用程式僅需撰寫一次的目標 …………………..67 8.1.2 減少行動應用程式開發與維護的成本 ………………………..67 8.1.3 PUML / PGML 提供了一個新的方向 ………………………..68 8.1.4 轉換樣式(transformation pattern)是一個好的指導方針 ………..68 8.2 未來發展 ……………………………………………………………..69 8.2.1 回顧過往 ………………………………………………………..69 8.2.2 開創未來 ………………………………………………………..69. Reference Appendix. V.

(7) List of Figures. 圖 2-1 圖 2-2 圖 2-3 圖 2-4 圖 2-5. WAP Programming Model ……………………………………………. 4 WAP Architecture ………………………………………………………. 4 J2ME Architecture ………………………………………………………. 5 XForms Model ……………………………………………………….. 8 User interface data flow and application data flow result in the. application…………………………………………………………………11 圖 3-1 XML-based Mobile Application Development Kit 架構圖 ……………..12 圖 4-1 PGML 文件結構示意圖 ……………………………………………..24 圖 4-2 PGML 簡單範例 ………………………………………………………..24 圖 4-3 PGML 簡單範例的相對應 J2ME 程式碼 ……………………………..24 圖 4-4 PGML 複雜的範例 …………………………………………………..25 圖 4-5 轉換之後所產生的 J2ME 程式碼(經過排版) ………………………..26 圖 4-6 轉換之後所產生的 WMLScript 程式碼(經過排版) …………………..26 圖 4-7 PUML 文件結構示意圖 ……………………………………………..33 圖 4-8 PUML 簡單範例 ………………………………………………………..33 圖 4-9 class:BMngr_LoginInput ……………………………………………..34 圖 4-10 class:B_loginBoard …………………………………………………..35 圖 4-11 class:B_mainBoard …………………………………………………..35 圖 6-1 change( ) function 架構圖 ……………………………………………..50 圖 6-2 PGMLchange.wmls …………………………………………………..50 圖 6-3 BMngr_Interface interface ……………………………………………..51 圖 6-4 changeBoard( ) method 的 J2ME MIDP 範例程式碼片段 ……………..53 圖 6-5 getBoard( ) method 的 J2ME MIDP 範例程式碼片段 …………………..54 圖 6-6 多選字串的範例程式碼 ……………………………………………..57. VI.

(8) List of Tables. 表 4-1 表 4-2 表 4-3 表 5-1 表 5-2 表 7-1 表 7-2. PGML 所有的 elements 說明 ………………………………………..18 PGML 標準函式庫說明 ……………………………………………..22 PUML 所有 elements 的說明 ……………………………………......30 各種使用者介面描述語言的比較 …………………………………..39 PUML 和 UIML 的比較 …………………………………………......39 Example1 在執時期的畫面(WML/WMLScript 和 J2ME MIDP) …..59 Example2 在執時期的畫面(WML/WMLScript 和 J2ME MIDP) …..63. VII.

(9) Chapter 1. Introduction. 1.1 前言 隨著行動裝置(mobile device)近年來的蓬勃發展,造就了現在行動裝置的多樣 性。我們可以依據類型將這些行動裝置分成 PDA、Mobile Phone、Java Phone、 Smart Phone......等等的幾個大類,而這些行動裝置彼此間的規格與計算能力 (computing capability)都不大相同,像是顯示螢幕的大小、顯示色彩為彩色或黑 白、記億體容量大小、CPU 運算能力,以及可用來執行行動應用程式(mobile application)的行動執行環境(Mobile Execution Environment,簡稱 MExE)......等等。 也就是因為行動裝置彼此間的種種差異,使得在行動應用程式的撰寫上也呈現了 多樣性。因此,我們可以在行動裝置上執行 WAP 的行動應用程式、J2ME 的行 動應用程式或是其他程式語言所撰寫出來的行動應用程式。 本篇論文從撰寫這些行動應用程式的程式設計師的角度,來探討〝行動應用程式 多樣性〞所衍生出來的問題,並針對這些問題提出一個解決方案—以 XML 為基 礎的行動應用程式開發工具 (XML-based Mobile Application Development Kit)。. 1.2 動機 造成行動應用程式多樣性的原因,除了是因為行動裝置彼此間的規格和能力不同 之外,主要是因為行動執行環境的不同。在 MExE[45][46]的定義中,行動執行環境 可以分成五類(5 MExE classmarks):WAP、PJava、J2ME、CLI、VP,(將在 2.1 節中,對 MExE 做背景介紹)。在這五種分類中,分別可以執行以不同程式語言 所撰寫出來的行動應用程式,像是 WML / WMLScript、J2ME MIDP……等等。 由於以上的原因,對程式設計師所造成的困擾是:若想在不同行動執行環境上執 行相同功能的行動應用程式的話,就必須以不同的程式語言撰寫多份不同版本的 程式碼。這將對程式設計師造成不小困擾,因為他們必須額外付出維護行動應用 程式的成本,和撰寫程式碼的成本。 因此,若行動應用程式只需要撰寫一次,便可以在各種行動執行環境上執行的 話,便可以大大地減少必須付出的成本。基於這樣的動機,便在本篇論文中提出 1.

(10) 一個解決方案 — 以 XML 為基礎的行動應用程式開發工具 (XML-based Mobile Application Development Kit)。在本篇論文中,您將可以看到如何運用所 提出的方法來達到〝行動應用程式僅需撰寫一次〞,以及〝減少開發、維護行動 應用程式的成本〞的目標。. 1.3 論文架構 在做過簡單介紹之後,本篇論文的架構安排如下:在第二章中,做背景及相關研 究文獻的介紹。從第三章開始,正式進入本篇論文的核心,也就是我們所提出的 解決方案所使用的相關技術。在第三章裡,將概括性地介紹本篇論文所提出的 XML-based Mobile Application Development Kit,包括其設計理念和其組成的成 員。第四章介紹兩種在抽象層級(abstract level)中,用來描述行動應用程式的方 法 — PGML 和 PUML,並且在第五章中分別將 PUML、PGML 和目前提出的幾 個描述語言做比較。利用第四章所提及的方法,描述一個完整的行動應用程式之 後,必須將此行動應用程式轉換成各種可以在行動執行環境上執行的程式碼,該 轉換的機制與方法將在第六章中介紹。在第七章中,提出兩個例子來做整個轉換 流程的說明。最後,將在第八章中做整篇論文的結論,以及討論未來還可以進行 的方向。參考資料以及附錄資料分別放在論文的最後篇幅,提供必要的資訊。. 2.

(11) Chapter 2. Background and Related Works. 2.1 背景介紹 2.1.1 MExE (Mobile Execution Environment) MExE[45] 是 3GPP[46](3rd Generation Partnership Project)針對目前行動裝置 (mobile device)上的執行環境,所提出的主張。在 MExE 裡頭,將行動裝置 上的執行環境分成五種類型,如果該行動裝置的執行環境屬於五種類型之 一,則該行動裝置也稱為 MExE device。 MExE 的目標是,希望能透過 MExE 的定義,來規範所有的行動裝置上的執 行環境,使這些行動執行環境能夠標準化,使往後開發行動應用程式(mobile application)或是軟體服務(service)能夠更方便及快速。 MExE 根據每種行動裝置的執行環境和計算能力(computing capability),將執 行環境分成五種類型(classmark): 1. classmark 1 – WAP execution environment 擁有這類型執行環境的行動裝置,通常都含有一個輕量型的瀏覽器,可 以觀看、執行由 WML / WMLScript[36]所撰寫出來的網頁(web pages)或是 應用程式(web application)。這類型的執行環境必須遵守 WAP(Wireless Application Protocol[36])的規範,應用在 GSM、GPRS,或是相容的無線 網路環境上。 2. classmark 2 – Personal Java execution environment 擁有這類型執行環境的行動裝置,通常擁有比一般行動裝置較高的計算 能力(computing capability)和硬體能力(例如:較多的記憶體、較大的螢 幕)。這類型的執行環境(也就是 Java Virtual Machine,簡稱 JVM),可以 執行由 Personal Java(PJava)[42]所撰寫出來的行動應用程式,支援較複雜 的使用者介面及較多的 APIs,例如:Java AWT、Java Applet……等等。 3. classmark 3 – J2ME/CLDC execution environment 擁有這類型執行環境的行動裝置,其計算能力和硬體能力較受限制,且 通常螢幕較小,無法顯示複雜的使用者介面。因此,在這類型的執行環 境(也就是 Kilobyte Virtual Machine,簡稱 KVM)中,可以執行由 J2ME[42] 所撰出來的行動應用程式。在 J2ME 中,特別額外設計了專屬的 APIs。 4. classmark 4 – CLI compact execution environment 這類型的執行環境是中立性質的,利用 Microsoft 系列的程式語言(例如: 3.

(12) embedded VC++)所寫出來的應用程式,都可以在這類型的執行環境上執 行。 5. classmark 5 – Virtual PalmTop network execution environment 這類型的執行環境採用 client-server 架構,在行動裝置上只顯示使用者介 面(client 端),而行動裝置上所輸入的資料透過網路傳輸,送到遠端的 server 主機做邏輯運算的處理,處理完之後再將結果透過網路,送回到 行動裝置上,再以適當的使用者介面顯示出來。另外,這類型的執行環 境也可能跟之前的四種類型一起搭配使用。. 2.1.2 WAP (Wireless Application Protocol) WAP[36]是一種應用在無線網路環境上的一種協定(protocol),允許擁有無線 裝置(wireless device)的使用者能夠在無線網路中,快速地存取資訊和服務。 WAP 是由產業界所共同制定的一種公開的標準,使用 WML / WMLScript 來 撰寫 WAP 應用程式,能夠應用在下列的無線網路環境中:CDMA、GSM、 PHS、GPRS、CDPD、PDC、TDMA......等等。 圖 2-1 和圖 2-2 分別表示了 WAP programming model 和 WAP architecture。. [圖 2-1. WAP Programming Model]. [圖 2-2. WAP Architecture] 4.

(13) 2.1.3 J2ME (Java 2 Platform, Micro Edition) J2ME[42]是一種專門為了消費性嵌入式裝置所設計的 Java 平台,例如:行動 電話(mobile phone)、個人數位助理(PDA,Personal Digital Assistant)、電視 盒(set-top box)、smart card......等等。在 J2ME platform 裡頭,包含了由多個 專家組織(experts group)共同制定的標準 Java APIs。這些專家組織包括了硬 體裝置的領導廠商,軟體廠商,以及軟體服務提供者(service provider)。 J2ME 的架構組織包含三個部份(參考圖 2-3):configurations、profiles、optional packages 。 這 三 個 部 份 建 立 起 一 個 完 整 的 Java 執 行 環 境 (Java runtime environment)。三個部份的內容分別是: 1. configurations 對於所有 J2ME 針對的裝置,提供基本的能力,包含了最小集合的 APIs。 在 J2ME 裡頭,有兩種 configurations:分別是 CLDC(Connected Limited Device Configuration),和 CDC(Connected Device Configuration)。 2. profile 包含了更高階層的 APIs,針對不同裝置的能力,會有少許不同。可以跟 CDC 或 CLDC 建立起一個完整的執行環境。在 profile 的部份,定義了 應用程式的生命週期(life cycle)、使用者介面、以及裝置的資料存取方式。 3. optional package 是一種擴充用的 APIs。為了滿足市場需求或是裝置本身特殊的能力,也 可能是為了擴充 J2ME 本身能力而設計的。例如:Bluetooth、Web Services......等等。. [圖 2-3. J2ME Architecture]. 5.

(14) 2.1.4 XML (Extensible Markup Language) XML[39]是一個開放的,以純文字為基礎的後設語言(meta-language),以標籤 (tag)的形式提供結構的,以及和語意相關的後設資料(metadata)。因為是以 純文字為基礎的,所以可以很容易地被人類閱讀並了解,另外,它所提供的 組織、描述和結構化資料的能力,使它能被機器(即應用程式)所解讀。 因為 XML 是一種後設語言,所以也能用來創造其他的語言,產生各式各樣 的應用。現今有很多 XML 的應用,例如:XSLT、MathML、XPath、SOAP、 WML……等等。. 2.1.5 XSLT / XPath (Extensible Stylesheet Language for Transformation / XML Path Language) XSLT[40][41]是 XSL(eXtensible Style Language)的其中一個分支。XSL 擁有強 大的能力,能將一份 XML 文件以不同的方式呈現出來,或是將一份 XML 文件中的結構,重新組織成一份結構不同的 XML 文件。XSL 包含兩個主要 的部份: 1. a set of formatting objects 能將一份 XML 文件所描述的內容,以不同的呈現方式表現出來。這一 個部份被獨立出來,但仍稱作 XSL 或 XSL-FO(XSL Formatting Objects)。 2. transformation language 能將一份 XML 文件原本的內容結構,重新組織成內容結構完全不同的 另一份 XML 文件。這一個部份也被獨立出來,稱之為 XSLT(eXtensible Stylesheet Language for Transformation)。 XSLT 具有以下的能力: - XSLT 可以描述轉換之後的目的文件的格式樣板(template),而樣本內容 透過 XPath(eXtensible Path Language)[41]從原本的 XML 文件獲得。 - 可以從原本的 XML 文件中獲得 elements、attributes、text、processing instructions 和 comments。也可以在目的文件中穿插所需要的文字字串。 - 簡單地說,XSLT 文件就是轉換規則的集合(a set of transformation rules), 這些轉換規則可以重複使用,或是從外部檔案引入(import)。 - 在 XSLT 的轉換規則中,可以使用類似一般程式語言的條件判斷敘述, 例如:if-else 敘述。 - 能夠使用變數(variable)或參數(parameter),參數可由外部應用程式傳入。 - 能夠處理 XML 文件中,內容結構彼此的關係。 - 能夠處理簡單的字串、數字、布林值的運算。 6.

(15) 2.2 相關研究文獻 2.2.1 XUL (XML User-interface Language) XUL[11][34]是跨平台(cross-platform)的使用者介面描述語言,一開始是為了使 Mozilla 這個瀏覽器,能夠更容易且快速地開發,而被創造出來的。是一種 以 XML 為基礎的使用者介面描述語言,所以具備了 XML 所有的特性與能 力。因此,在 XUL 文件中也可以嵌入其他類型的 XML 語言,例如:XHTML、 MathML......[39]等等。 使用 XUL,可以去描述大部份圖形化的使用者介面元件,例如: - 與輸入資料相關的 Text Field' checkbox' textbox......等等。 - 工具列(toolbar)、按鈕(button)。 - 選單(menu)、選單列(menu bar)、跳出式選單(pop up menu)。 - 樹狀結構(tree)、表格(table)。 - 鍵盤快速鍵(keyboard shortcuts)。 - 其他……。. 2.2.2 UIML (User Interface Markup Language) UIML[8][23][31][32]是一個以 XML 為基礎的使用者介面描述語言。是一種位於 抽象層級(abstract level)的使用者介面描述語言,可用來描述任何一種裝置平 台上的使用者介面。因為是以 XML 為基礎的使用者介面描述語言,所以具 備了 XML 所有的特性與能力。因此,在 UIML 文件中也可以嵌入其他類型 的 XML 語言,例如:XHTML、MathML......等等。 UIML 的設計目標(理念): - 所描述出來的使用者介面跟目的端的裝置平台無關(device independence) - 減少裝置平台上的使用者介面開發時間。 - 將使用者介面部份和邏輯運算部份分開。 - 非專業的程式設計師也能容易地開發使用者介面。 - 能快速地開發出(描述出)使用者介面的雛型。 - 能有效率地透過網路下載使用者介面。 - 安全機制的加強。 - 具有擴充能力。. 7.

(16) 2.2.3 XForms 在一般的網頁應用程式中(web application),均是透過〝Form〞這個使用者 介面來跟使用者作互動。使用者在 Form 中輸入資料,然後資料透過網路被 送 server 端作進一步的處理,然後將處理過後的資訊再透過網路,回傳到 client 端的瀏覽器上顯示出來.。XForms[33]對這樣子的機制提出更進一步的 想法。XForms 希望在網頁中,〝Form〞這樣子的一個使用者介面能: - 提供更豐富的使用者介面元件。 - 需要使用者提供資料的部份,能夠跟其顯示方式區分開來。也就是說, 〝Form〞這個使用者介面能夠以不同的呈現方式呈現,但都提供相同的 使用者介面語意。 - 使用者所輸入的資料,能夠以 XML 的格式儲存並送出。 - client 端和 server 端彼此間的網路傳輸次數能夠減少。 XForms 是一種 XML 的應用,所以擁有 XML 所有的特性,相對的,也必須 遵守 XML 所有的規範,因此,在 XForms 也可以嵌入其他類型的 XML 語 言,例如:XHTML。XForms 所代表的是〝下一世代網頁應用程式的使用者 介面〞。XFroms 將這樣的使用者介面分成三個部份(參考圖 2-4): 1. XForms model 〝Form〞這個使用者介面的語意,包含需要使用者提供資料的部份。 2. instance data 將使用者輸入的資料,儲存成 XML 格式。 3. user interface 〝Form〞這個使用者介面呈現的方式。. [圖 2-4. XForms Model] 8.

(17) 2.2.4 JavaML JavaML[9][37]是以 XML 為基礎,以 XML 的方式來描述一份 Java 的原始程式 碼。JavaML 是被設計用來幫助軟體工程的分析。 傳統程式設計師寫程式的方式,是以純文字的方式加上程式設計師自己的運 算邏輯來完成的。以軟體工程的角度,當我們要去分析這一份純文字程式碼 的結構時,需要經過一連串複雜的前置處理,包括語彙分析(lexical analysis)、 語法分析(syntax analysis)、語意分析(semantic analysis),也有可能需要產生 AST(abstract syntax tree)來做分析。在每一個前置階段也都可以搭配不同的 分析工具,來完成所需要的分析工作,但花費的成本不低,結果也未必能滿 意。 因此 JavaML 便產生,提供以不同的角度來做軟體工程的分析。首先針對 Java 語言,將 Java 的原始程式碼表示成 XML 文件,然後利用 XML 本身具有結 構化的特性,以及現存很多 XML 相關的工具,來完成所需要做的軟體分析 工作,這樣的一個過程,所需的成本較低,也往往能獲得較佳的結果。. 2.2.5 Adaptive User Interface for Mobile Devices [1] 提出一個以 mobile agent 為基礎的系統架構,在這個架構上的所有裝置(包括 桌上型電腦,行動裝置......等等),其使用者介面都可以靠遊走於這個架構上 的 mobile agent 自動轉換產生。使用 XUL 來描述使用者介面,mobile agent 負責依據不同的情況,將 XUL 轉換成適當的使用者介面呈現: - 當使用者所使用的裝置的運算能力夠強,且能執行 Java 程式時(例如: Java 手機或 PDA),mobile agent 會遊走到該裝置上,並啟動使用 jXUL 這個中介軟體(middleware),將 XUL 轉換成 Java Swing 的使用者介面, 並執行起來。 - 當使用者所使用的裝置的運算能力夠強,但不能執行 Java 程式時(例如: 沒有 JVM 的 PDA),mobile agent 會遊走到該裝置上,並使用 XSLT 的轉 換技術,將 XUL 轉換成 HTML 或 WML 的使用者介面,並執行起來。 - 當使用者所使用的裝置的運算能力不夠強時(當然也不能執行 Java 程式, 例如:WAP 手機),mobile agent 不會遊走到該裝置上,而是停留在整個 架構中的某台主機上,當做 proxy 來被該裝置使用,該裝置透過網路將 該 mobile agent 所轉換好的使用者介面(例如:WML),下載到裝置本身 並執行起來。. 9.

(18) 2.2.6 Developing Adaptable User Interfaces for Component-based Systems [3] Component-based system 是由很多個 software component 所組成的,這篇論 文是特別針對其中具有使用者介面的 software component 而提出的。當兩個 以上具有使用者介面的 software component 需要組合起來,形成一個新的 software component 時,這時候便需要考慮這些來自不同 software component 的使用者介面,在組合後,新的 software component 的整體使用者介面是否 適合或具有一致性? 這篇論文提出 aspect-oriented component engineering 的方式,來完成新的使 用者介面適性化(adaptation),也就是使來自不同 software component 的使用 者介面能夠適當地組合起來,並且具有一致性。在這篇論文中也歸納出四種 使用者介面適性化的類型(extension、composition、reconfiguration、adaptation to user, role and subtask),幫助做更好的適性化的調整。 .. 2.2.7 Mobile Adaptive Application for Ubiquitous Collaboration in Heterogeneous Environments [4] 在異質環境中要進行協同作業,例如甲員工使用桌上型電腦,乙員工使用 PDA,甲乙兩員工要使用同一種應用程式去共同完成一件工作。首先要克服 的便是應用程式呈現的問題,也就是該應用程式的使用者介面在不同裝置上 的呈現問題,因此應用程式的使用者介面需要被轉換。 這篇論文提出一個架構來解決這樣子的問題(參考圖 2-5): - 在 server 端以 XML 文件來描述應用程式的兩個部份:使用者介面和資 料 (真實資料只有一份,且儲存在 server 端)。 - 在 server 端一開始利用 XML 描述的使用者介面和資料,是以一般性 (generic)的方式描述。 - 在轉換的過程中,使用者介面和資料這兩部份原本的 XML 描述,會再 以 XML 的方式針對目的裝置做更準確的表達(device-specific)。 - 最後目的裝置會將之前所產生的 XML 文件轉換成真正可以執行的應用 程式。 經過以上的處理,同樣的應用程式變可以產生不同的使用者介面,在異質環 境中也可以完成協同作業了。. 10.

(19) [圖 2-5. User interface data flow (top row) and application data flow (bottom. row) result in the application.]. 2.2.8 可適性的行動應用程式開發平台. [29]. (An Adaptive Mobile Application Development Framework) 這篇論文提出一個可適性的行動應用程式開發平台,稱為 ART(Adaptive Remote Terminal)。該平台是一 client-server,並且分層的架構,讓程式設計 人員可以快速的發展行動應用程式。基本的概念是將使用者介面與程式邏輯 分開(在這篇論文中利用 XUL 來做使用者介面的描述,使用 Java 語言來描 述程式邏輯),利用桌上型電腦強大的運算能力與手持裝置的便利性,透過 網路將兩者的優點結合並發揮出來。簡單來說就是延伸了手持裝置的計算能 力。 ART 可以方便的新增通訊協定和使用者環境,除了達到可適性的目的外, 也減少了程式開發與移植的功夫。. 11.

(20) Chapter 3. XML-based Mobile Application Development Kit. 3.1 設計理念 基於〝行動應用程式僅需撰寫一次,就可以在各種行動執行環境中執行〞的想法, 以及想要〝減少行動應用程式開發與維護的成本〞,所以有了本篇論文的產生, 並 且 提 出 了 一 個 解 決 方 案 , 此 解 決 方 案 便 是 XML-based Mobile Application Development Kit。現在對此解決方案做概略性說明,詳細的討論將放在第四章和 第六章。 由之前的介紹可以知道,行動執行環境(MExE)可以分成五大類,所以有多種程 式語言可以用來撰寫行動應用程式,像是 WML / WMLScript、J2ME……等等。 因此,要達到〝行動應用程式僅需撰寫一次〞目標的話,就必須想辦法統合這些 諸多可用來撰寫行動應用程式的程式語言。 本篇論文提出的方式是:在抽象層級(abstract level)中,額外設計用來描述行動應 用程式的方法,而利用此方法所描述出來的行動應用程式的文件(或稱為程式 碼),可以利用轉換機制來將其轉換為各種可以在行動執行環境中執行的程式 碼,例如:WML / WMLScript、J2ME MIDP……等等。. [圖 3-1. XML-based Mobile Application Development Kit 架構圖]. 從上圖的架構圖(圖 3-1)中可以看出,在描述行動應用程式方面,將行動應用程 式 分 成 兩 部 份 : 使 用 者 介 面 部 份 (User-Interface) 和 邏 輯 運 算 部 份 (Logic Computing)。在抽象層級中,分別針對這兩個部份,提出了以 XML 為基礎的描 述方式:使用者介面部份以 PUML(Pervasive User-interface Markup Language)來 做描述,邏輯運算部份以 PGML(Pervasive loGic Markup Language)來做描述。這 12.

(21) 樣做法的好處是,可以將行動應用程式的兩個部份交由兩組不同的程式設計師們 負責,如此,可以加快開發速度,減少開發的時間成本。在維護行動應用程式方 面,兩組程式設計師可以專門負責屬於自己的部份,減少維護行動應用程式的額 外負擔,減少不必要的維護成本。 在轉換機制方面,採用 XSLT 的轉換機制,可以將在抽象層級中所描述的行動應 用程式程式碼(或稱為文件),轉換成各種實際可以在行動執行環境上執行的目的 端程式碼。 在本論文中,主要的重點放在兩種目的端程式語言的轉換。分別是 MExE 五大 分類中,WAP 類型下的 WML 和 WMLScript,以及 J2ME 分類下的 MIDP 程式 碼的轉換。而在第七章中,也是以轉換成這兩種目的端程式語言為例子。 整體而言,XML-based Mobile Application Development Kit 的設計理念為: 1. 將行動應用程式分成使用者介面和邏輯運算,兩部份。 2. 利用以 XML 為基礎的描述方法,來描述行動應用程式。 3. 利用 XSLT 的轉換機制,達成行動應用程式僅需撰寫一次的目標。 4. 減少開發和維護行動應用程式的成本。. 3.2 Development Kit 裡頭的成員 既 然 將 所 提 出 的 解 決 方 案 稱 之 為 Development Kit , 那 麼 就 必 須 說 明 這 個 Development Kit 中含有哪些工具。 在這個 Development Kit 中,主要包含下列三種工具: 1. 以 XML 為基礎的使用者介面描述語言 – PUML 2. 以 XML 為基礎的邏輯描述語言 – PGML 3. XSLT 的轉換機制 (本論文實作了將 PUML/PGML 轉換成為 WML/WMLScript 和 J2ME MIDP 程式碼的 XSLT style sheet 文件) 在接下來的章節中,將會分別對這三種工具做詳細的說明。. 13.

(22) Chapter 4. PGML / PUML. 4.1 為什麼要設計 PGML 和 PUML? 在這一節中,將更進一步說明 XML-based Mobile Application Development Kit 的 前兩個設計理念: 1) 將行動應用程式分成使用者介面和邏輯運算,兩部份。 2) 利用以 XML 為基礎的描述方法,來描述行動應用程式。 經過這一節的說明之後,將更清楚地可以知道為什麼要設計 PGML 和 PUML 這 兩個描述方法了。. 4.1.1 為什麼要將行動應用程式拆解成兩部份? 因為行動裝置本身必須具備很高的行動性,所以行動裝置的體積都很小,以 方便攜帶。也因為如此,行動裝置用來顯示資訊以及用來進行人機互動的螢 幕,就相對地比桌上型電腦或筆記型電腦小了很多。 在各式各樣的行動裝置上,它們的螢幕大小以及顯示方式都不盡相同。但我 們可以理解並想像到,相同功能的行動應用程式在不同的行動裝置上執行時 (即在不同的行動執行環境上執行),它們的差別就僅在於顯示方式的不同, 其運行於程式背後的邏輯都是相同的。 由於行動裝置的多樣性,也使得行動裝置的使用者介面也呈現多樣性。因此 便想到,若將行動應用程式拆解成兩大部份的話 – 使用者介面的呈現和運 行於背後的邏輯運算,必定可以大大地增加撰寫行動應用程式的彈性。 在使用者介面部份,可以依據行動執行環境的不同,做適合使用者介面的調 整與改變。在邏輯運算方面,在不同的行動執行環境上執行時,主要的邏輯 運算思維是相同的。. 4.1.2 為什麼要使用 XML 做為抽象層級的描述方法? 由於希望行動應用程式僅需撰寫一次,便可以在各種行動執行環境上執行。 因此,需要將所有可以用來撰寫行動應用程式的程式語言做一個統合。. 14.

(23) 本篇論文所用的方式,是在所有可用的程式語言之上,加上一個抽象層級的 描述方法。此描述方法必需足以代表所有在它下面的程式語言,也就是說, 此描述方法具備了所有程式語言的共通性。如此,該描述方法才能透過轉換 機制,將所描述的抽象行動應用程式,轉換為實際可以在行動執行環境上執 行的,目的端行動應用程式。 由於這樣的想法,本篇論文選用了 XML 來做為此抽象層級描述方法的基本 技術。充分利用 XML 本身的特性:跨平台、結構化、人類機器皆可閱讀…… 等等,加上現存很多 XML 相關的工具可以運用,例如本篇論文使用的 XSLT 轉換工具,它能將一份 XML 文件轉換成另一份結構不同的 XML 文件或純 文字檔。在 XML 技術被普遍運用的今天,採用 XML 來做為抽象層級的描 述方法,是最直接且可以直接受益於許多 XML 相關工具的做法了。. 4.1.3 為什麼要設計 PGML 和 PUML? 首先,針對使用者介面來討論,使用 XML 技術來描述使用者介面的相關文 獻以及研究都已經進行多年了,但大都僅限於網頁內容呈現的調適性 (content adaptation)、應用程式執行環境的改變(Browser、PC、PDA)或是單 純用來描述網頁使用者介面以及視窗程式的使用者介面。並沒有專門為行動 裝置的環境所設計的描述方法,加上這些文獻研究所提出的觀點及描述方 式,大多專為視窗環境或是高階瀏覽器所設計的。因此,本篇論文參考這些 前輩門的研究,並加上自己的見解,設計了更加符合行動應用程式的使用者 介面描述語言 – PUML。 至於邏輯運算方面,在所參考的文獻研究中,僅有 JavaML 是使用 XML 技 術來描述邏輯運算的,但侷限於 Java(J2SE)程式碼的描述。JavaML 並不符 合需要,因為其所描述的是 Java 程式碼,其描述語言太過複雜,不適合使 用來當做行動應用程式中,邏輯運算部份的描述方法。以 WMLScript 和 J2ME 為例,其程式語言的複雜度遠小於 J2SE 的 Java 程式碼,尤其是 WMLScript, 其語法更是精簡,能力也較 Java 單薄許多。因此,使用 JavaML 來描述代表 J2ME 和 WMLScript 的邏輯運算的話,並不適合,有殺雞用牛刀之感。另外, JavaML 的本意是用來做軟體工程分析用的,出發點跟本篇論文所希望的〝單 純的邏輯描述〞不同,自然 JavaML 也不符本篇論文所需了。最後,整理了 所有可以用來撰寫行動應用程式的程式語言的特性,加上自己的見解,設計 了符合行動應用程式的邏輯運算描述語言 – PGML。. 15.

(24) 4.2 PGML – Pervasive loGic Markup Language 4.2.1 PGML 簡介 PGML – Pervasive loGic Markup Language,是一個用來描述邏輯運算的語 言,負責對行動應用程式中,邏輯運算的部份做描述。也由於 PGML 是一 個以 XML 為基礎(XML-based)的描述語言,所以 PGML 必須遵守 XML 的 所有規範,並且繼承了 XML 所擁有的特性。 PGML 具有簡單的物件觀念:在一份 PGML 文件中,你可以宣告多個用來 做邏輯運算的 methods,而一份 PGML 文件你可以將之視為一個物件 (object)。當你在使用某個 method 時,就像是在物件的世界中,呼叫物件中 某個 method 一般。 如果你熟悉其他任何種類的程式語言的話,那麼,你也能夠很快地熟悉 PGML,不同的是,PGML 是 XML-based 的描述方法,是一種 XML 文件。 當你使用 PGML 來做邏輯運算的描述時,同時也是在撰寫一份 XML 文件, 所以也必須遵守 XML 的規範,除此之外,和平常你在使用的其他程式語言 並沒有什麼不同了。 一份 PGML 文件經過 XSLT 的轉換機制之後,便可以轉換成各種可以在行 動執行環境上執行的程式語言,例如:WMLScript、J2ME 的 MIDP......等等。 也就是說,你在 PGML 上所描述的邏輯運算將會對應到所轉換的目的程式 語言上,當這被轉換而成的程式在行動執行環境上執行時,便會執行你在 PGML 文件中所描述的邏輯運算。. 4.2.2 PGML 的設計理念 A. 引用一般程式語言的概念 因為 PGML 是用來做邏輯描述的語言,所以它最基本的能力要能夠做到像 是:變數宣告、數學式的表示、function (method)的宣告、流程控制以及條 件控制……等等。因此,在參考了幾個常用的程式語言,以及行動執行環境 上可以使用的程式語言(例如:C、Java、WMLScript……等等)之後,試圖從 這些程式語言中整理出一般常使用的概念,或是整理出,身為一種能夠描述 邏輯運算的語言所必須具備的能力。 整理之後,PGML 所必須具備的能力如下: z 可宣告、使用全域變數(global variable)或區域變數(local variable)。 16.

(25) z z z z z z. 有流程控制(flow control),例如:for 迴圈的敘述。 可做條件判斷,例如:if-else 敘述。 可表達數學運算式。 可做邏輯比較,例如:大於、小於、等於。 可做邏輯運算,例如:and、or、not。 可宣告、呼叫 method。. B. 精簡扼要的資料型態 因為 PGML 可以做變數宣告與使用、數學式的表示、邏輯運算、邏輯比較…… 等等。那麼,就一定會遇到資料型態的問題。這也是其他程式語言所必須處 理的一個重要的議題。那麼,就必須去訂定屬於 PGML 的資料型態。 因為所撰寫的 PGML 文件必須經過 XSLT 的轉換機制,轉換成各種可以在 行動執行環境上執行的程式碼。所以,在 PGML 上使用的資料型態,也必 須能夠對應回各種可以在行動執行環境上執行的程式語言的資料型態。也就 是說,各種可以在行動執行環境上執行的程式語言所〝共同擁有〞的資料型 態,就是 PGML 的資料型態了。如此,PGML 的資料型態才能正確無誤地 對應回各種程式語言的資料型態。 經過整理歸納之後,PGML 必須擁有三種資料型態:(1) 布林,boolean (2)整數,int (3)字串,String。 C. 使用簡單的物件的概念 在 PGML 中,加入了簡單的物件慨念。將一份 PGML 文件當做一個物件 (object)來看待,在這個物件中,可以描述其 field members 和 methods,分別 代表該物件的全域變數以及該物件所提供的 method。 加入物件概念的好處是,在撰寫 PGML 時可以以物件的角度來思考並撰寫 PGML 文件,會使得撰寫比較容易。並建議(並非一定),以類似 Java Bean 的方式來寫 PGML 文件,會使得 PGML 文件容易撰寫、使用以及維護。 D. 利用函式庫(library)來增加 PGML 的擴充性以及能力 另一方面,為了增加 PGML 的擴充性以及能力,我們制定了一個屬於 PGML 的標準函式庫(PGML Standard Library)。在這函式庫中,可以做字串的處理 (例如:字串比較、取出子字串、獲得字串長度……等等)以及型別轉換。 這個標準函式庫具有可擴充性,以後可以陸續增加新的函式庫(library)或函 17.

(26) 式(function),也可以由別人制定屬於他們的函式庫。這裡的訣竅在於 XSLT 的轉換機制,只要將函式庫相對應的 XSLT style sheet 撰寫好,經過轉換機 制轉換之後,就能夠轉換為各種行動執行環境上可執行的程式語言。. 4.2.3 PGML 所含有的 elements 根據討論出來的 PGML 所必須具備的能力,以及為了方便使用 PGML 的程 式設計師,能夠很快地熟悉 PGML 的語法,所以 PGML 的 elements 採用一 般程式語言語法的命名規則。下面將所有的 elements 分類列出(表 4-1): [表 4-1. PGML 所有的 elements 說明]. Element. Description. Core elements <object>. 每一份 PGML 文件的 root element (document element),說明這是一份 可視為一個物件(object)的 PGML 文 件。<object>的 element content 即是 所 要 描 述 的 邏 輯 運 算 (logic computing)。. <method>. PGML 最 主 要 的 element , 每 個 <method>的 element content 代表的 是想要執行的邏輯描述。另一方面 來看,一個對外開放的<method>就 相當於 PGML 對外的一個門戶,提 供一個介面(interface)。. <variable>. 在 PGML 中若要宣告變數或是參 數,便是使用這個 element。. <operand>. 在 PGML 中 , 這 也 是 很 重 要 的 element。要使用常數或使用變數都 要靠這個 element 來描述。為邏輯中 最基本的運算子,可代表常數或變 數。. Common elements in many places 用來宣告 global variable 和 local variable 的 element。<declaration>的 element content 即是<variable>的集 合 。 可 為 <object> 或 <method> 的 child element。. <declaration>. 18.

(27) <test>. <test> element content 所代表的語意 是:邏輯判斷。在邏輯上,<test>的 element content 的結果只有兩種: True 或 False。可為<for>、<if>或 <while>的 child element。. <action>. <action>的 element content 所代表的 語意是:啟動邏輯運算。可為<for>、 <if>、<while>和<method>的 child element。也就是說,在流程控制時、 經過條件判斷後以及呼叫某 method 時,所要做的動作,都是<action>的 element content 的內容。. Flow control elements <while>. 代表做 flow control 的 element,語 意 相 當 於 一 般 程 式 語 言 的 while-loop statement。要完成流程控 制的工作必須搭配<test>和<action> 等 child elements。. <for>. 代表做 flow control 的 element,語 意相當於一般程式語言的 for-loop statement。要完成流程控制的工作 必須搭配<init>、<test>、<step>以及 <action>等 child elements。. <init>. <for> element 的 child element 。 <init>的 element content 在語意上即 是代表在做 for-loop 之前的初始值 設定。. <step>. <for> element 的 child element 。 <step>的 element content 在語意上 即是代表每做一次 for-loop 之後的 下個階段的狀態。. Condition control elements 代 表 做 condition control 的 element。語意相當於一般程式語言 的 if-else statement。要完成條件控 制的工作必須搭配<test>和<action> 這兩個 child elements,如果需要的 話 也 必 須 搭 配 <else> 這 個 child. <if>. 19.

(28) element。 在邏輯的語意上,<else>的 element content 即表示當不滿足之前的條件 時,便執行<else> 的 element content 裡的邏輯運算描述。. <else>. Mathematic operation elements <add>. 代表加法的 element。必須要有兩個 child elements,在語意上即代表將 這兩個 child elements 相加。. <sub>. 代表減法的 element。必須要有兩個 child elements,在語意上即代表將 這兩個 child elements 相減。. <mult>. 代表乘法的 element。必須要有兩個 child elements,在語意上即代表將 這兩個 child elements 相乘。. <div>. 代表除法的 element。必須要有兩個 child elements,在語意上即代表將 這兩個 child elements 相除之後取所 得的商數。. <mod>. 代表 modulus 的 element。必須要有 兩個 child elements,在語意上即代 表將這兩個 child elements 相除之後 取所得餘數。. Logic comparison elements <greater-than>. 代表邏輯比較中,”大於”的 element 。 必 須 要 有 兩 個 child elements,在語意上即是比較是否第 一個 child element 大於第二個 child element。. <lesser-than>. 代表邏輯比較中,”小於”的 element 。 必 須 要 有 兩 個 child elements,在語意上即是比較是否第 一個 child element 小於第二個 child element。. <equal-to>. 代表邏輯比較中,”等於”的 element 。 必 須 要 有 兩 個 child elements,在語意上即是比較是否第 一個 child element 等於第二個 child 20.

(29) element。 <not-equal>. 代表邏輯比較中,”不等於”的 element 。 必 須 要 有 兩 個 child elements,在語意上即是比較是否第 一個 child element 不等於第二個 child element。. <greater-or-equal>. 代表邏輯比較中,”大於或等於”的 element 。 必 須 要 有 兩 個 child elements,在語意上即是比較是否第 一個 child element 大於或等於第二 個 child element。. <lesser-or-equal>. 代表邏輯比較中,”小於或等於”的 element 。 必 須 要 有 兩 個 child elements,在語意上即是比較是否第 一個 child element 小於或等於第二 個 child element。. Logic operation elements <and>. 代 表 邏 輯 運 算 中 的 ”and” 的 element 。 必 須 要 有 兩 個 child elements,在語意上即是滿足第一個 child element 且滿足第二個 child element。. <or>. 代表邏輯運算中的”or”的 element。 必須要有兩個 child elements,在語 意上即是滿足第一個 child element 或滿足第二個 child element。. <not>. 代 表 邏 輯 運 算 中 的 ”not” 的 element 。 只 能 有 一 個 child elements , 在 語 意 上 即 是 將 child element 的邏輯顛倒。例如:將 True 變成 False,將 False 變成 True。. Method-call and Library- function-call elements 用來表示要呼叫物件本身 method 的 <call-method> element。 用來表示要使用 library 裡頭的某個 function 的 element。. <lib> Other elements. 為<method>的 child element。用來描. <in> 21.

(30) 述一個 method 所需的參數。child element 為<variable>。 <return>. 屬 於 <action> 或 <else> 的 element content 中的 element,也相當於在 <method>的 element content 之中。 當 method 需要回傳東西時,便在 <action>或<else>的 element content 做 return 的描述。. <assign>. <assign>的 element content 表示將某 個數值或變數的值 assign 給某一變 數。. 4.2.4 PGML 標準函式庫 在制定 PGML 的標準函式庫(PGML Standard Library)上,目前是針對三個資 料型態(boolean、int、String)來制定,主要是提供型別轉換以及各型別專屬 的函式(functions)。在標準函式庫中,我們將所有的函式分成三大類:(1) Integer (2) String (3) Boolean。 在以後,若有需要的話,可以新增標準函式庫裡的分類或是函式。每個人也 可以制定屬於自己的函式庫(library)。因為,只要能將函式庫相對應的 XSLT style sheet 撰寫好,經過轉換機制轉換之後,就能夠轉換為各種可以在行動 執行環境上執行的程式語言了。 表 4-2 為 PGML 的標準函式庫(PGML Standard Library)的整理: [表 4-2. Function. PGML 標準函式庫說明]. Description. Interger toString. 將整數值轉換成相對應的字串。例如: 1234 Æ “1234”。. Abs. 取得整數的絕對值。. Max. 取得兩個整數中的最大值。. Min. 取得兩個整數中的最小值。. maxInt. 取得系統所支援的整數最大值。. minInt. 取得系統所支援的整數最小值。. String parseInt. 將字串轉換成相對應的整數值。例 22.

(31) 如:”1234” Æ 1234。 charAt. 取得字串中某個位置的單一字元。(在 PGML 中,把單一字元當長度為 1 的字串 處理)。. compare. 按照一般程式語言比較字串的方式比較 兩個字串。. Length. 取得字串的長度。. substring. 取得字串中的子字串。. Trim. 刪除字串頭尾的空白字元。. concat. 將兩個字串連接成一個字串。. Booelan toString. 將布林值轉換成相對應的字串。例如:true Æ “true”。false Æ”false”。. 4.2.5 PGML 範例 A. PGML 文件結構 基本上,如果使用過其他任何一種程式語言的話,要撰寫 PGML 文件並不 難,也可以說是很容易上手。因為在描述邏輯運算的概念上,PGML 和其他 的程式語言並沒有什麼不同。唯一不同的是,因為 PGML 是以 XML 為基礎 (XML-based)的描述方法,所以使用 PGML 來描述邏輯運算時,同時也是在 撰寫 XML 文件,所以必須遵守 XML 的規範,必須使用標籤(tag)的方式來 做邏輯運算的描述,除此之外,並沒有什麼不同了。 在觀念上,只需將一份 PGML 文件視為一個物件(object),而這個物件可以 提供 methods 出來使用,而所有的邏輯運算都在 method 裡頭做描述即可。 也就是說,對於 PUML(Pervasive User-interface Markup Language,用來描述 行動應用程式中,使用者介面的描述語言)文件來說,只需要知道這個物件 (即 PGML 文件)所提供出來的 methods(或是稱為介面,interface)即可。 再來,簡單介紹一下 PGML 文件結構的骨架。 PGML 的 root element (document element)為<object>,<object>包含兩種 child element,分別為<declaration>和<method>。在<object>的 element content 中 最多只能有一個<declaration>,最少一個<method>。而其他之前提到的 elements 則是放在<declaration>和<method>的 element content 中,做邏輯運 算描述用的。每種 elements 的詳細用法及說明,請參考表 4-1 和本論文中的 範例。 23.

(32) 以下為 PGML 文件結構的示意圖(圖 4-1): <?xml version="1.0"?> <object name="..." version="1.0" xmlns="http://dcsw3.cis.nctu.edu.tw/Project/Pervasive/PGML/"> <declaration> ... <declaration> <method name="..." return-type="..."> ... </method> <method name="..."> ... </method> ... </object>. [圖 4-1. PGML 文件結構示意圖]. B. 簡單的範例 用 PGML 寫個簡單的邏輯運算描述,如下(圖 4-2): <?xml version="1.0"?> <object name=“Increase5" version="1.0" xmlns="http://dcsw3.cis.nctu.edu.tw/Project/Pervasive/PGML/"> <declaration> <variable type=“int” name=“result” value=“0”/> <declaration> <method name=“incFive" visibility=“public” return-type=“int"> <in> <variable type=“int” name=“num”/> </in> <action> <add result=“result”> <operand type=“int” value=“5”/> <operand select=“num”/> </add> <return select=“result”/> </action> </method> </object>. [圖 4-2. PGML 簡單範例]. 這個例子是描述一個名為 Increase5 的物件,提供了一個 method – incFive。 呼叫這個 method 之後,便會將傳入值加五之後回傳。相對應的 J2ME 程式 碼如下(圖 4-3): public class Increase5{ int result = 0; public int IncFive(int num){ result = 5 + num; return this.result; } }. [圖 4-3. PGML 簡單範例的相對應 J2ME 程式碼] 24.

(33) C. 複雜的範例 使用 PGML 做一個比較複雜的邏輯運算的描述。在這個例子(圖 4-4)中, PGML 的 描 述 採 取 類 似 Java Bean 的 做 法 : 在 一 開 始 , 宣 告 了 兩 個 properties(兩個全域變數) – userName 和 userPassword。隨後描述了兩個 set methods 和兩個 get methods,分別是 setUserName( )、setUserPassword( )、 getUserName( )以及 getUserPassword( )四個 methods。 <?xml version="1.0"?> <object name="UserInfo" version="1.0" xmlns="http://dcsw3.cis.nctu.edu.tw/Project/Pervasive/PGML/"> <declaration> <variable type="String" name="userName" value=""/> <variable type="String" name="userPassword" value=""/> </declaration> <method name="setUserName" visibility="public" return-type="void"> <in> <variable type="String" name="user_name"/> </in> <action> <assign arg1="userName" arg2="user_name"/> </action> </method> <method name="setUserPassword" visibility="public" return-type="void"> <in> <variable type="String" name="passwd"/> </in> <action> <assign arg1="userPassword" arg2="passwd"/> </action> </method> <method name="getUserName" visibility="public" return-type="String"> <action> <return select="userName"/> </action> </method> <method name="getUserPassword" visibility="public" return-type="String"> <action> <return select="userPassword"/> </action> </method> </object>. [圖 4-4. PGML 複雜的範例]. 25.

(34) 這個 PGML 範例經過 XSLT 的轉換機制轉換之後,所產生的 J2ME 程式碼 (圖 4-5)以及 WMLScript 程式碼(圖 4-6)分別如下: /*J2ME "import" declarations*/ public class UserInfo { /*global varibales' declaration*/ private String userName=""; private String userPassword=""; /*constructor*/ public UserInfo(){} /*all methods are here...*/ public void setUserName( String user_name ){ /*local variables' declaration*/ }. this.userName=user_name;. public void setUserPassword( String passwd ){ /*local variables' declaration*/ }. this.userPassword=passwd;. public String getUserName( ){ /*local variables' declaration*/ }. return this.userName;. public String getUserPassword( ){ /*local variables' declaration*/. }. [圖 4-5. }. return this.userPassword;. 轉換之後所產生的 J2ME 程式碼(經過排版)]. /*some pragma are declared here...*/ /*WMLScript interface to set declared global variables*/ extern function globalVarDeclaration() { /*setting all global varibales in this logic object*/ WMLBrowser.setVar("UserInfo_userName", ""); WMLBrowser.setVar("UserInfo_userPassword", ""); } /*all methods are here...*/ extern function setUserName (user_name){ WMLBrowser.setVar("UserInfo_userName", user_name );. }. extern function setUserPassword (passwd){ WMLBrowser.setVar("UserInfo_userPassword", passwd );. }. extern function getUserName (){ return WMLBrowser.getVar("UserInfo_userName");. }. extern function getUserPassword (){ return WMLBrowser.getVar("UserInfo_userPassword");. }. /*WMLScript interface to change value of UI component on some WML card*/ extern function change(component, newValue, callMethod){ if(callMethod == ""){ WMLBrowser.setVar(component, newValue); } else{ if(callMethod == "getUserName"){ WMLBrowser.setVar(component, getUserName());. }. [圖 4-6. }. if(callMethod == "getUserPassword"){ WMLBrowser.setVar(component, getUserPassword());. 轉換之後所產生的 WMLScript 程式碼(經過排版)]. 26. } }.

(35) 4.3 PUML – Pervasive User-interface Markup Language 4.3.1 PUML 簡介 PUML 是一種描述使用者介面(User Interface,簡稱 UI)的描述語言。也就是 將行動應用程式拆成使用者介面以及邏輯運算兩部份之後,PUML 就是專門 負責做使用者介面的描述。 PUML 是一種以 XML 為基礎(XML-based)的使用者介面的描述語言。所以 PUML 必須遵守 XML 的所有規範,並且繼承了 XML 所擁有的特性。PUML 是從 XUL、UIML 以及 WML 之中獲得靈感,但為了使 PUML 更適合運用 在行動裝置上,並且成為一個足以位於抽象層級(abstract level)、代表著在所 有行動執行環境中,所可以呈現的使用者介面。所以,PUML 除了吸收三家 之長外,也擁有自己的設計理念,這將在後面做介紹。 一份 PUML 文件經過 XSLT 的轉換機制之後,便可以轉換成各種在行動執 行環境中可以執行的程式語言,例如:WML、J2ME 的 MIDP......等等。也 就是說,在 PUML 上所描述的使用者介面的呈現方式將會對應到所轉換的 目的程式語言上,當這被轉換而成的程式,在行動執行環境上執行時,便會 呈現在 PUML 文件中所希望的使用者介面的呈現方式。. 4.3.2 PUML 的設計理念 A. 從 XUL、UIML 以及 WML 中獲得靈感 在設計 PUML 之前,參考了幾個也是以 XML 為基礎(XML-based)的使用者 介面描述語言,包括:XUL、UIML 以及 WML。在整理、比較過這三種描 述方法之後,歸納出以下特性,而這些特性是 PUML 必須具備的: z element 數目必須精簡。 z element 名稱,跟相對應的各種行動執行環境中的目標程式語言的 關係,必須盡量減低。 z 必須要有變數(variable)的觀念,以便記錄各個使用者介面中,每個 元件的狀態(state),也可當作邏輯運算的參數。 z 必須要有事件觸發(event-driven)的概念,以便跟邏輯運算部份做連 繫。 z 因為是行動裝置的使用者介面的描述語言,所以使用者介面中的每 個元件之間,彼此的關係必須簡單。 z 採用類似 WML 中 card 的概念(實際上:在 PUML 中使用 board 的 觀念來表達,之後會再說明),以符合行動裝置螢幕較小的特性。 27.

(36) B. 平坦式的使用者介面結構設計 在 PUML 的設計理念中,另一個重點便是,在使用者介面的描述上所做的 特別要求:平坦式的使用者介面結構。 一個完整的使用者介面是由多個元件(component)所構成的,這些元件即是 使用者介面元件(UI component),而統一放置這些元件的場所,稱為使用者 介面容器(UI container)。也就是說,要完成使用者介面的描述,便是在使用 者介面容器(UI container)中,有次序地排放使用者介面元件。在比較複雜的 程式語言中(例如:C++、Java……等等),或是在一些以 XML 為基礎的描述 語言中(例如:XUL、UIML……等等),某些元件也可以當作容器使用,也 就是會出現巢狀的使用者介面結構。例如在一般視窗程式中的多層選單,便 是一種巢狀的使用者介面結構。 而 PUML 所採用的平坦式的使用者介面結搆,便是不允許巢狀的使用者介 面結構的產生。也就是說,任何一種使用者介面元件都不能當做使用者介面 容器使用,所有的使用者介面元件都以相等地位,依序地排放在使用者介面 容器中,不會有巢狀的使用者介面結構產生。 使用平坦式的使用者介面結構的好處是: z PUML 的程式設計師能夠簡單且輕易地描述出想要的使用者介面,而不 需考慮到複雜的使用者介面的設計,可以減少程式發生錯誤以及除錯的 時間。 z 因為 PUML 文件最後會透過 XSLT 的轉換機制,轉換成各種可以在行 動執行環境上執行的程式語言。而這些程式語言所能描寫出來的使用者 介面的複雜度均不相同,所以採用平坦式使用者介面結構的 PUML,便 可以輕易地在轉換過程中,組合出複雜度不同的,目的端的使用者介面 描述(target UI description)。若是 PUML 允許巢狀的使用者介面結構的 話,所描述出來的使用者介面將會很複雜,那麼,若要將複雜的使用者 介面轉換成不同複雜度的使用者介面的話,在轉換完成之後,出現跟原 先所希望的使用者介面語意(UI semantic)不合的情況將會大大地增加。 所以,採用平坦式的使用者介面結構是有其考量以及好處的。. 4.3.3 PUML 所含有的 elements 由於要滿足 PUML 所必須具備的其中一個特性:element 名稱,跟相對應的 各種行動執行環境中的目標程式語言的關係,必須盡量減低。所以要從另一 個角度來思考 element 的名稱,這個名稱要夠抽象,必須不同於各個具體的 目標程式語言中,所使用的使用者介面元件的名稱,但也要能充分地表達出 28.

(37) 所要表達的使用者介面元件。而這些 PUML 的 element 必須也要能夠對應回 各種目標程式語言的使用者介面元件。 所以,設計 PUML 的 element 的方法是:(1)整理出各種可以在行動執行環 境中執行的程式語言(WAP、Personal Java、J2ME、CLI)的共同使用者介面 元件 (2)將這些共同的使用者介面元件加以抽象化(abstraction),成為 PUML 的 elements。 首先,我們粹取出的共同使用者介面元件有:UI container、image、label、 text field、choice group(or list)以及跟事件觸發相關的 button 或 command。再 來便是將這些共同的使用者介面元件加以抽象化,我們將這個抽象化的過程 對應到現實生活中的情況: 在很多家庭裡,冰箱門上總是貼了許許多多的便利貼(例如:3M Post-it),或 是用磁鐵吸附了各式各樣的照片或是便條紙。也就是說,冰箱門相當於家裡 的小小公佈欄,公佈欄上說明了要做的事或是提醒某件事記得去做……等 等,造成了家人之間彼此間的互動。若是把使用者介面的描述,引進公佈欄 的 概 念 的 話 , 將 會 是 什 麼 情 形 呢 ? 公 佈 欄 的 那 塊 板 子 便 相 當 於 UI container , 我 們 可 以 在 上 面 黏 貼 標 籤 (label) , 便 條 紙 (text note) 或 照 片 (picture),也可以釘上勾選單(check list paper)。這些黏貼上去的便條紙、照 片、勾選單所形成的,便相當於使用者介面元件的排版。如此,使用者介面 元件的抽象化便完成了。 在 PUML 中,由以上抽象化過程而來的 elements 有:<board>、<picture>、 <label>、<textnote>、<listpaper>以及<item>。這些 element 代表的義意簡單 說明如下: „ <board> Æ 相對應於公佈欄,即 UI container „ <picture> Æ 相對應於公佈欄上的照片,即圖檔,image „ <label> Æ 相對應於公佈欄上的標籤,即文字(唯讀) „ <textnote> Æ 相對應於公佈欄上的便條紙,即 text filed (可編輯) „ <listpaper> Æ 相對應於公佈欄上的勾選單,即 choice group „ <item> Æ 相對應於勾選單上的選項,即 choice group 的 選項 除了以上基本的 elements 之外,在 PUML 中也有用來描述跟使用者介面相 關額外訊息的 elements,例如:<user-interface>、<layout>,以及在 PUML 中,所會使用到和邏輯運算相關的 elements,例如:<logic-objects>、<object>。 29.

(38) 以及跟事件觸發相關的 elements,例如:<action>、<use-object>、<param>、 <change>、<nextboard>。詳細的 elements 說明請參考表 4-3。 [表 4-3. PUML 所有 elements 的說明]. Element. Description. Core UI Related Elements <user-interface>. 每 一 份 PUML 文 件 的 root element (document element),說明這是一份描 述使用者介面(user interface)的 PUML 文件。. <layout>. PUML document 的 metadata,說明在 同 一 份 PUML document 中 的 所 有 <board>s 要如何做排版。用於以後做 適性化(adaptation)之用,現階段並沒有 任何作用。. <board>. PUML 中核心的 element,代表最基本 的 UI container 單位。. <picture>. 用來表示要在使用者介面上,顯示圖片 的 element。相當於 window 視窗上的 Image。. <label>. 用來表示要在使用者介面上,顯示文字 的 element。相當於 window 視窗上的 Label。. <textnote>. 用來表示要在使用者介面上,顯示單行 文字輸入欄的 element。相當於 window 視窗上的 TextField。. <listpaper>. 用來表示要在使用者介面上,顯示勾選 列表的 element。相當於 window 視窗 上的 Choice Group 或 Choice List。. <item>. 用來表示在使用者介面上,顯示勾選列 表中選項的 element。. Logic Object Related Elements <logic-objects>. <logic-objects>的 element content,是用 來宣告在 PUML 中所要使用的邏輯物 件(logic object)。依照宣告方式不同, 邏輯物件有全域性和區域性兩種 (global logic object 和 local logic object)。child element 只有<object>一 30.

數據

圖 2-1 和圖 2-2 分別表示了 WAP programming model 和 WAP architecture。
表 7-1,比較在 Simple Demo 這個行動應用程式執行時,使用者相同的動作 或指令,在不同的行動執行環境上所呈現出來的樣子和效果。
表 7-2,比較在 Calculator 這個行動應用程式執行時,使用者相同的動作或指 令,在不同的行動執行環境上所呈現出來的樣子和效果。

參考文獻

相關文件

在撰寫網頁應用程式 HTML 的語法當中,以下何者錯誤?(A)&lt;a&gt;是用來製作超連結的標記(Tag) (B)HREF 是一個在&lt;a&gt;與&lt;/a&gt;中指定其他

Quadratically convergent sequences generally converge much more quickly thank those that converge only linearly.

denote the successive intervals produced by the bisection algorithm... denote the successive intervals produced by the

 for…迴圈自初值開始判斷 &lt;條件判斷&gt; 是否為 true,若為 true 則執行 for 迴圈內的敘述,並依 &lt;增量值&gt;,每次增 加 (或減少) 指定的增量值,直至 &lt;條件判斷&gt;

Windows/ Linux/ Mac 各種平台的開發套件,使我們能夠透過各種平台來開發 Android 軟體,所有的 Android 應用程式都是使用 Java

1998 年 2 月,XML 建議標準提出,是目前通用的 XML1.0 版 本標準,XML 的規格便是由 W3C XML 工作群維護並負責增修 跟調整的工作。基本上 SGML、HTML

Excel VBA 乃是以 Visual Basic 程式語言為基礎,提供在 Excel 環境中進 行應用程式開發的能力。在 Excel 環境中「Visual Basic 編輯器」提供了一個

Keywords: action learning, higher education, problem-based learning, fl ipped classroom.. Tzu-An Yen, Associate Professor, Center for Teacher Education, Taipei National University