陳喜春,牛曉莉
(陸軍步兵學院石家莊校區,石家莊 050083)
在院校、部隊教學和訓練中,常常需要對武器、裝備的相關信息進行查詢、比較,例如下列典型應用場景:
(1)查詢.XXX 步戰車的火控系統采用什么方式?(2)比較.XXX 步戰車和XXX 步戰車的動力部分有什么差別? (3)關聯.我軍和XXX 步戰車相同底盤的裝甲車輛有哪些? XXX 式步兵戰車的衍生型號有哪些?XXX 火炮都用在哪些裝甲車輛上?
這類應用場景帶有突出的“聯想”、“關聯”特征.過去的數據表格中,常常以武器裝備分類為基礎,按照樹的結構進行組織.在使用時,“按圖索驥”,可以找到裝備,但是裝備之間的比較需要在幾個不同的表之間進行,非常麻煩.在工作、學習中,“聯想式”、“關聯式”查詢檢索更加符合教學、認知規律,基于這些考慮,我們需要一個以“聯想式”、“關聯式”查詢檢索為主要特征的數據庫.
圖數據庫是一種利用圖結構存儲和查詢數據的數據庫系統,其理論基礎是圖論.圖的基本要素是節點和邊,對應圖數據庫三大基本要素是節點、關系和屬性.
節點可以代表實體且包含任意多的屬性(鍵值對),利用在節點上添加標簽可以在語義上更直接的表達領域對象;關系連接相應的節點,可以表達實體或者領域對象之間相應的變化和關系[1].
一般的數據庫系統主要涉及四種操作,即增、查、改、刪(CRUD),圖的查找和搜索可以通過圖的遍歷和相關圖論算法完成[2].
傳統上,我們進行數據處理,一般采取關系數據庫的方式.這類數據庫,簡單易用,技術成熟.適用于格式化的數據結構,每個元組的字段組成一致,如成績單、花名冊.
關系數據庫的基本理念是面向實體建模,然后通過關聯表記錄實體間的關聯關系.關系數據庫和我們需求之間的差距主要是:
(1)不容易處理非結構化、半結構化數據.比如:飛機、坦克、火炮的相關信息,很難或根本不能提出一個共同的“模式”,建立一個結構一致的數據表來表示這些信息.
(2)難以體現出實體之間的聯系.由于應用場景設計的原因,關系表查詢涉及到數據表之間的操作,查詢成本比較高.
圖數據庫的創建和維護簡單,每個節點對應于關系數據庫中的一個記錄,節點和邊的屬性則相當于記錄中的字段,屬性內容和個數可以動態變化,節點之間的邊也可以自由刪減并且不會影響已有數據結構的邏輯,這對于關系數據庫來說是非常困難的.
武器裝備是武裝力量用于實施和保障戰斗行動的武器、武器系統以及與之配套的其他軍事技術裝備的統稱.
現代武器裝備按其主要特征有多種分類方法,如按毀傷作用的性質,可分為大規模殺傷破壞武器和常規武器;按所要解決的戰斗任務的范圍,可分為戰略武器和戰術武器;還可以按照機動能力等進行其他分類.
對于這個項目,裝備分類按照裝備管理部門的目錄進行.目前主要考慮裝甲裝備和軍械裝備,因此頂層節點如圖1所示.裝備的組織習慣上是自上至下的樹狀結構,為了解決“跨分支”的節點之間的對應問題,必須設計各種各樣的關系.

圖1 圖數據庫的基本概念
關系描述的是節點之間的“聯系”.在圖2中,裝甲裝備下面的二級分類有坦克、裝甲車、裝甲保障車輛,它們之間的關系是“進一步分類”,如圖3所示.

圖2 節點的組織

圖3 基本分類
三級分類再往下,就到了具體型號,這時的關系為“具體型號”.這種表示方法類似“樹”,但是樹中節點的關系只是擴展,這里的關系則要復雜得多.
具體裝備之后,再向下一層的關系是“具有能力”,比如,步戰車具有四種能力,分別是防護能力、機動能力、火力能力、信息能力.
能力再向下的關系為“具體部件”,具體部件是最末層的節點.這樣設計便于解決類似以下的問題:哪兩種裝甲車輛的火炮都是XXX 炮? 最末層的節點具有更進一步的屬性信息.
在武器裝備的設計制造中,常常遵循模塊化設計原則,例如某型炮塔同時用于兩類坦克,這樣兩性裝備就有可能指向同一末端節點.
圖數據庫因為其無模式特點,使得它更能適應領域變化.在目前這個課題中,圖數據庫系統基本的服務場景主要包括:
(1)提供武器裝備型號的檢索查詢服務.數據管理主要用于實現對系統所需的基礎數據的管理與維護,包括添加、修改、刪除和查詢,考慮到應用的對象和場景,本系統為用戶提供的接口主要是查詢.比如“XXX 步戰車的火控系統采用什么方式?”這種模式的查詢.這種方式可以理解成字典式的查詢,通過目錄樹進行,比較直接,也比較簡單.
(2)提供“聯想式”、“關聯式”的查詢檢索服務.人的思維活動不是線性的,往往帶有跳躍性的特征.比如在教學中,常常會提出“我軍和XXX 步戰車相同底盤的裝甲車輛有哪些?”、“XXX 式步兵戰車的衍生型號有哪些?”、“XXX 火炮都用在哪些裝甲車輛上?”這類問題,這類問題正是“圖”技術的擅長.本系統用圖數據庫來建設數據庫,通過設計導向式的檢索查詢,大大地改善了用戶的體驗.
(3)進行基于屬性的比較服務.比較是裝備教學中的另一個重要特征,通過比較可以使人對事物的認識更加深入.比如“XXX 步戰車和XXX 步戰車的動力部分有什么差別?”這一類問題.本系統的解決方案是利用表格的模式,將兩種對象的共同屬性并列顯示,以實現比較.
本項目利用Eclipse RCP(Rich Client Platform)來實現人機界面[3],RCP 是一個重用框架的開發環境,可以利用RCP 框架開發應用程序.在技術實現上,重點解決3個問題,(1)圖數據庫的創建;(2)節點屬性的展示;(3)圖的呈現.
本項目依托Neo4J 創建數據庫.Neo4J 是圖數據庫的一個重要代表,Neo4J 有兩種運行方式,一是以服務的方式,對外提供REST 接口;另外是嵌入式模式,將數據作為本地文件訪問.
類似于SQL,圖數據的創建和訪問,使用Cypher語句.分別創建節點,創建關系,創建節點的屬性.在執行查詢時,Neo4J 為Cypher 語句提供了Java的調用接口.
武器裝備由于型號不一,構造各異,因此屬性的描述上存在較大的差別.例如,XXX 式步兵戰車,分為6 類數據,分別是一般數據、使用數據、運動速度、通行性能、武器彈藥、通信設備(圖4).
而其他裝備,比如飛機,顯然需要有另外的一些屬性來描述.武器裝備的性能參數由于種類之間差異太大,很難用統一的模式,或者說“數據項”來描述,用鍵值對進行描述是一種更簡便的方法.JSON 文件就是專門描述鍵值對的文件格式.

圖4 某型步戰車技術性能參數
下面是描述XXX 步戰車的機動能力的JSON 文件,鍵與值之間用“:”隔開,鍵值對之間用“{}”隔開.與此類似,其他性能也都用單獨的JSON 文件來表示[4].


在圖數據庫中的最下一級節點,也就是葉節點,具有進一步的信息,可以和一個JSON 文件進行關聯.屬性信息的展示,也就是要將JSON 文件遞歸地讀出來,用表格再展示出來.為了更方便地讀信息,這個表格設計成可以折疊的.這些是編程的技巧問題,不再贅述,具體顯示界面見圖5.

圖5 節點的屬性
圖的展示是本課題的另一重點問題.前文已經介紹,圖是由節點(Node)和邊(Edge)組成的,又稱為點邊圖.節點表示實體,邊表示的是實體間的聯系.為了將點邊圖表示出來,有很多種方案.比如,Eclipse的Zest 庫,JavaFX 庫,Draw2D 庫,還可以使用js 框架d3.JavaFX 支持WebView 控件,通過WebView 可以瀏覽d3.js 生成的點邊圖.通過js 技術,還可以實現節點的擴展、收縮,右鍵菜單等操作.
本項目使用力導向圖進行展示.力導向圖布局是d3.js 一種布局的方式,節點可以擴展或者收縮,邊上的文字標識表示關系的名稱,箭頭表示關系方向.
力導向圖的幾個特征:節點之間的相互作用力的存在,所以節點不能重合,然后節點拖拽的過程中會影響到其他的節點;拖拽的過程中節點之間的線段長度不變,會彈回去.可以將nodes,links的節點數據轉換成可以繪制的坐標點數據,然后通過svg 展現出來[5].這種方式,形象直觀、交互性好,比較符合項目“聯想式”查詢的設計目標,如圖6.

圖6 關系的呈現
本項目基于圖數庫,通過Eclipse RCP 技術構建了一個武器裝備數據庫的應用,區別于傳統的分類檢索,這個系統更加注重關系檢索.這種模式滿足了教員、學員在軍事研究中對以“聯想式”、“關聯式”查詢檢索為主要特征的信息需求,提高了檢索效率,反響良好.s
本課題的實踐證明,圖數據庫用于表現實體間的各種關系,建庫便捷,語法簡單,查詢開銷極小,具有非常大的推廣價值.