張小梅 江曉谷
摘要:該文介紹了采用面向?qū)ο蠓椒枋鲂畔⒓译娫O(shè)備的信息家電接口定義語(yǔ)言IAIDL,然后采用XML描述信息家電IAIDL文檔并制定了IAIDL語(yǔ)言規(guī)范,并在android系統(tǒng)上實(shí)現(xiàn)了IAIDL解析器。
關(guān)鍵詞:信息家電;信息家電接口定義語(yǔ)言IAIDL;IAIDL解析器
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)04-0864-03
現(xiàn)今社會(huì)各種小型移動(dòng)智能設(shè)備越來越普及,例如智能手機(jī),平板電腦,個(gè)人數(shù)字助理(PDAs)等??梢娪靡苿?dòng)設(shè)備遠(yuǎn)程控制信息家電將是未來智能家居系統(tǒng)的發(fā)展方向。之前很多研究工作都是將重點(diǎn)放在信息家電的萬(wàn)能遙控器界面的研究上:斯坦福的ICrafter就是一個(gè)分布式信息家電接口的萬(wàn)能遙控器的框架;UIA則使用基于XML語(yǔ)言的MoDAL,該MoDAL可利用XML描述來動(dòng)態(tài)創(chuàng)建用戶接口界面;卡耐基梅隆大學(xué)近年來的研究也是集中在萬(wàn)能遙控器的動(dòng)態(tài)生成方面[1]。而本文將從現(xiàn)在發(fā)展趨勢(shì)良好的android手機(jī)系統(tǒng)出發(fā),提出了信息家電接口定義語(yǔ)言IAIDL,對(duì)該語(yǔ)言設(shè)計(jì)了統(tǒng)一的格式規(guī)范,同時(shí)對(duì)基于安卓的XML解析技術(shù)進(jìn)行了研究。
1 IAIDL語(yǔ)言與其功能
信息家電接口定義語(yǔ)言(IAIDL, Information Appliance Interface Definition Language)是一種用來定義家庭網(wǎng)絡(luò)中信息家電屬性與功能的描述語(yǔ)言[2]。
通過IAIDL語(yǔ)言的運(yùn)用,當(dāng)一種按照信息家電描述語(yǔ)言格式定義的新信息家電設(shè)備接入系統(tǒng)時(shí),該設(shè)備能夠自動(dòng)地向家庭網(wǎng)關(guān)進(jìn)行注冊(cè),所有在線的遠(yuǎn)程信息家電遙控器能自動(dòng)發(fā)現(xiàn)新信息家電設(shè)備的功能接口,從而實(shí)現(xiàn)新信息家電設(shè)備的動(dòng)態(tài)接入。為了實(shí)現(xiàn)家電之間的相互協(xié)作,各個(gè)信息家電(IA)向其他家電和用戶通過IAIDL 文檔宣告自己所具有的功能和屬性, 該IAIDL文檔通過IAIDL 編譯器之后將中間文檔存儲(chǔ)到網(wǎng)關(guān)上,以提供給萬(wàn)能遙控器進(jìn)行訪問從而實(shí)現(xiàn)對(duì)各個(gè)家電的控制。
2 IAIDL格式規(guī)范
可擴(kuò)展標(biāo)記語(yǔ)言 (Extensible Markup Language, XML) 的設(shè)計(jì)目標(biāo)[3],強(qiáng)調(diào)在互聯(lián)網(wǎng)上的簡(jiǎn)單性,普遍性和實(shí)用性。用XML 文檔來表示IAIDL 是合適的。我們定義出DTD標(biāo)準(zhǔn)文件作為XML語(yǔ)言的約束, 從而統(tǒng)一XML語(yǔ)言的描述方式。不同的公司只需要根據(jù)DTD文件,都能建立XML文件且可以進(jìn)行驗(yàn)證,這樣就可以實(shí)現(xiàn)網(wǎng)絡(luò)共享和數(shù)據(jù)交互。DTD(Document Type Definition) 是一套關(guān)于標(biāo)記符的語(yǔ)法規(guī)則,可通過比較XML文檔和DTD文件來看文檔是否符合規(guī)范,這樣就為我們進(jìn)一步研究XML解析技術(shù)打下了基礎(chǔ)。
以信息空調(diào)為例,XML文檔的一般性規(guī)范格式為:
對(duì)以上標(biāo)準(zhǔn)的具體分析如下:
每個(gè)家電都有如下屬性:
name: 家電類型的唯一標(biāo)識(shí),例如是空調(diào)還是電視機(jī);
manufacturer:家電的廠商,例如是海爾或者TCL.
對(duì)于顯示狀態(tài)列表,以空調(diào)的溫度狀態(tài)為例,以XML描述如下:
其中,
length/height:規(guī)定動(dòng)態(tài)生成狀態(tài)面板的長(zhǎng)度與高度;
X/Y:動(dòng)態(tài)生成的狀態(tài)面板的左上角X,Y坐標(biāo)
State:信息家電的某個(gè)狀態(tài)信息,以空調(diào)為例,state有溫度,開關(guān)狀態(tài),風(fēng)強(qiáng)等等。
在XML文件中每增加一個(gè)
對(duì)于控制狀態(tài)列表,以空調(diào)的溫度狀態(tài)為例,以XML描述如下:
在XML文件中每增加一個(gè)
3 PULL解析技術(shù)
在Android中, 我們最常用的解析器就是DOM解析器、SAX解析器和PULL解析器。其中PULL解析器很小巧,解析速度快,非常適合在Android移動(dòng)設(shè)備中使用,Android系統(tǒng)內(nèi)部也是采用PULL解析器對(duì)XML文件進(jìn)行解析的[4],因此我們考慮使用PULL解析技術(shù)。
我們首先設(shè)置一個(gè)JAVA類來存放數(shù)據(jù),通過這個(gè)類我們存儲(chǔ)讀取的IAIDL文件所有的節(jié)點(diǎn)和數(shù)據(jù)。PULL在解析IAIDL文件時(shí),IAIDL文件是以文件流的形式輸入的。解析器先將全部文件數(shù)據(jù)讀到一個(gè)字符數(shù)組中,然后再開始一個(gè)一個(gè)字符往后讀取。PULL解析器每讀完一段字符后不會(huì)自動(dòng)往后解析了,所以我們要使用API pullParser.next()進(jìn)入下一事件。由一個(gè)switch結(jié)構(gòu)來判斷這個(gè)事件的類型,并對(duì)不同類型執(zhí)行不同的操作。
JAVA PULL API主要提供了五類事件:
START_DOCUMENT
文件開始,解析器還沒有讀取任何輸入。
START_TAG
解析器讀到了一個(gè)開始節(jié)點(diǎn)。
TEXT
解析器取得了一個(gè)節(jié)點(diǎn)后文本。
END_TAG
解析器讀到了一個(gè)結(jié)束節(jié)點(diǎn)。
END_DOCUMENT
文件結(jié)束,解析過程結(jié)束。
我們以空調(diào)的IAIDL文件為例,解析過程如下:
IAIDL解析器PULLParser的運(yùn)行情況良好,可成功將IAIDL文檔進(jìn)行解析和存儲(chǔ),并可將文檔中數(shù)據(jù)顯示在android應(yīng)用程序中。該文提出的IAIDL語(yǔ)言與其規(guī)范和IAIDL解析技術(shù)的實(shí)現(xiàn)為后續(xù)信息家電萬(wàn)能遙控見面的動(dòng)態(tài)生成,遠(yuǎn)程遙控信息家電等打下了基礎(chǔ)。
參考文獻(xiàn):
[1] Shieh Wen-Gong, Wang Jian-Min, Horng Wen-Bing.Secure remote control model for information appliances[C] .Intelligence and Security Informatics,2008. IEEE International Conference , 2008: 222 – 224.
[2] 陽(yáng)俐君,劉宏.信息家電接口定義語(yǔ)言(IAIDL)的研究[J].計(jì)算機(jī)與現(xiàn)代化,2007(4):13-16.
[3] Android實(shí)現(xiàn)XML解析技術(shù)[EB/OL].http://www.2cto.com/kf/201202/121173.html.
[4] XML PULL[EB/OL].http://www.xmlpull.org/.