王則棟 張 磊 李滕飛 王宇璐 王抵修*(吉林建筑大學,吉林 長春 130118)
隨著網(wǎng)絡技術的不斷發(fā)展,建設題庫系統(tǒng)成為開展網(wǎng)絡教育的重要手段之一。各種題庫系統(tǒng)被相繼提出,這也對題庫維護子系統(tǒng)的建設和更新提出了新的要求。目前關于高等數(shù)學的題庫系統(tǒng)較少,本文提出一個支持數(shù)學公式語義化的高等數(shù)學題庫系統(tǒng),對數(shù)學公式在Web 端的顯示和語義化數(shù)據(jù)庫進行了深入的研究與實現(xiàn)。
自1994 年萬維網(wǎng)產生以來,數(shù)學公式在Web 端的交互就一直是人們研究的熱點和難題。
最初大多采用圖片上傳的方式。一些人采用Word 或MathType 等編輯器把數(shù)學公式輸出為圖片形式保存到數(shù)據(jù)庫中并在Web 端應用[1]。但是這種圖片形式的數(shù)學公式不能進行查找和索引,更重要的是沒有語義[2],這不利于信息的處理。并且圖形文件占用存儲空間較大,對數(shù)據(jù)庫的讀寫和備份造成影響,而且數(shù)據(jù)重用性能也很差。
LaTex 是一個科技文獻的排版系統(tǒng),它雖然未采用所見即所得的編譯方式,但也一直是科技文獻排版的有效工具。在Web端也有人做成了用LaTex 表示公式的系統(tǒng)。但對于不懂LaTex的人來說,問題依然沒有得到解決。
MathML 用標記的形式表示數(shù)學公式,它作為XML 的子集成為數(shù)學公式在Web 端交互的新的方案。MathML 文檔是自描述的,這種特性使它成為數(shù)學信息的良好載體,為數(shù)據(jù)庫提供了良好的接口[3]?;贛athML 的數(shù)學公式顯示和編輯方案,是在網(wǎng)頁上對數(shù)學公式數(shù)據(jù)進行解析并統(tǒng)一處理成MathML 格式,最后保存到數(shù)據(jù)庫進行管理[4]。但是,MathML 代碼難以在前端實現(xiàn)交互,在數(shù)據(jù)庫中的存儲也略顯臃腫并且未能提供有效的CSS 樣式支持[4]。
MathJax 建立了LaTex 和MathML 之間的聯(lián)系,成功的實現(xiàn)了網(wǎng)頁的交互。
我們的系統(tǒng)方案如下:
數(shù)學公式在Web 端交互是每個數(shù)學題庫的核心。考慮到存儲的方便性,我們將數(shù)學公式轉換成形式較為簡單的latex 代碼。
前端設計一個UI 界面,其中包含各個公式類,點擊調用對應JS 函數(shù)類,將界面輸入的參數(shù)轉換成對應的LaTex 和MathML 代碼,并將它們保存到數(shù)據(jù)庫之中。顯示是從數(shù)據(jù)庫中調用相應的MathML 代碼,直接插入到HTML 文檔中。
數(shù)據(jù)庫設計是至關重要的環(huán)節(jié),良好的數(shù)據(jù)庫設計可以為系統(tǒng)維護和后續(xù)開發(fā)擴展提供便捷。在設計過程中,應提供一定的可擴展性方便數(shù)據(jù)結構的更改。
數(shù)學題庫的數(shù)據(jù)庫設計有將整個題目存入一個表的方案,本數(shù)據(jù)庫設計的核心在于語義化的建設,因此對一個完整的數(shù)學題目按題目類型分成若干個文字部分、數(shù)學公式以及圖片部分,并對這三個部分分別建表。其中圖片部分是為了保存題目可能給出的示意圖。同時,對每張表都添加了主鍵,以及通過外鍵約束規(guī)則來保證數(shù)據(jù)完整性。采用分開存儲建表的方案具有如下特點:
4.1.1 對數(shù)據(jù)庫進行了優(yōu)化,使性能更強。當數(shù)據(jù)庫中的表越小時,在它上面執(zhí)行的查詢也會越快。因此,相比于將一整個題目存到一個表里,按部分分開存提高了一定的性能。并且,在數(shù)據(jù)類型的選擇上也做了優(yōu)化,盡量使用可以正確存儲數(shù)據(jù)的最小數(shù)據(jù)類型[6],并設置了相對較小的字段屬性,使得查詢更快。
4.1.2 更好地體現(xiàn)了語義化,將數(shù)學公式單獨存放使語義化的解析更加明晰。
4.1.3 使數(shù)據(jù)庫表的結構更為統(tǒng)一。由于解答題、選擇題等題目類型可能存在示意圖,題目和圖片本就應該分開存放,將題目再次分為文字部分和公式部分,可以使表的結構整齊,易于閱讀維護。
4.1.4 方便Web 端對樣式的控制。由于文字和數(shù)字、公式在Web 端顯示的大小、字體、行距不一致,將其分開存放便于對樣式的控制,使Web 端顯示出的公式更為美觀。
4.1.5 體現(xiàn)了良好的可擴展性。本方案目前在后端數(shù)據(jù)庫存放的是公式LaTex 代碼,同時在題目公式表中也存放了MathML格式。由于公式與題目文字分開存放,在后期研究數(shù)學公式在Web 端交互的其他方案,可以直接存入不同格式的代碼以尋求更優(yōu)解,例如我們同時已經(jīng)存放了公式MathML 格式。這樣,語義化就更容易實現(xiàn)了。
數(shù)據(jù)流圖是通過圖形的方式來描繪信息流和數(shù)據(jù)從移動到輸出的過程中所經(jīng)受的變換[5]。數(shù)據(jù)流圖可以很好地顯示主要數(shù)據(jù)流數(shù)學公式如何通過系統(tǒng)前進以及被存儲在何處,其數(shù)據(jù)流圖,如圖1 所示。
圖1 數(shù)據(jù)流圖
通過對題庫系統(tǒng)的業(yè)務分析,設計了錄題表、題庫表、題目文字表、題目公式表、用戶信息表、錄題員表、公式表、特殊符號表等8 類表。其中錄題表保存的是已錄入的題目,經(jīng)過審核后放入題庫表中;公式表和特殊符號表存放的分別是不同公式模版及各種特殊符號的LaTex 代碼。下面分別給出題庫表、題目文字表、題目公式表這三張核心表的數(shù)據(jù)庫表結構。
4.2.1 題庫表
題庫表是整個系統(tǒng)最核心的表,用來保存錄入并通過校對的題目。題庫表結構設計如表1。
表1
4.2.2 題目文字表,如表2。
4.2.3 題目公式表,如表3。
表3
本文介紹了一種能夠便于數(shù)學公式在Web 端交互的題庫方案的數(shù)據(jù)庫設計,該設計使Web 交互與題庫維護更加便捷,且為后續(xù)語義化應用打下了良好基礎。