陳喜春,牛曉莉
(陸軍步兵學(xué)院石家莊校區(qū),石家莊 050083)
在院校、部隊(duì)教學(xué)和訓(xùn)練中,常常需要對武器、裝備的相關(guān)信息進(jìn)行查詢、比較,例如下列典型應(yīng)用場景:
(1)查詢.XXX 步戰(zhàn)車的火控系統(tǒng)采用什么方式?(2)比較.XXX 步戰(zhàn)車和XXX 步戰(zhàn)車的動力部分有什么差別? (3)關(guān)聯(lián).我軍和XXX 步戰(zhàn)車相同底盤的裝甲車輛有哪些? XXX 式步兵戰(zhàn)車的衍生型號有哪些?XXX 火炮都用在哪些裝甲車輛上?
這類應(yīng)用場景帶有突出的“聯(lián)想”、“關(guān)聯(lián)”特征.過去的數(shù)據(jù)表格中,常常以武器裝備分類為基礎(chǔ),按照樹的結(jié)構(gòu)進(jìn)行組織.在使用時,“按圖索驥”,可以找到裝備,但是裝備之間的比較需要在幾個不同的表之間進(jìn)行,非常麻煩.在工作、學(xué)習(xí)中,“聯(lián)想式”、“關(guān)聯(lián)式”查詢檢索更加符合教學(xué)、認(rèn)知規(guī)律,基于這些考慮,我們需要一個以“聯(lián)想式”、“關(guān)聯(lián)式”查詢檢索為主要特征的數(shù)據(jù)庫.
圖數(shù)據(jù)庫是一種利用圖結(jié)構(gòu)存儲和查詢數(shù)據(jù)的數(shù)據(jù)庫系統(tǒng),其理論基礎(chǔ)是圖論.圖的基本要素是節(jié)點(diǎn)和邊,對應(yīng)圖數(shù)據(jù)庫三大基本要素是節(jié)點(diǎn)、關(guān)系和屬性.
節(jié)點(diǎn)可以代表實(shí)體且包含任意多的屬性(鍵值對),利用在節(jié)點(diǎn)上添加標(biāo)簽可以在語義上更直接的表達(dá)領(lǐng)域?qū)ο螅魂P(guān)系連接相應(yīng)的節(jié)點(diǎn),可以表達(dá)實(shí)體或者領(lǐng)域?qū)ο笾g相應(yīng)的變化和關(guān)系[1].
一般的數(shù)據(jù)庫系統(tǒng)主要涉及四種操作,即增、查、改、刪(CRUD),圖的查找和搜索可以通過圖的遍歷和相關(guān)圖論算法完成[2].
傳統(tǒng)上,我們進(jìn)行數(shù)據(jù)處理,一般采取關(guān)系數(shù)據(jù)庫的方式.這類數(shù)據(jù)庫,簡單易用,技術(shù)成熟.適用于格式化的數(shù)據(jù)結(jié)構(gòu),每個元組的字段組成一致,如成績單、花名冊.
關(guān)系數(shù)據(jù)庫的基本理念是面向?qū)嶓w建模,然后通過關(guān)聯(lián)表記錄實(shí)體間的關(guān)聯(lián)關(guān)系.關(guān)系數(shù)據(jù)庫和我們需求之間的差距主要是:
(1)不容易處理非結(jié)構(gòu)化、半結(jié)構(gòu)化數(shù)據(jù).比如:飛機(jī)、坦克、火炮的相關(guān)信息,很難或根本不能提出一個共同的“模式”,建立一個結(jié)構(gòu)一致的數(shù)據(jù)表來表示這些信息.
(2)難以體現(xiàn)出實(shí)體之間的聯(lián)系.由于應(yīng)用場景設(shè)計(jì)的原因,關(guān)系表查詢涉及到數(shù)據(jù)表之間的操作,查詢成本比較高.
圖數(shù)據(jù)庫的創(chuàng)建和維護(hù)簡單,每個節(jié)點(diǎn)對應(yīng)于關(guān)系數(shù)據(jù)庫中的一個記錄,節(jié)點(diǎn)和邊的屬性則相當(dāng)于記錄中的字段,屬性內(nèi)容和個數(shù)可以動態(tài)變化,節(jié)點(diǎn)之間的邊也可以自由刪減并且不會影響已有數(shù)據(jù)結(jié)構(gòu)的邏輯,這對于關(guān)系數(shù)據(jù)庫來說是非常困難的.
武器裝備是武裝力量用于實(shí)施和保障戰(zhàn)斗行動的武器、武器系統(tǒng)以及與之配套的其他軍事技術(shù)裝備的統(tǒng)稱.
現(xiàn)代武器裝備按其主要特征有多種分類方法,如按毀傷作用的性質(zhì),可分為大規(guī)模殺傷破壞武器和常規(guī)武器;按所要解決的戰(zhàn)斗任務(wù)的范圍,可分為戰(zhàn)略武器和戰(zhàn)術(shù)武器;還可以按照機(jī)動能力等進(jìn)行其他分類.
對于這個項(xiàng)目,裝備分類按照裝備管理部門的目錄進(jìn)行.目前主要考慮裝甲裝備和軍械裝備,因此頂層節(jié)點(diǎn)如圖1所示.裝備的組織習(xí)慣上是自上至下的樹狀結(jié)構(gòu),為了解決“跨分支”的節(jié)點(diǎn)之間的對應(yīng)問題,必須設(shè)計(jì)各種各樣的關(guān)系.
圖1 圖數(shù)據(jù)庫的基本概念
關(guān)系描述的是節(jié)點(diǎn)之間的“聯(lián)系”.在圖2中,裝甲裝備下面的二級分類有坦克、裝甲車、裝甲保障車輛,它們之間的關(guān)系是“進(jìn)一步分類”,如圖3所示.
圖2 節(jié)點(diǎn)的組織
圖3 基本分類
三級分類再往下,就到了具體型號,這時的關(guān)系為“具體型號”.這種表示方法類似“樹”,但是樹中節(jié)點(diǎn)的關(guān)系只是擴(kuò)展,這里的關(guān)系則要復(fù)雜得多.
具體裝備之后,再向下一層的關(guān)系是“具有能力”,比如,步戰(zhàn)車具有四種能力,分別是防護(hù)能力、機(jī)動能力、火力能力、信息能力.
能力再向下的關(guān)系為“具體部件”,具體部件是最末層的節(jié)點(diǎn).這樣設(shè)計(jì)便于解決類似以下的問題:哪兩種裝甲車輛的火炮都是XXX 炮? 最末層的節(jié)點(diǎn)具有更進(jìn)一步的屬性信息.
在武器裝備的設(shè)計(jì)制造中,常常遵循模塊化設(shè)計(jì)原則,例如某型炮塔同時用于兩類坦克,這樣兩性裝備就有可能指向同一末端節(jié)點(diǎn).
圖數(shù)據(jù)庫因?yàn)槠錈o模式特點(diǎn),使得它更能適應(yīng)領(lǐng)域變化.在目前這個課題中,圖數(shù)據(jù)庫系統(tǒng)基本的服務(wù)場景主要包括:
(1)提供武器裝備型號的檢索查詢服務(wù).數(shù)據(jù)管理主要用于實(shí)現(xiàn)對系統(tǒng)所需的基礎(chǔ)數(shù)據(jù)的管理與維護(hù),包括添加、修改、刪除和查詢,考慮到應(yīng)用的對象和場景,本系統(tǒng)為用戶提供的接口主要是查詢.比如“XXX 步戰(zhàn)車的火控系統(tǒng)采用什么方式?”這種模式的查詢.這種方式可以理解成字典式的查詢,通過目錄樹進(jìn)行,比較直接,也比較簡單.
(2)提供“聯(lián)想式”、“關(guān)聯(lián)式”的查詢檢索服務(wù).人的思維活動不是線性的,往往帶有跳躍性的特征.比如在教學(xué)中,常常會提出“我軍和XXX 步戰(zhàn)車相同底盤的裝甲車輛有哪些?”、“XXX 式步兵戰(zhàn)車的衍生型號有哪些?”、“XXX 火炮都用在哪些裝甲車輛上?”這類問題,這類問題正是“圖”技術(shù)的擅長.本系統(tǒng)用圖數(shù)據(jù)庫來建設(shè)數(shù)據(jù)庫,通過設(shè)計(jì)導(dǎo)向式的檢索查詢,大大地改善了用戶的體驗(yàn).
(3)進(jìn)行基于屬性的比較服務(wù).比較是裝備教學(xué)中的另一個重要特征,通過比較可以使人對事物的認(rèn)識更加深入.比如“XXX 步戰(zhàn)車和XXX 步戰(zhàn)車的動力部分有什么差別?”這一類問題.本系統(tǒng)的解決方案是利用表格的模式,將兩種對象的共同屬性并列顯示,以實(shí)現(xiàn)比較.
本項(xiàng)目利用Eclipse RCP(Rich Client Platform)來實(shí)現(xiàn)人機(jī)界面[3],RCP 是一個重用框架的開發(fā)環(huán)境,可以利用RCP 框架開發(fā)應(yīng)用程序.在技術(shù)實(shí)現(xiàn)上,重點(diǎn)解決3個問題,(1)圖數(shù)據(jù)庫的創(chuàng)建;(2)節(jié)點(diǎn)屬性的展示;(3)圖的呈現(xiàn).
本項(xiàng)目依托Neo4J 創(chuàng)建數(shù)據(jù)庫.Neo4J 是圖數(shù)據(jù)庫的一個重要代表,Neo4J 有兩種運(yùn)行方式,一是以服務(wù)的方式,對外提供REST 接口;另外是嵌入式模式,將數(shù)據(jù)作為本地文件訪問.
類似于SQL,圖數(shù)據(jù)的創(chuàng)建和訪問,使用Cypher語句.分別創(chuàng)建節(jié)點(diǎn),創(chuàng)建關(guān)系,創(chuàng)建節(jié)點(diǎn)的屬性.在執(zhí)行查詢時,Neo4J 為Cypher 語句提供了Java的調(diào)用接口.
武器裝備由于型號不一,構(gòu)造各異,因此屬性的描述上存在較大的差別.例如,XXX 式步兵戰(zhàn)車,分為6 類數(shù)據(jù),分別是一般數(shù)據(jù)、使用數(shù)據(jù)、運(yùn)動速度、通行性能、武器彈藥、通信設(shè)備(圖4).
而其他裝備,比如飛機(jī),顯然需要有另外的一些屬性來描述.武器裝備的性能參數(shù)由于種類之間差異太大,很難用統(tǒng)一的模式,或者說“數(shù)據(jù)項(xiàng)”來描述,用鍵值對進(jìn)行描述是一種更簡便的方法.JSON 文件就是專門描述鍵值對的文件格式.
圖4 某型步戰(zhàn)車技術(shù)性能參數(shù)
下面是描述XXX 步戰(zhàn)車的機(jī)動能力的JSON 文件,鍵與值之間用“:”隔開,鍵值對之間用“{}”隔開.與此類似,其他性能也都用單獨(dú)的JSON 文件來表示[4].
在圖數(shù)據(jù)庫中的最下一級節(jié)點(diǎn),也就是葉節(jié)點(diǎn),具有進(jìn)一步的信息,可以和一個JSON 文件進(jìn)行關(guān)聯(lián).屬性信息的展示,也就是要將JSON 文件遞歸地讀出來,用表格再展示出來.為了更方便地讀信息,這個表格設(shè)計(jì)成可以折疊的.這些是編程的技巧問題,不再贅述,具體顯示界面見圖5.
圖5 節(jié)點(diǎn)的屬性
圖的展示是本課題的另一重點(diǎn)問題.前文已經(jīng)介紹,圖是由節(jié)點(diǎn)(Node)和邊(Edge)組成的,又稱為點(diǎn)邊圖.節(jié)點(diǎn)表示實(shí)體,邊表示的是實(shí)體間的聯(lián)系.為了將點(diǎn)邊圖表示出來,有很多種方案.比如,Eclipse的Zest 庫,JavaFX 庫,Draw2D 庫,還可以使用js 框架d3.JavaFX 支持WebView 控件,通過WebView 可以瀏覽d3.js 生成的點(diǎn)邊圖.通過js 技術(shù),還可以實(shí)現(xiàn)節(jié)點(diǎn)的擴(kuò)展、收縮,右鍵菜單等操作.
本項(xiàng)目使用力導(dǎo)向圖進(jìn)行展示.力導(dǎo)向圖布局是d3.js 一種布局的方式,節(jié)點(diǎn)可以擴(kuò)展或者收縮,邊上的文字標(biāo)識表示關(guān)系的名稱,箭頭表示關(guān)系方向.
力導(dǎo)向圖的幾個特征:節(jié)點(diǎn)之間的相互作用力的存在,所以節(jié)點(diǎn)不能重合,然后節(jié)點(diǎn)拖拽的過程中會影響到其他的節(jié)點(diǎn);拖拽的過程中節(jié)點(diǎn)之間的線段長度不變,會彈回去.可以將nodes,links的節(jié)點(diǎn)數(shù)據(jù)轉(zhuǎn)換成可以繪制的坐標(biāo)點(diǎn)數(shù)據(jù),然后通過svg 展現(xiàn)出來[5].這種方式,形象直觀、交互性好,比較符合項(xiàng)目“聯(lián)想式”查詢的設(shè)計(jì)目標(biāo),如圖6.
圖6 關(guān)系的呈現(xiàn)
本項(xiàng)目基于圖數(shù)庫,通過Eclipse RCP 技術(shù)構(gòu)建了一個武器裝備數(shù)據(jù)庫的應(yīng)用,區(qū)別于傳統(tǒng)的分類檢索,這個系統(tǒng)更加注重關(guān)系檢索.這種模式滿足了教員、學(xué)員在軍事研究中對以“聯(lián)想式”、“關(guān)聯(lián)式”查詢檢索為主要特征的信息需求,提高了檢索效率,反響良好.s
本課題的實(shí)踐證明,圖數(shù)據(jù)庫用于表現(xiàn)實(shí)體間的各種關(guān)系,建庫便捷,語法簡單,查詢開銷極小,具有非常大的推廣價值.