張朋
摘要:論文申報(bào)系統(tǒng)中規(guī)則生成/解析引擎用于處理系統(tǒng)中的規(guī)則信息,實(shí)現(xiàn)專(zhuān)業(yè)論文審核通過(guò)標(biāo)準(zhǔn)中課程及成績(jī)之間的邏輯關(guān)系與考生實(shí)際課程、成績(jī)的映射。它主要包括規(guī)則生成引擎與規(guī)則解析引擎,規(guī)則生成引擎可以處理系統(tǒng)中的群組條件信息并生成使用ETJRDL描述的XML規(guī)則文件來(lái)定義系統(tǒng)中的審核規(guī)則,規(guī)則解析引擎處理XML規(guī)則文件并獲取審核規(guī)則信息。
關(guān)鍵詞: 規(guī)則生成引擎;規(guī)則解析引擎
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)31-0084-02
論文申報(bào)系統(tǒng)服務(wù)器端運(yùn)行于WEB容器中,它響應(yīng)來(lái)自客戶(hù)端的訪(fǎng)問(wèn)請(qǐng)求,處理來(lái)自客戶(hù)端的各種系統(tǒng)信息并完成相應(yīng)的業(yè)務(wù)處理與數(shù)據(jù)信息持久功能,它主要包括規(guī)則生成/解析引擎、業(yè)務(wù)處理、數(shù)據(jù)持久等功能模塊。本文根據(jù)實(shí)際的應(yīng)用需求,大多情況選擇Castor框架來(lái)實(shí)現(xiàn)XML文件與內(nèi)存Java對(duì)象的映射,并基于此實(shí)現(xiàn)規(guī)則生成/解析引擎。
1 數(shù)據(jù)綁定對(duì)象(DBO)模式與Castor
使用ETJRDL描述的XML規(guī)則文件來(lái)記錄系統(tǒng)中的規(guī)則信息,需要一種高效的方式處理這些XML文件,以獲取系統(tǒng)業(yè)務(wù)邏輯處理需要的規(guī)則信息。這需要將XML文檔數(shù)據(jù)轉(zhuǎn)換為業(yè)務(wù)數(shù)據(jù),也就是實(shí)現(xiàn)XML文檔數(shù)據(jù)與內(nèi)存中Java對(duì)象的映射。隨著XML相關(guān)技術(shù)的發(fā)展,業(yè)界出現(xiàn)了很多處理XML的API,如將XML數(shù)據(jù)作為流式數(shù)據(jù)進(jìn)行處理的SAX,在內(nèi)存中為XML文檔數(shù)據(jù)構(gòu)造模型樹(shù)的DOM及其專(zhuān)為Java開(kāi)發(fā)人員定制的JDOM,以及對(duì)對(duì)SAX與DOM的API進(jìn)行抽象進(jìn)而產(chǎn)生的JAXP等。這些處理XML數(shù)據(jù)信息的API各有利弊但都不適合一般性的應(yīng)用需求。最好有一種方法能在Java對(duì)象與XML之間方便的序列化與反序列化的工具來(lái)實(shí)現(xiàn)XML文檔數(shù)據(jù)與Java對(duì)象的映射。
使用DOM、SAX、JDOM等來(lái)實(shí)現(xiàn)對(duì)象序列化到XML文本時(shí),代碼會(huì)涉及XML文本的結(jié)構(gòu),也就是說(shuō),在代碼硬編碼XML文本節(jié)點(diǎn)時(shí),這種方式不具備可重用性與靈活性。要達(dá)到良好的可重用性和擴(kuò)展性,必須將XML和數(shù)據(jù)交互操作的細(xì)節(jié)封裝起來(lái),也就是數(shù)據(jù)綁定對(duì)象模式。
2 DBO模式有三個(gè)參與角色
數(shù)據(jù)對(duì)象:被序列化到XML或從XML反序列化的對(duì)象。
數(shù)據(jù)綁定對(duì)象:一個(gè)工具型的基本對(duì)象,抽象了XML序列化和XML API的具體使用細(xì)節(jié)。
XML序列化API:真正實(shí)現(xiàn)XML序列化的具體行為,如Castor等工具。
Castor是一種將Java對(duì)象和XML自動(dòng)綁定的開(kāi)源框架,它可以在Java對(duì)象、XML文檔、SQL數(shù)據(jù)表以及LDAP目錄之間綁定。Castor使用映射規(guī)則文件來(lái)實(shí)現(xiàn),Castor是DBO模式的具體體現(xiàn),它使用完全對(duì)象化的概念來(lái)實(shí)現(xiàn)XML數(shù)據(jù)與Java對(duì)象數(shù)據(jù)之間的相互映射,為系統(tǒng)中規(guī)則信息的持久化操作提供了有力的支撐。
3 規(guī)則生成與解析引擎的設(shè)計(jì)
規(guī)則生成引擎的設(shè)計(jì)思路
1)規(guī)則生成引擎用于將用戶(hù)定義的群組信息轉(zhuǎn)換成使用ETJRDL描述的XML規(guī)則文件,它實(shí)現(xiàn)用戶(hù)定義的條件信息與系統(tǒng)中的規(guī)則信息的映射。因此,其輸入是系統(tǒng)中的群組對(duì)象,輸出是XML格式的規(guī)則文件。規(guī)則生成引擎解析群組條件,根據(jù)實(shí)際應(yīng)用需求構(gòu)建映射規(guī)則,將群組條件映射成為系統(tǒng)中的規(guī)則信息。
2)規(guī)則生成引擎模型
規(guī)則生成引擎實(shí)現(xiàn)群組定義信息到論文申報(bào)規(guī)則描述信息的映射,其映射模型包括三個(gè)模塊,輸入部分,規(guī)則生成模塊和輸出部分。輸入為由用戶(hù)定義的群組信息,輸出為使用ETJRDL描述的XML規(guī)則信息文檔。輸入的群組信息經(jīng)過(guò)有Castor框架構(gòu)建的規(guī)則生成模塊按照映射規(guī)則進(jìn)行編組[java與XML數(shù)據(jù)綁定],生成符合要求的輸出,即XML規(guī)則文檔。
4 規(guī)則解析引擎的設(shè)計(jì)思路
1)規(guī)則解析引擎將系統(tǒng)中的XML規(guī)則文件轉(zhuǎn)換成為業(yè)務(wù)實(shí)體對(duì)象,它實(shí)現(xiàn)規(guī)則信息與內(nèi)存Java對(duì)象的映射。因此,其輸入是XML格式的規(guī)則文件,輸出是系統(tǒng)定義的業(yè)務(wù)實(shí)體對(duì)象。規(guī)則解析引擎依據(jù)XML規(guī)則文件中的數(shù)據(jù)構(gòu)建業(yè)務(wù)實(shí)體對(duì)象,為業(yè)務(wù)邏輯層提供操作接口。
2)規(guī)則解析引擎模型
規(guī)則解析引擎實(shí)現(xiàn)論文申報(bào)規(guī)則描述信息到業(yè)務(wù)實(shí)體對(duì)象的映射,其映射模型包括三個(gè)模塊,輸入部分,規(guī)則解析模塊和輸出部分。輸入為XML格式的規(guī)則文檔,輸出為業(yè)務(wù)操作實(shí)體對(duì)象。輸入的規(guī)則信息XML文檔經(jīng)過(guò)由Castor框架構(gòu)建的規(guī)則解析引擎按照映射規(guī)則進(jìn)行解組[Java與XML數(shù)據(jù)綁定],生成符合要求的輸入,即業(yè)務(wù)實(shí)體對(duì)象。
5 規(guī)則生成與解析引擎的實(shí)現(xiàn)
在規(guī)則生成與解析引擎實(shí)現(xiàn)的過(guò)程中,系統(tǒng)中使用DBO(Data Binding Object)模式。將由ETJRDL語(yǔ)言定義的XML部分文檔節(jié)點(diǎn)封裝成DBO模式中的數(shù)據(jù)對(duì)象;構(gòu)造RuleHandle類(lèi)作為系統(tǒng)數(shù)據(jù)綁定對(duì)象,它提供抽象了XML的序列化和XML API的具體使用細(xì)節(jié);而XML序列化API則由Castor提供。規(guī)則生成與解析引擎的主要類(lèi)如下:
位于RuleEngine包中的RuleObject類(lèi)、ConditionObject類(lèi)以及EntityObject類(lèi)是DBO模式中的數(shù)據(jù)對(duì)象,分別用于構(gòu)造XML規(guī)則文件的節(jié)點(diǎn)。RuleHandle類(lèi)提供多個(gè)靜態(tài)方法作為XML序列化以及其他處理XML文檔的API。位于RuleEngine包中的RuleBuild類(lèi)用來(lái)獲取用戶(hù)定義的群組信息并以此構(gòu)造XML規(guī)則文件,RuleResolve類(lèi)用來(lái)獲取XML規(guī)則文件并對(duì)其進(jìn)行解析,生成實(shí)體對(duì)象。
主要接口說(shuō)明:
RuleBuild類(lèi)
說(shuō)明:獲取用戶(hù)定義的群組信息,對(duì)規(guī)則生成/解析引擎做初始化設(shè)置
主要接口描述
getGroupInfo();
接口描述:獲取用戶(hù)定義的群組信息
validate();
接口描述:對(duì)群組信息進(jìn)行驗(yàn)證
loadMapFile();
接口描述:加載映射規(guī)則文件
buildRuleFile();
接口描述:生成規(guī)則信息文檔
RuleHandle類(lèi)
說(shuō)明:提供抽象了XML的序列化和XML API的具體使用細(xì)節(jié)
主要接口描述
getMapping();
接口描述:獲得內(nèi)存對(duì)象與XML之間的映射關(guān)系
getUnmashaller();
接口描述:獲得解組對(duì)象
getMashaller();
接口描述:獲得編組對(duì)象
readXMLFile();
接口描述:讀取XML文件
writeXMLFile();
接口描述:寫(xiě)入XML文件
RuleResolve類(lèi)
說(shuō)明:獲取XML規(guī)則文件并對(duì)其進(jìn)行解析,生成實(shí)體對(duì)象。
主要接口描述
getRuleFile();
接口描述:獲得XML規(guī)則文件
buildEntityObject();
接口描述:構(gòu)建內(nèi)存實(shí)體對(duì)象
listEntityObject();
接口描述:列出實(shí)體對(duì)象
規(guī)則生成/解析引擎獲取用戶(hù)定義的群組信息,將其構(gòu)造為使用ETJRDL描述的XML規(guī)則文件,并最終將XML規(guī)則文件轉(zhuǎn)化為業(yè)務(wù)邏輯層使用的描述了收件人的邏輯關(guān)系業(yè)務(wù)實(shí)體對(duì)象,業(yè)務(wù)邏輯層相關(guān)模塊將使用這些業(yè)務(wù)實(shí)體對(duì)象來(lái)實(shí)現(xiàn)審核。由此,規(guī)則生成/解析引擎實(shí)現(xiàn)專(zhuān)業(yè)論文審核通過(guò)標(biāo)準(zhǔn)中課程及成績(jī)之間的邏輯關(guān)系與考生實(shí)際課程、成績(jī)的映射。