陳 艷,黃紅玲
復雜公式編輯器的設(shè)計
陳艷,黃紅玲
(中山大學新華學院,廣州510520)
提出一種復雜公式編輯器的設(shè)計原理,詳細描述采用“XML+數(shù)據(jù)庫”方式存儲公式的原理,深入討論公式和SQL查詢語句的XML模型以及嵌入函數(shù)和SQL查詢的復雜公式的XML模型。
XML;公式編輯器
隨著網(wǎng)絡(luò)的不斷發(fā)展,軟件在各行各業(yè)得到了更普遍的應(yīng)用,軟件技術(shù)也得到了前所未有的挑戰(zhàn),軟件不再僅僅是解決工作中簡單的手工工作問題,已經(jīng)越來越深入到各行各業(yè)核心業(yè)務(wù)的實現(xiàn),簡單的軟件實現(xiàn)技術(shù)應(yīng)用已經(jīng)不能滿足各類核心業(yè)務(wù)的需要,當前軟件發(fā)展的趨勢已經(jīng)更加貼近實際工作業(yè)務(wù),功能越來越傻瓜化,因此就要求軟件實現(xiàn)原理越來越復雜化。例如以前的軟件中嵌入公式編輯器的較少,但隨著用戶對軟件功能的需求越來越高,復雜的公式編輯器就很有必要了。應(yīng)開發(fā)實際復雜軟件的需要,筆者設(shè)計了一套復雜的公式編輯器。
公式編輯器已經(jīng)不是一個陌生的名詞了,如Windows自帶的計算器就有公式編輯功能,但如何將公式編輯器嵌入各類軟件當中,為各類專業(yè)軟件所應(yīng)用,并且要求嵌入的公式編輯器不能是簡單的加減乘除或簡單的函數(shù)計算,而是要能靈活地滿足軟件功能的需求。如公式中嵌套函數(shù)和SQL查詢結(jié)果,函數(shù)中又嵌套SQL查詢等復雜的公式,計算的結(jié)果作為一個條件判斷的值,或者嵌入鑒別模型當中作為路由選擇的條件。這樣的公式編輯器就不再是簡單的計算功能了。本文將詳細描述復雜公式編輯器的設(shè)計原理,包括公式模型存儲原理以及公式編輯器的實現(xiàn)原理。
數(shù)據(jù)的存儲主要借助于“XML+數(shù)據(jù)庫”的方式完成。系統(tǒng)中定義的公式以XML的方式進行封裝,存儲于數(shù)據(jù)庫中,系統(tǒng)調(diào)用時從數(shù)據(jù)庫中讀出來,將XML進行解析呈現(xiàn)到頁面。之所以采用XML+數(shù)據(jù)庫相結(jié)合而沒有直接用XML文件存儲的原因,主要是考慮到讀取性能方面,文件輸入輸出的速度比讀取數(shù)據(jù)庫要慢。數(shù)據(jù)存取模型如圖1所示。
圖1 數(shù)據(jù)存取模型
公式編輯器定義的公式按照語法定義規(guī)則SDR(Syntax Definition Rule)通過XML轉(zhuǎn)化器轉(zhuǎn)換成數(shù)據(jù)庫能夠存儲的Document類型,然后存入數(shù)據(jù)庫中,當定義的公式需要被調(diào)用時,XML解析器按照SDR規(guī)則進行解析,解析成XML樹,通過代理顯示。
2.1公式實現(xiàn)原理
公式的數(shù)據(jù)形態(tài)是以XML的方式存儲,存儲公式的XML代碼框架如下:
〈FORMULA FORMULA_NAME="TRY_FROM"LIBID=" 7582945"〉
〈SET OPERATOR="110"SID="0"〉
〈NUMBER OPERATOR="110"SID="6698"VALUE=" 1.0"/〉
〈SET OPERATOR="110"SID="8633"〉
〈FUNCTION FN_TYPE="120"OPERATOR="110" SID="9615"〉
〈PARAM OPERATOR="115"SID="2514"〉
〈SQL LIBID="1784351"OPERATOR="110"SID="944"/〉
〈/PARAM〉
〈/FUNCTION〉
〈NUMBER OPERATOR="113"SID="5455"VALUE=" 17.0"/〉
〈/SET〉
〈/SET〉
〈/FORMULA〉
公式的定義以標簽〈FORMULA〉為開始。FORMULA_NAME屬性表示公式定義的名稱,LIBID屬性表示公式的ID。
公式的結(jié)構(gòu)以其公式表達式自身的邏輯結(jié)構(gòu)來決定,元素與元素之間沒有特定的順序,整個公式可以被拆卸成為一個樹狀結(jié)構(gòu)。下面介紹構(gòu)成公式定義的各種XML元素。
所有這些標簽都會有一個屬性O(shè)PERTOR,這個屬性的意思是操作符。操作符包括加、減、乘、除、求模、逗號。操作符在一個元素之中的意思是當前這個元素與它的前文元素的關(guān)系,這個前文元素有可能是同級的前一個元素,也有可能是直接的父結(jié)點元素。例如元素B的操作符號是“+”那么它和前文元素A的關(guān)系就是A+B。
另外一個元素的操作數(shù)如果是正數(shù),但它的操作符是“-”,同時它無前文元素,那么這個元素在計算的時候被視為負數(shù)。反之則遵守負負得正的原理。
逗號操作符是一個比較特殊的操作符。它主要用來表示連續(xù)但無關(guān)系的元素組合,例如函數(shù)的參數(shù)列表。在公式函數(shù)調(diào)用的情況下,例如,F(xiàn)UN(A,B)元素A與B之間的關(guān)系就應(yīng)當是逗號。因為它們之間沒有關(guān)系,且無層級區(qū)別。此時A與B默認應(yīng)該是正數(shù)。
〈SET〉標簽,這個標簽實際上就是表示這個公式到這里開始需要一個括號運算符。括號運算符一般用來表示需要優(yōu)先計算的一組表達式,它的下面可以包含各種其他類型的標簽。這個元素用來表述“(A+B)”。
〈NUMBER〉標簽,表示這個元素是個實數(shù)元素,屬性value表示為一個浮點數(shù)。這個元素的表達式一般用來表達“1+2-3”。
〈FUNCTION〉標簽,表示這里開始調(diào)用函數(shù),這里的函數(shù)指的是公式系統(tǒng)自帶的一系列函數(shù)。FN_TYPE屬性表示為函數(shù)的類型,SID表示這個標簽在當前的結(jié)點下的編號。
〈PARAM〉標簽,用來表示函數(shù)標簽下的參數(shù)列表。一個〈FUNCTION〉標簽下面可以有多個PARAM標簽作為參數(shù)列表?!碢ARAM〉標簽之間的操作符必須是逗號操作符。〈PARAM〉標簽下面的元素沒有限制,因為按照規(guī)則這個標簽的效力和〈SET〉標簽是一樣的,在其下依然可以組織完整的公式表達式。這樣就可以實現(xiàn)函數(shù)的復雜調(diào)用,或者是調(diào)用其他的公式,并以其他的公式運算結(jié)果為參數(shù)。
XML文檔通過XML解析器,生成樹狀結(jié)構(gòu)。例如公式A*B+(C*D-E)+FUN_A,通過XML解析后,生成如下樹:
圖2公式樹模型圖
圖2中,F(xiàn)UN_A表示調(diào)用系統(tǒng)自定義函數(shù),如求平均值函數(shù)。通過定義一組優(yōu)先級運算規(guī)則,自動計算表達式結(jié)果。
2.2SQL查詢分析器實現(xiàn)原理
同公式實現(xiàn)原理一樣,SQL查詢分析器原理大致相同,SQL語句的XML代碼框架如下:
〈SQL LIBID="1784351"SQLTYPE="20"〉
〈QUERY QUERYKEY="emplID"QUERYVALUE="emplName"queryFields="emplName;emplID"tableName="tb_employee"/〉
〈SET HSID="0"〉
〈SET HSID="6239"RELATION="30"〉
〈CONDITION COMPAIR="42"HSID="849"RELATION="30"fieldName="emplID"〉〈VALUEL LIBID="0"VALUE="0"/〉〈VALUER LIBID="0"VALUE=""/〉〈/CONDITION〉
〈CONDITION COMPAIR="43"HSID="3007"RELATION="30"fieldName="emplID"〉
〈VALUEL LIBID="0"VALUE="99999999"/〉
〈VALUER LIBID="0"VALUE=""/〉
〈/CONDITION〉
〈/SET〉
〈/SET〉
〈/SQL〉
SQL查詢定義以〈SQL〉標簽開始,LIBID屬性表示這個SQL語句的ID。
在〈SQL〉標簽下面有且僅有一個〈QUERY〉標簽,這個標簽用來存儲設(shè)置查詢的必要信息。tableName屬性用來指定查詢的表名。queryFields屬性用來指定查詢的字段。這些字段必須來自于tableName屬性對應(yīng)的表中。QUERYKEY屬性表示查詢的鍵字段,這個字段將作為結(jié)果集中的標識符而存在,且這個字段必須來源于queryFields的字段列表中。QUERYVALUE屬性表示查詢的值字段,這個字段將作為結(jié)果集中的值而存在。這個字段必須來源于queryFields的字段列表中。
前面由〈QUERY〉標簽給出的信息就已經(jīng)完成了SQL語句前面部分的定義,也就是說明了從哪個表中,查詢哪些字段的信息。
如:SELECT A,B,C FROM TB_ABC
在SQL查詢定義中,where子句實際上與公式定義是相似的,因為where子句也可以拆分成一個樹狀結(jié)構(gòu)的表達式。
不同的是,所有的where子句包含在一個〈SET〉標簽下。在前文的公式定義中所描述的,〈SET〉標簽作為括號運算符而存在。在SQL語句中,SQL的where子句無論后面接的元素是多是少,都可以看作被放置在括號之中,因為計算的結(jié)果直接被SQL查詢所使用。
在公式定義中,每個結(jié)點都有一定的算術(shù)功能,但是在SQL定義中,位于where子句后的元素,多數(shù)都是條件運算符。在這里計算不是重點,計算可以通過引用公式的方式來進行,或者直接讓數(shù)據(jù)庫服務(wù)器通過SQL語句來計算。在這里,條件運算使用〈CONDITION〉標簽來定義。
〈CONDITION〉標簽的屬性包括:COMPARE屬性,指定當前條件的判斷方式是什么,包括“+、-、*、/”等,RELATION表示與前文條件的關(guān)系運算符,包括與(AND)、或(OR)、非(NOT),fieldName屬性表示這個條件所判斷的字段名,這個字段必須是〈QUERY〉標簽所定義的表中的,但不一定是queryFields屬性所指定的字段。
〈VALUEL〉〈VALUER〉在〈CONDITION〉下面,用來表示左值和右值。LIBID屬性表示這個值所引用的公式,如果為0,則表示不引用公式。VALUE屬性則表示這個值標簽的具體值。
通過這個樹狀的結(jié)構(gòu),就可以生成帶層級where子句的查詢語句。
例如查詢語句SQL_1:select a,b from tb_a where c =0 and(d=‘s’or e=1),通過XML解析后,生成如下樹:
圖3 SQL樹模型圖
2.3復雜公式的應(yīng)用原理
復雜公式是指帶有函數(shù)和SQL查詢的公式,這種公式的XML代碼框架如下:
〈FORMULA FORMULA_NAME="TRY_FROM"LIBID=" 7582945"〉
〈SET OPERATOR="110"SID="0"〉
〈NUMBER OPERATOR="110"SID="6698"VALUE=" 1.0"/〉
〈SET OPERATOR="110"SID="8633"〉
〈FUNCTION FN_TYPE="120"OPERATOR="110"SID=" 9615"〉
〈PARAM OPERATOR="115"SID="2514"〉
〈SQL LIBID="1784351"OPERATOR="110"SID=" 944"/〉
〈/PARAM〉
〈/FUNCTION〉
〈NUMBER OPERATOR="113"SID="5455"VALUE=" 17.0"/〉
〈/SET〉
〈/SET〉
〈/FORMULA〉
〈SQL〉標簽,表示引用SQL查詢的定義。LIBID屬性表示SQL查詢語句的ID。
XML代碼中,下劃線虛線部分表示函數(shù)的調(diào)用,下劃線為實線部分表示SQL查詢的調(diào)用。
圖4 復雜公式樹模型圖
圖4中虛線大框區(qū)域表示SQL查詢的引用,F(xiàn)UN_A表示函數(shù)的引用。通過將函數(shù)和SQL查詢嵌入公式中,實現(xiàn)了比較靈活的公式應(yīng)用。
筆者設(shè)計的公式編輯器應(yīng)用Java語言來實現(xiàn)。目前編輯器已經(jīng)應(yīng)用于工作流的定義中,用于嵌入鑒別模型當中作為路由選擇的條件。公式編輯器的應(yīng)用,讓軟件變得更加靈活適用,提高了企業(yè)的辦公效率。
[1]Extensible Markup Language(XML)1.0(Second Edition).W3C Recommendation.http://www.w3c.org/TR/REC-xml,2000-10-06
[2]Mathmatical Markup Language(MathML)1.01 Specification.W3C Recommendation.http://www.w3c.org/TR/REC-MathML,1999-07
[3]劉瓊?cè)A.采用標記語言構(gòu)造數(shù)學公式編輯器的方法.計算機工程,2003,29(18):82~84
[4]張濱.實現(xiàn)Web下公式符號在線操作的可視化編輯器系統(tǒng)的設(shè)計.計算機科學,2007,34(6):286~288
XML;Formula Editor
Design of the Complex Formula Editor
CHEN Yan,HUANG Hong-ling
(Xinhua College,Sun Yat-Sen University,Guangzhou 510520)
Presents the conception of a complex embedded formula editor,expatiates the concept of formula storage by“XML+Database”,discusses the XML model of formula,SQL sentence and complex formula embedded SQL sentence and function.
1007-1423(2015)12-0083-05
10.3969/j.issn.1007-1423.2015.12.019
陳艷(1979-),女,湖北人,碩士,講師,研究方向為軟件工程
黃紅玲(1987-),女,廣東人,碩士,助教,研究方向為電子信息技術(shù)
2015-02-26
2015-03-12