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