999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

復雜公式編輯器的設計

2015-09-16 08:22:12黃紅玲
現代計算機 2015年12期
關鍵詞:定義

陳 艷,黃紅玲

復雜公式編輯器的設計

陳艷,黃紅玲

(中山大學新華學院,廣州510520)

提出一種復雜公式編輯器的設計原理,詳細描述采用“XML+數據庫”方式存儲公式的原理,深入討論公式和SQL查詢語句的XML模型以及嵌入函數和SQL查詢的復雜公式的XML模型。

XML;公式編輯器

0 引言

隨著網絡的不斷發展,軟件在各行各業得到了更普遍的應用,軟件技術也得到了前所未有的挑戰,軟件不再僅僅是解決工作中簡單的手工工作問題,已經越來越深入到各行各業核心業務的實現,簡單的軟件實現技術應用已經不能滿足各類核心業務的需要,當前軟件發展的趨勢已經更加貼近實際工作業務,功能越來越傻瓜化,因此就要求軟件實現原理越來越復雜化。例如以前的軟件中嵌入公式編輯器的較少,但隨著用戶對軟件功能的需求越來越高,復雜的公式編輯器就很有必要了。應開發實際復雜軟件的需要,筆者設計了一套復雜的公式編輯器。

公式編輯器已經不是一個陌生的名詞了,如Windows自帶的計算器就有公式編輯功能,但如何將公式編輯器嵌入各類軟件當中,為各類專業軟件所應用,并且要求嵌入的公式編輯器不能是簡單的加減乘除或簡單的函數計算,而是要能靈活地滿足軟件功能的需求。如公式中嵌套函數和SQL查詢結果,函數中又嵌套SQL查詢等復雜的公式,計算的結果作為一個條件判斷的值,或者嵌入鑒別模型當中作為路由選擇的條件。這樣的公式編輯器就不再是簡單的計算功能了。本文將詳細描述復雜公式編輯器的設計原理,包括公式模型存儲原理以及公式編輯器的實現原理。

1 數據存儲原理

數據的存儲主要借助于“XML+數據庫”的方式完成。系統中定義的公式以XML的方式進行封裝,存儲于數據庫中,系統調用時從數據庫中讀出來,將XML進行解析呈現到頁面。之所以采用XML+數據庫相結合而沒有直接用XML文件存儲的原因,主要是考慮到讀取性能方面,文件輸入輸出的速度比讀取數據庫要慢。數據存取模型如圖1所示。

圖1 數據存取模型

公式編輯器定義的公式按照語法定義規則SDR(Syntax Definition Rule)通過XML轉化器轉換成數據庫能夠存儲的Document類型,然后存入數據庫中,當定義的公式需要被調用時,XML解析器按照SDR規則進行解析,解析成XML樹,通過代理顯示。

2 公式編輯器的實現原理

2.1公式實現原理

公式的數據形態是以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。

公式的結構以其公式表達式自身的邏輯結構來決定,元素與元素之間沒有特定的順序,整個公式可以被拆卸成為一個樹狀結構。下面介紹構成公式定義的各種XML元素。

所有這些標簽都會有一個屬性OPERTOR,這個屬性的意思是操作符。操作符包括加、減、乘、除、求模、逗號。操作符在一個元素之中的意思是當前這個元素與它的前文元素的關系,這個前文元素有可能是同級的前一個元素,也有可能是直接的父結點元素。例如元素B的操作符號是“+”那么它和前文元素A的關系就是A+B。

另外一個元素的操作數如果是正數,但它的操作符是“-”,同時它無前文元素,那么這個元素在計算的時候被視為負數。反之則遵守負負得正的原理。

逗號操作符是一個比較特殊的操作符。它主要用來表示連續但無關系的元素組合,例如函數的參數列表。在公式函數調用的情況下,例如,FUN(A,B)元素A與B之間的關系就應當是逗號。因為它們之間沒有關系,且無層級區別。此時A與B默認應該是正數。

〈SET〉標簽,這個標簽實際上就是表示這個公式到這里開始需要一個括號運算符。括號運算符一般用來表示需要優先計算的一組表達式,它的下面可以包含各種其他類型的標簽。這個元素用來表述“(A+B)”。

〈NUMBER〉標簽,表示這個元素是個實數元素,屬性value表示為一個浮點數。這個元素的表達式一般用來表達“1+2-3”。

〈FUNCTION〉標簽,表示這里開始調用函數,這里的函數指的是公式系統自帶的一系列函數。FN_TYPE屬性表示為函數的類型,SID表示這個標簽在當前的結點下的編號。

〈PARAM〉標簽,用來表示函數標簽下的參數列表。一個〈FUNCTION〉標簽下面可以有多個PARAM標簽作為參數列表。〈PARAM〉標簽之間的操作符必須是逗號操作符。〈PARAM〉標簽下面的元素沒有限制,因為按照規則這個標簽的效力和〈SET〉標簽是一樣的,在其下依然可以組織完整的公式表達式。這樣就可以實現函數的復雜調用,或者是調用其他的公式,并以其他的公式運算結果為參數。

XML文檔通過XML解析器,生成樹狀結構。例如公式A*B+(C*D-E)+FUN_A,通過XML解析后,生成如下樹:

圖2公式樹模型圖

圖2中,FUN_A表示調用系統自定義函數,如求平均值函數。通過定義一組優先級運算規則,自動計算表達式結果。

2.2SQL查詢分析器實現原理

同公式實現原理一樣,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〉標簽,這個標簽用來存儲設置查詢的必要信息。tableName屬性用來指定查詢的表名。queryFields屬性用來指定查詢的字段。這些字段必須來自于tableName屬性對應的表中。QUERYKEY屬性表示查詢的鍵字段,這個字段將作為結果集中的標識符而存在,且這個字段必須來源于queryFields的字段列表中。QUERYVALUE屬性表示查詢的值字段,這個字段將作為結果集中的值而存在。這個字段必須來源于queryFields的字段列表中。

前面由〈QUERY〉標簽給出的信息就已經完成了SQL語句前面部分的定義,也就是說明了從哪個表中,查詢哪些字段的信息。

如:SELECT A,B,C FROM TB_ABC

在SQL查詢定義中,where子句實際上與公式定義是相似的,因為where子句也可以拆分成一個樹狀結構的表達式。

不同的是,所有的where子句包含在一個〈SET〉標簽下。在前文的公式定義中所描述的,〈SET〉標簽作為括號運算符而存在。在SQL語句中,SQL的where子句無論后面接的元素是多是少,都可以看作被放置在括號之中,因為計算的結果直接被SQL查詢所使用。

在公式定義中,每個結點都有一定的算術功能,但是在SQL定義中,位于where子句后的元素,多數都是條件運算符。在這里計算不是重點,計算可以通過引用公式的方式來進行,或者直接讓數據庫服務器通過SQL語句來計算。在這里,條件運算使用〈CONDITION〉標簽來定義。

〈CONDITION〉標簽的屬性包括:COMPARE屬性,指定當前條件的判斷方式是什么,包括“+、-、*、/”等,RELATION表示與前文條件的關系運算符,包括與(AND)、或(OR)、非(NOT),fieldName屬性表示這個條件所判斷的字段名,這個字段必須是〈QUERY〉標簽所定義的表中的,但不一定是queryFields屬性所指定的字段。

〈VALUEL〉〈VALUER〉在〈CONDITION〉下面,用來表示左值和右值。LIBID屬性表示這個值所引用的公式,如果為0,則表示不引用公式。VALUE屬性則表示這個值標簽的具體值。

通過這個樹狀的結構,就可以生成帶層級where子句的查詢語句。

例如查詢語句SQL_1:select a,b from tb_a where c =0 and(d=‘s’or e=1),通過XML解析后,生成如下樹:

圖3 SQL樹模型圖

2.3復雜公式的應用原理

復雜公式是指帶有函數和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代碼中,下劃線虛線部分表示函數的調用,下劃線為實線部分表示SQL查詢的調用。

圖4 復雜公式樹模型圖

圖4中虛線大框區域表示SQL查詢的引用,FUN_A表示函數的引用。通過將函數和SQL查詢嵌入公式中,實現了比較靈活的公式應用。

3 結語

筆者設計的公式編輯器應用Java語言來實現。目前編輯器已經應用于工作流的定義中,用于嵌入鑒別模型當中作為路由選擇的條件。公式編輯器的應用,讓軟件變得更加靈活適用,提高了企業的辦公效率。

[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]劉瓊華.采用標記語言構造數學公式編輯器的方法.計算機工程,2003,29(18):82~84

[4]張濱.實現Web下公式符號在線操作的可視化編輯器系統的設計.計算機科學,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-),女,廣東人,碩士,助教,研究方向為電子信息技術

2015-02-26

2015-03-12

猜你喜歡
定義
以愛之名,定義成長
活用定義巧解統計概率解答題
例談橢圓的定義及其應用
題在書外 根在書中——圓錐曲線第三定義在教材和高考中的滲透
永遠不要用“起點”定義自己
海峽姐妹(2020年9期)2021-01-04 01:35:44
嚴昊:不定義終點 一直在路上
華人時刊(2020年13期)2020-09-25 08:21:32
定義“風格”
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
有壹手——重新定義快修連鎖
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
主站蜘蛛池模板: 国产网站在线看| 九九精品在线观看| 91www在线观看| 欧美人在线一区二区三区| 熟女视频91| 一级香蕉人体视频| 国禁国产you女视频网站| 四虎成人免费毛片| 精品国产成人a在线观看| 2021国产精品自产拍在线| 在线视频精品一区| 毛片一级在线| 青青青草国产| 国产三级毛片| 免费无码AV片在线观看中文| 亚洲综合久久成人AV| 亚洲不卡av中文在线| 国产福利大秀91| 真人高潮娇喘嗯啊在线观看| 被公侵犯人妻少妇一区二区三区| 国产成人乱无码视频| 特级欧美视频aaaaaa| 国产免费福利网站| 国产亚洲精品资源在线26u| 亚洲人成在线精品| 在线精品亚洲国产| 97人人模人人爽人人喊小说| 欧美、日韩、国产综合一区| 亚洲视频无码| 日韩在线1| 露脸国产精品自产在线播| 99在线视频免费| 久久综合婷婷| 青青青伊人色综合久久| 久久精品国产国语对白| 色哟哟国产成人精品| 最新国产成人剧情在线播放| 玩两个丰满老熟女久久网| 人人看人人鲁狠狠高清| 久久精品国产免费观看频道| 五月天在线网站| 亚洲国产精品无码久久一线| 国产 在线视频无码| 国产精品区网红主播在线观看| 亚洲精品日产精品乱码不卡| 国产视频资源在线观看| 亚洲国产成人久久精品软件| 在线观看国产精美视频| 免费亚洲成人| 99久久性生片| 亚洲永久视频| 欧美久久网| 91色综合综合热五月激情| 91丨九色丨首页在线播放| 久久久久久尹人网香蕉| 一级毛片在线直接观看| 国产福利免费视频| 亚洲美女一区| 农村乱人伦一区二区| 国产第三区| 国产成人av大片在线播放| 国产精品三级av及在线观看| 精品久久国产综合精麻豆| 精品国产成人a在线观看| 四虎精品国产AV二区| 亚洲天堂网视频| 久久久久久久久亚洲精品| 啪啪永久免费av| 国产精品免费福利久久播放| 九色综合伊人久久富二代| 国内老司机精品视频在线播出| 呦系列视频一区二区三区| 9丨情侣偷在线精品国产| 国产在线观看91精品| 美女啪啪无遮挡| 免费a在线观看播放| 精品精品国产高清A毛片| 国产成人盗摄精品| 97青青青国产在线播放| 99re经典视频在线| 国产成人AV男人的天堂| 亚洲国产成人综合精品2020|