專利名稱:一種將uoml封裝成應(yīng)用程序編程接口的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子文檔處理技術(shù),特別涉及一種將UOML封裝成應(yīng)用程序 編程接口的方法。
背景技術(shù):
UOML規(guī)范是一系列以"動(dòng)作+對(duì)象"格式定義的、通過(guò)XML語(yǔ)言描述 的文檔庫(kù)系統(tǒng)命令。本申請(qǐng)人在中國(guó)專利申請(qǐng)?zhí)枮镃N200510131641.1的專利 申請(qǐng)說(shuō)明書(shū)中,對(duì)其進(jìn)行了詳細(xì)的說(shuō)明。由于XML具有跨平臺(tái)、跨語(yǔ)言的 能力,所以,UOML規(guī)范的提出,解決了文檔庫(kù)系統(tǒng)命令本身的跨平臺(tái)、跨 語(yǔ)言交換的問(wèn)題。但是,在實(shí)際應(yīng)用過(guò)程中,對(duì)文檔庫(kù)的操作一般通過(guò)編程 語(yǔ)言實(shí)現(xiàn)的代碼控制,因此,在代碼中需要實(shí)現(xiàn)對(duì)UOML XML文本的解析 和處理。如果每個(gè)應(yīng)用開(kāi)發(fā)人員在自己的代碼中實(shí)現(xiàn)對(duì)UOML XML文本的 解析和處理,工作量大且開(kāi)發(fā)效率低下。
發(fā)明內(nèi)容
本發(fā)明要解決的一個(gè)技術(shù)問(wèn)題是提供一種方法,通過(guò)該方法可以將 UOML封裝成不同編程語(yǔ)言的應(yīng)用程序編程接口 (API),以提高文檔庫(kù)系統(tǒng) 應(yīng)用開(kāi)發(fā)者的開(kāi)發(fā)效率。
本發(fā)明提供的將UOML封裝成編程語(yǔ)言的API的方法,包括如下步驟
A,將UOML對(duì)象映射為編程語(yǔ)言的復(fù)合數(shù)據(jù)類型,UOML對(duì)象的屬性 對(duì)應(yīng)于復(fù)合數(shù)據(jù)類型中簡(jiǎn)單數(shù)據(jù)類型變量或復(fù)雜數(shù)據(jù)類型變量,UOML對(duì)象 的子元素對(duì)應(yīng)于復(fù)合數(shù)據(jù)類型中簡(jiǎn)單或復(fù)合數(shù)據(jù)類型變量;
B,將UOML操作映射為編程語(yǔ)言的API函數(shù)原型,UOML操作的對(duì)象 對(duì)應(yīng)于API函數(shù)原型的參數(shù);
C,根據(jù)步驟A、 B中定義的映射,在編程語(yǔ)言的API函數(shù)體內(nèi)將該函數(shù) 對(duì)應(yīng)的操作轉(zhuǎn)換為UOML的操作,并將操作的返回結(jié)果轉(zhuǎn)換為編程語(yǔ)言的返 回類型。
對(duì)于面向?qū)ο蟮木幊陶Z(yǔ)言,上述步驟A中所述的編程語(yǔ)言中的復(fù)合數(shù)據(jù) 類型為類,UOML對(duì)象的屬性和子元素對(duì)應(yīng)于類的成員變量;上述步驟B中 所述的編程語(yǔ)言的API函數(shù)原型為對(duì)應(yīng)類中的成員函數(shù)。面向?qū)ο蟮木幊陶Z(yǔ) 言包括C十+、 Object畫(huà)C、 Delphi、 Java、 Python或Ruby。
對(duì)于非面向?qū)ο蟮木幊陶Z(yǔ)言,上述步驟A中所述的編程語(yǔ)言中的復(fù)合數(shù) 據(jù)類型為結(jié)構(gòu);上述步驟B中所述的編程語(yǔ)言的API函數(shù)原型為全局函數(shù)。 非面向?qū)ο蟮木幊陶Z(yǔ)言包括C、 TCL、 Pascal或Perl。
進(jìn)一步,對(duì)于具有和0++和(語(yǔ)言接口的編程語(yǔ)言,在該編程語(yǔ)言的函 數(shù)體內(nèi),直接調(diào)用0++, C語(yǔ)言封裝成的對(duì)應(yīng)API函數(shù)來(lái)實(shí)現(xiàn)向UOML操作 的轉(zhuǎn)換。
通過(guò)本發(fā)明提供的方法,可以實(shí)現(xiàn)將UOML封裝成編程語(yǔ)言的API。開(kāi) 發(fā)人員在一編程語(yǔ)言上開(kāi)發(fā)對(duì)文檔庫(kù)系統(tǒng)的應(yīng)用時(shí),可以直接調(diào)用生成的封 裝好的該編程語(yǔ)言的API,從而省去了大量的解析UOML的工作量,提高了 開(kāi)發(fā)的效率。
圖1所示為本發(fā)明的將UOML封裝成編程語(yǔ)言API的方法流程圖2所示為本發(fā)明的將UOML封裝成面向?qū)ο笳Z(yǔ)言API的方法流程圖3所示為本發(fā)明的將UOML封裝成非面向?qū)ο笳Z(yǔ)言API的方法流程
圖4所示為本發(fā)明的編程語(yǔ)言的API封裝層次示意圖。
具體實(shí)施例方式
本發(fā)明的基本思想是,利用UOML規(guī)范的"動(dòng)作+對(duì)象"的格式特點(diǎn), 以及UOML對(duì)象和編程語(yǔ)言中的類或結(jié)構(gòu)的內(nèi)在對(duì)應(yīng)關(guān)系,提供一種可以將 UOML封裝為不同的編程語(yǔ)言的應(yīng)用程序編程接口 (API)的方法,從而利 用不同編程語(yǔ)言對(duì)文檔庫(kù)系統(tǒng)進(jìn)行應(yīng)用開(kāi)發(fā)時(shí)可以直接調(diào)用該語(yǔ)言為UOML
提供的API,提高開(kāi)發(fā)人員的開(kāi)發(fā)效率。
如圖1所示,本發(fā)明的將UOML封裝成編程語(yǔ)言API的方法包括如下步
步驟IOI,將UOML對(duì)象映射為編程語(yǔ)言的復(fù)合數(shù)據(jù)類型,UOML對(duì)象
的屬性對(duì)應(yīng)于復(fù)合數(shù)據(jù)類型中簡(jiǎn)單數(shù)據(jù)類型變量或復(fù)雜數(shù)據(jù)類型變量,
UOML對(duì)象的子元素對(duì)應(yīng)于復(fù)合數(shù)據(jù)類型中簡(jiǎn)單或復(fù)合數(shù)據(jù)類型變量。
首先在編程語(yǔ)言中提供UOML對(duì)象的對(duì)應(yīng)表示。利用編程語(yǔ)言的復(fù)合數(shù) 據(jù)類型的用戶自定義功能,將每個(gè)UOML對(duì)象映射到一個(gè)定義的復(fù)合數(shù)據(jù)類 型。復(fù)合數(shù)據(jù)類型可以是面向?qū)ο蟮恼Z(yǔ)言中的類,或者是非面向?qū)ο蟮恼Z(yǔ)言 中的結(jié)構(gòu)。其中,UOML對(duì)象中的屬性在復(fù)合數(shù)據(jù)類型中可以通過(guò)簡(jiǎn)單數(shù)據(jù)
類型的變量或者復(fù)雜數(shù)據(jù)類型的變量來(lái)表示,如整型(INT)、字符類型 (CHAR)或者浮點(diǎn)類型(FLOAT)的變量,或者相應(yīng)的數(shù)組等。UOML對(duì) 象的子元素通常屬于UOML中的對(duì)象,在編程語(yǔ)言中定義了相應(yīng)的復(fù)合數(shù)據(jù) 類型,在這種情況下,在復(fù)合數(shù)據(jù)類型中,UOML對(duì)象的子元素通過(guò)該子元 素對(duì)應(yīng)的復(fù)合數(shù)據(jù)類型的變量來(lái)表示。UOML對(duì)象的一些不是UOML對(duì)象的 子元素也可以通過(guò)簡(jiǎn)單數(shù)據(jù)類型的變量來(lái)表示。需要指出的是,上述的簡(jiǎn)單 類型的變量或者復(fù)雜數(shù)據(jù)類型的變量以及復(fù)合數(shù)據(jù)類型的變量包含指針變量 的情形。
步驟102,將UOML操作映射為編程語(yǔ)言的API函數(shù)原型,UOML操作
的屬性和子元素對(duì)應(yīng)于API函數(shù)原型的參數(shù)。
由于UOML規(guī)范中的操作可能支持多個(gè)對(duì)象,在將UOML操作轉(zhuǎn)換為 編程語(yǔ)言的API函數(shù)原型時(shí),需要考慮該編程語(yǔ)言是否支持函數(shù)的多態(tài)性定 義。如果編程語(yǔ)言不支持函數(shù)的多態(tài)性定義,需要為每個(gè)操作支持的對(duì)象定 義一個(gè)API函數(shù)模型,如果支持,則可以只定義一個(gè)API函數(shù)原型,通過(guò)函 數(shù)原型中參數(shù)的類型來(lái)區(qū)分對(duì)不同對(duì)象的操作。UOML操作的屬性和子元素 對(duì)應(yīng)于API函數(shù)原型的參數(shù)。對(duì)于面向?qū)ο蟮恼Z(yǔ)言,可以將API函數(shù)定義為 類的成員函數(shù),在這種情況下,如果操作的屬性或者子元素同時(shí)是該類的成 員變量,則在成員函數(shù)原型中可以不包含這些參數(shù),而在函數(shù)體中直接引用 這些變量。當(dāng)然,也可以和非面向?qū)ο蟮恼Z(yǔ)言一樣,把操作所有的屬性和子 元素都作為函數(shù)原型的參數(shù)。
步驟103,根據(jù)函數(shù)原型對(duì)應(yīng)的操作和函數(shù)原型的參數(shù),在編程語(yǔ)言的 API函數(shù)體內(nèi)實(shí)現(xiàn)函數(shù)功能向UOML操作的轉(zhuǎn)換和執(zhí)行,并將操作的返回結(jié) 果轉(zhuǎn)換為編程語(yǔ)言的返回類型。
在編程語(yǔ)言的API函數(shù)體內(nèi),根據(jù)函數(shù)原型和UOML操作的映射關(guān)系, 以及函數(shù)參數(shù)和UOML操作的屬性和子元素的對(duì)應(yīng)關(guān)系,生成UOML的操 作命令。將生成的操作命令發(fā)送給文檔庫(kù)系統(tǒng),文檔庫(kù)系統(tǒng)執(zhí)行后會(huì)返回執(zhí) 行結(jié)果。由于文檔庫(kù)系統(tǒng)返回的執(zhí)行結(jié)果是UOML格式,所以需要將其轉(zhuǎn)換 為編程語(yǔ)言中對(duì)應(yīng)的返回類型。
通常編程語(yǔ)言可以分為面向?qū)ο蟮恼Z(yǔ)言和非面向?qū)ο蟮恼Z(yǔ)言。由于編程 語(yǔ)言本身的特點(diǎn)不同,所以對(duì)不同的編程語(yǔ)言,將UOML封裝成編程語(yǔ)言 API的具體實(shí)現(xiàn)也有一些不同。
下面以C十+為例,介紹UOML封裝成面向?qū)ο蟮恼Z(yǔ)言的API的方法。
如圖2所示,為本發(fā)明提供的一種將UOML封裝成面向?qū)ο笳Z(yǔ)言API 的方法流程圖。包括如下步驟
步驟201,將UOML對(duì)象映射為面向?qū)ο笳Z(yǔ)言的類,對(duì)象的屬性對(duì)應(yīng)于 類中簡(jiǎn)單數(shù)據(jù)類型變量或復(fù)雜數(shù)據(jù)類型變量,對(duì)象的子元素對(duì)應(yīng)于類中的類 變量或簡(jiǎn)單數(shù)據(jù)類型變量。
以UOML文檔對(duì)象為例,首先在0++語(yǔ)言中定義一個(gè)對(duì)應(yīng)的類 UOML一Doc。該類可以從0++的所有類的基類(:01^(^派生,也可以沒(méi)有派 生的基類。還有一種實(shí)現(xiàn)是,首先為所有的UOML對(duì)象定義一個(gè)基類-
class UOML一Obj
public:
virtual UOML—Obj();
void Init(UOML一Obj—Type type);
UOML一Obj Clone(bool bMaintainRef = true);
};
然后在基類UOML—Obj上派生UOML_Doc。
為UOML文檔對(duì)象定義對(duì)應(yīng)類UOML—Doc之后,將UOML文檔對(duì)象的 子元素映射為UOML—Doc類的對(duì)應(yīng)的成員變量。UOML文檔對(duì)象包含 metadata (元數(shù)據(jù)),pageset (各頁(yè)面)fontinfo (嵌入字庫(kù))等子元素。這些子元素分別有對(duì)應(yīng)的類metadata用UOML_Meta類表示,pageset用 UOML—Page類表示,fontinfo用UOML—Fontlnfo類表示。所以UOML文檔 對(duì)象的這些子元素在UOML—Doc類定義中有對(duì)應(yīng)的成員變量:UOML一Meta metadata; UOML—Page *pageset; UOML—Fontlnfo fontinfo。其中,pageset 子元素還可以通過(guò)UOML—Page的數(shù)組來(lái)表示。由于UOML文檔對(duì)象不包含 屬性,所以沒(méi)有屬性向成員變量的映射。
同理,對(duì)于UOML頁(yè)對(duì)象,為其定義UOML—Page類。將UOML頁(yè)對(duì) 象的resolution, size, rotation, log等屬性,在UOML一Page類定義中用整型或 浮點(diǎn)類型的成員變量表示,而UOML頁(yè)對(duì)象的GS, metadata等子元素在 UOML—Page類中以相應(yīng)類的成員變量表示。
通過(guò)上述的方式,可以為UOML的所有對(duì)象在面向?qū)ο蟮恼Z(yǔ)言中定義相 應(yīng)的類,包括文檔庫(kù)(UOML—DOCBASE)、文檔集(UOML_DOCSET)、文 檔(UOML—DOC)、頁(yè)(UOML_PAGE)、層(UOML—LAYER)、對(duì)象組
(UOML—OBJGROUP)、文字(UOML—TEXT)、圖像(UOML_IMAGE)、 直線(UOML_LINE)、曲線(UOML—BEIZER)、圓弧(UOML—ARC)、路徑
(UOML—PATH )、源文件 (UOML—SRCFILE )、背景色
(UOML—B ACKCOLOR)、前景顏色(UOML—COLOR) 、 ROP (UOML_ROP)、 字符尺寸(UOML—CHARSIZE)、 字體(UOML一TYPEFACE)、 角色
(UOML—ROLE)、權(quán)限(UOML—PRIV)等對(duì)象。本技術(shù)領(lǐng)域的技術(shù)人員可 以參照上面的說(shuō)明來(lái)具體實(shí)現(xiàn),在此不一一贅述。
步驟202,將UOML操作映射為面向?qū)ο笳Z(yǔ)言的類的成員函數(shù),UOML 操作的屬性和子元素對(duì)應(yīng)于類成員函數(shù)的參數(shù)。
以UOML文檔對(duì)象為例,作用于UOML文檔對(duì)象的操作,如打開(kāi)
(UOML—OPEN)、關(guān)閉(UOML_CLOSE)等,在UOML_Doc類內(nèi)定義相 應(yīng)的成員函數(shù)Open()和Close()。操作UOML—OPEN的屬性包括文檔所在的 位置信息,將作為成員函數(shù)Open()的參數(shù)Open(char *szDocPath)。而 UOML一CLOSE的子元素包括文檔對(duì)象的句柄,也將作為成員函數(shù)CloseO的 參數(shù)。
對(duì)于UOML的其它操作,如獲取(UOML_GET)、設(shè)置(UOML—SET)、
插入(UOML—INSERT)、 刪除(UOML—DELETE )、 檢索査詢 (UOML—QUERY)等也可以通過(guò)上述的方式對(duì)應(yīng)到類的成員函數(shù)。
步驟203,在成員函數(shù)體內(nèi)將該函數(shù)對(duì)應(yīng)的操作轉(zhuǎn)換為UOML的操作, 并將操作的返回結(jié)果轉(zhuǎn)換為面向?qū)ο笳Z(yǔ)言的返回類型。
例如在UOML—Doc類的成員函數(shù)Open(char tszDocPath)的實(shí)體內(nèi),把相 應(yīng)的調(diào)用轉(zhuǎn)為對(duì)文檔庫(kù)調(diào)用的UOML XML字符串,并發(fā)送到文檔庫(kù)
<formula>formula see original document page 8</formula>
文檔庫(kù)收到請(qǐng)求后即執(zhí)行操作。如果打開(kāi)文檔成功,即返回XML字符 串。在Open()函數(shù)體內(nèi)部,根據(jù)接到的字符串構(gòu)建UOML一Doc對(duì)象,然后作 為函數(shù)的返回值返回該對(duì)象。
上面以0++語(yǔ)言為例對(duì)面向?qū)ο蟮恼Z(yǔ)言進(jìn)行UOML到API的封裝方法, 可以看出的是,上述方法對(duì)其它的一些面向?qū)ο蟮恼Z(yǔ)言,如Object-C、 Delphi、 Java、 Python、 Ruby等同樣適用。
下面以編程語(yǔ)言C為例,介紹UOML封裝成非面向?qū)ο笳Z(yǔ)言的API的 方法。
如圖3所示,為本發(fā)明提供的一種將UOML封裝成非面向?qū)ο笳Z(yǔ)言API 的方法流程圖。包括如下步驟
步驟301,將UOML對(duì)象映射為非面向?qū)ο笳Z(yǔ)言的結(jié)構(gòu),對(duì)象的屬性對(duì) 應(yīng)于結(jié)構(gòu)中簡(jiǎn)單數(shù)據(jù)類型變量或復(fù)雜數(shù)據(jù)類型變量,對(duì)象的子元素對(duì)應(yīng)于結(jié) 構(gòu)中結(jié)構(gòu)變量或簡(jiǎn)單數(shù)據(jù)類型變量。
以UOML文檔對(duì)象為例,首先在C語(yǔ)言中定義一個(gè)對(duì)應(yīng)的結(jié)構(gòu) struct—UOML_Doc o
為UOML文檔對(duì)象定義對(duì)應(yīng)結(jié)構(gòu)struct-UOML—Doc之后,將UOML文 檔對(duì)象的子元素映射為結(jié)構(gòu)struct—UOML-Doc的對(duì)應(yīng)的成員變量。UOML文 檔對(duì)象包含metadata (元數(shù)據(jù)),pageset (各頁(yè)面)fontinfo (嵌入字庫(kù))等子 元素。這些子元素分別有對(duì)應(yīng)的結(jié)構(gòu)定義:metadata用結(jié)構(gòu)struct—UOML_Meta
表示,pageset用結(jié)構(gòu)structJJOML一Page表示,fontinfo用結(jié)構(gòu) struct一UOML一Fontlnfo表示。所以UOML文檔對(duì)象的這些子元素在結(jié)構(gòu) structJJOML—Doc定義中有對(duì)應(yīng)的成員變量struct一UOML—Meta metadata; struct_UOML—Page *pageset; struct—UOML—Fontinfo fontinfo。其中,pageset 子元素還可以通過(guò)structJJOML—Page的數(shù)組來(lái)表示。由于UOML文檔對(duì)象 不包含屬性,所以沒(méi)有屬性向成員變量的映射。
同理,對(duì)于UOML頁(yè)對(duì)象,為其定義結(jié)構(gòu)struct—UOML—Page。將UOML 頁(yè)對(duì)象的resolution, size, rotation, log等屬性,在結(jié)構(gòu)struct—UOML_Page定義 中用整型或浮點(diǎn)類型的成員變量表示,而UOML頁(yè)對(duì)象的GS, metadata等 子元素在結(jié)構(gòu)struct—UOML_Page中以相應(yīng)的成員變量表示。
通過(guò)上述的方式,可以為UOML的所有對(duì)象在非面向?qū)ο蟮恼Z(yǔ)言中定義 相應(yīng)的結(jié)構(gòu),包括文檔庫(kù)(UOML_DOCBASE)、文檔集(UOML—DOCSET)、 文檔(UOML—DOC)、頁(yè)(UOML—PAGE)、層(UOML—LAYER)、對(duì)象組
(UOML—OBJGROUP)、文字(UOML—TEXT)、圖像(UOML—IMAGE)、 直線(UOML—LINE)、曲線(UOML—BEIZER)、圓弧(UOML—ARC)、路徑
(UOML—PATH )、 源文件 (UOML—SRCFILE )、 背景色
(UOML_B ACKCOLOR )、前景顏色(UOML—COLOR ) 、 ROP (UOML—ROP )、 字符尺寸(UOML_CHARSIZE)、 字體(UOML_TYPEFACE)、角色
(UOML一ROLE)、權(quán)限(UOML_PRIV)等對(duì)象。本技術(shù)領(lǐng)域的技術(shù)人員可 以參照上面的說(shuō)明來(lái)具體實(shí)現(xiàn),在此不一一贅述。
步驟302,將UOML操作映射為非面向?qū)ο笳Z(yǔ)言的全局函數(shù)原型,UOML
操作的屬性和子元素對(duì)應(yīng)于函數(shù)原型的參數(shù)。
以UOML文檔對(duì)象為例,對(duì)于作用于UOML文檔對(duì)象的操作,如打開(kāi) (UOML—OPEN)、關(guān)閉(UOML—CLOSE)等,定義相應(yīng)的API函數(shù)原型-struct—UOML—Doc* UOML—Doc—Open (char *szDocPath)
和
void UOML_Doc_Close(HANDLE *hDocHandle)。 操作UOML_OPEN的屬性包括文檔所在的位置信息,將作為API函數(shù) UOML—Doc—Open ()的參數(shù)szDocPath。而UOML—CLOSE的子元素包括文
檔對(duì)象的句柄,也將作為API函數(shù)UOML—Doc—Close的參數(shù)hDocHandle。
對(duì)于UOML的其它操作,如獲取(UOML一GET)、設(shè)置(UOML—SET)、 插入(UOML—INSERT)、 刪除(UOML_DELETE )、 檢索査詢 (UOML—QUERY)等也可以通過(guò)上述的方式對(duì)應(yīng)到API函數(shù)原型。
步驟303,在函數(shù)體內(nèi)將該函數(shù)對(duì)應(yīng)的操作轉(zhuǎn)換為UOML的操作,并將 操作的返回結(jié)果轉(zhuǎn)換為非面向?qū)ο笳Z(yǔ)言的返回類型。
例如在API函數(shù)UOML_Doc—Open (char承szDocPath)的實(shí)體內(nèi),把相應(yīng) 的調(diào)用轉(zhuǎn)為對(duì)文檔庫(kù)調(diào)用的UOML XML字符串,并發(fā)送到文檔庫(kù)
< xml version="1.0" encoding="UTF-8" >
〈UOML一OPEN create="true"> <path val=szDocPath/>
</UOML—OPEN>
文檔庫(kù)收到請(qǐng)求后即執(zhí)行操作。如果打開(kāi)文檔成功,即返回XML字符 串。在UOML一Doc一Open()函數(shù)體內(nèi)部,根據(jù)接到的字符串構(gòu)建UOML一Doc 對(duì)象,然后作為函數(shù)的返回值返回該對(duì)象。
上面以C語(yǔ)言為例對(duì)非面向?qū)ο蟮恼Z(yǔ)言進(jìn)行UOML到API的封裝方法, 可以看出的是,上述方法對(duì)其它的一些非面向?qū)ο蟮恼Z(yǔ)言,如TCL、 Pascal、 Peri等同樣適用。
如圖4所示,為本發(fā)明的編程語(yǔ)言的封裝層次示意圖。過(guò)程401表示的 是將(:"++語(yǔ)言封裝的API在對(duì)應(yīng)函數(shù)體內(nèi)直接轉(zhuǎn)換為UOML XML操作命 令,過(guò)程402表示的是將其它非(:"++的編程語(yǔ)言封裝的API在對(duì)應(yīng)函數(shù)體 內(nèi)直接轉(zhuǎn)換為UOML XML操作命令。對(duì)于其它非0^++的編程語(yǔ)言的API 封裝,除了在對(duì)應(yīng)的API函數(shù)體內(nèi)直接轉(zhuǎn)換為UOML XML操作命令,還可
以利用這些編程語(yǔ)言跟0++或0:語(yǔ)言的接口,在該編程語(yǔ)言的函數(shù)體內(nèi),直
接調(diào)用C++, C語(yǔ)言封裝成的對(duì)應(yīng)API函數(shù),正如過(guò)程403所示。而實(shí)際向 UOML XML操作命令的轉(zhuǎn)換在(3/0++封裝的API函數(shù)體內(nèi)完成。以編程語(yǔ) 言Java為例,可以利用Java語(yǔ)言的本地接口規(guī)范(Java Native Interface,簡(jiǎn) 稱JNI),在Java封裝的API函數(shù)體內(nèi),綁定(binding) (2^++封裝的對(duì)應(yīng) API函數(shù),而不需要進(jìn)行直接的UOML XML轉(zhuǎn)換。大多數(shù)腳本語(yǔ)言都提供
了利用0++或<:語(yǔ)言作擴(kuò)展的機(jī)制,利用這種機(jī)制,就可以實(shí)現(xiàn)腳本語(yǔ)言的
API對(duì)本地應(yīng)用程序API函數(shù)的綁定。上述的腳本語(yǔ)言,除了Java,還可以 包括TCL、 Perl、 Python和Ruby等語(yǔ)言。
通過(guò)上述提供的方法,可以實(shí)現(xiàn)將UOML封裝成編程語(yǔ)言的API。開(kāi)發(fā) 人員在一編程語(yǔ)言上開(kāi)發(fā)對(duì)文檔庫(kù)系統(tǒng)的應(yīng)用時(shí),可以直接調(diào)用生成的該編 程語(yǔ)言封裝的的API,從而省去了大量的解析UOML的工作量,提高了開(kāi)發(fā) 的效率。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不 局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可 輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明 的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種將UOML封裝成編程語(yǔ)言的應(yīng)用程序編程接口API的方法,其特征在于,包括如下步驟A,將UOML對(duì)象映射為編程語(yǔ)言的復(fù)合數(shù)據(jù)類型,UOML對(duì)象的屬性對(duì)應(yīng)于復(fù)合數(shù)據(jù)類型中簡(jiǎn)單數(shù)據(jù)類型變量或復(fù)雜數(shù)據(jù)類型變量,UOML對(duì)象的子元素對(duì)應(yīng)于復(fù)合數(shù)據(jù)類型中簡(jiǎn)單或復(fù)合數(shù)據(jù)類型變量;B,將UOML操作映射為編程語(yǔ)言的API函數(shù)原型,UOML操作的對(duì)象對(duì)應(yīng)于API函數(shù)原型的參數(shù);C,根據(jù)步驟A、B中定義的映射,在編程語(yǔ)言的API函數(shù)體內(nèi)將該函數(shù)對(duì)應(yīng)的操作轉(zhuǎn)換為UOML的操作,并將操作的返回結(jié)果轉(zhuǎn)換為編程語(yǔ)言的返回類型。
2. 如權(quán)利要求1所述的方法,其特征在于,所述編程語(yǔ)言為面向?qū)ο蟮?編程語(yǔ)言,步驟A中所述的編程語(yǔ)言中的復(fù)合數(shù)據(jù)類型為類,UOML對(duì)象的 屬性和子元素對(duì)應(yīng)于類的成員變量;步驟B中所述的編程語(yǔ)言的API函數(shù)原 型為對(duì)應(yīng)類中的成員函數(shù)。
3. 如權(quán)利要求2所述的方法,其特征在于,所述的面向?qū)ο蟮木幊陶Z(yǔ)言 包括C"Hf、 Object-C、 Delphi、 Java、 Python或Ruby。
4. 如權(quán)利要求1所述的方法,其特征在于,所述編程語(yǔ)言為非面向?qū)ο?的編程語(yǔ)言,步驟A中所述的編程語(yǔ)言中的復(fù)合數(shù)據(jù)類型為結(jié)構(gòu);步驟B中 所述的編程語(yǔ)言的API函數(shù)原型為全局函數(shù)。
5. 如權(quán)利要求4所述的方法,其特征在于,所述的非面向?qū)ο蟮木幊陶Z(yǔ) 言包括C、 TCL、 Pascal或Perl 。
6. 如權(quán)利要求2或4所述的方法,其特征在于,所述編程語(yǔ)言具有和C 或者0++的接口 ,步驟C中通過(guò)調(diào)用C十+或C語(yǔ)言封裝的UOML的API函 數(shù)來(lái)實(shí)現(xiàn)向UOML操作的轉(zhuǎn)換。
7. 如權(quán)利要求6所述的方法,其特征在于,所述的編程語(yǔ)言包括Java、 TCL、 Perl、 Python或Ruby 。
全文摘要
本發(fā)明公開(kāi)了一種將UOML封裝成API的方法,包括如下步驟將UOML對(duì)象映射為編程語(yǔ)言的復(fù)合數(shù)據(jù)類型,UOML對(duì)象的屬性對(duì)應(yīng)于復(fù)合數(shù)據(jù)類型中簡(jiǎn)單數(shù)據(jù)類型變量或復(fù)雜數(shù)據(jù)類型變量,UOML對(duì)象的子元素對(duì)應(yīng)于復(fù)合數(shù)據(jù)類型中的簡(jiǎn)單或復(fù)合數(shù)據(jù)類型變量;將UOML操作映射為編程語(yǔ)言的API函數(shù)原型,UOML操作的對(duì)象對(duì)應(yīng)于API函數(shù)原型的參數(shù);根據(jù)上述步驟中定義的映射,在編程語(yǔ)言的API函數(shù)體內(nèi)將該函數(shù)對(duì)應(yīng)的操作轉(zhuǎn)換為UOML的操作,并將操作的返回結(jié)果轉(zhuǎn)換為編程語(yǔ)言的返回類型。通過(guò)上述的方法實(shí)現(xiàn)UOML針對(duì)不同編程語(yǔ)言的API函數(shù),從而不同編程語(yǔ)言的應(yīng)用開(kāi)發(fā)者可以直接通過(guò)調(diào)用對(duì)應(yīng)的API函數(shù)來(lái)實(shí)現(xiàn)文檔庫(kù)系統(tǒng)上的應(yīng)用,提高了開(kāi)發(fā)效率。
文檔編號(hào)G06F9/44GK101192141SQ200610114649
公開(kāi)日2008年6月4日 申請(qǐng)日期2006年11月20日 優(yōu)先權(quán)日2006年11月20日
發(fā)明者王東臨, 鄒開(kāi)紅 申請(qǐng)人:北京書(shū)生國(guó)際信息技術(shù)有限公司