版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
知識(shí)圖譜構(gòu)建系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)摘要在信息量爆炸式增長(zhǎng)的“web2.0”時(shí)代,大量的基礎(chǔ)性數(shù)據(jù)信息被忽視,甚至是直接丟棄掉。然而這些信息中蘊(yùn)藏著大量的數(shù)據(jù)關(guān)系,分析這些數(shù)據(jù)和關(guān)系可以得到大量的知識(shí)。例如通過構(gòu)建一個(gè)由民眾關(guān)注政治新聞的訪問記錄構(gòu)建的知識(shí)圖譜,可以分析到民眾輿情對(duì)時(shí)政的看法。因此,如何利用這些信息成了重中之重。知識(shí)圖譜構(gòu)建系統(tǒng)應(yīng)需求而生,通過導(dǎo)入數(shù)據(jù)信息可以得到一個(gè)完整的知識(shí)圖譜,通過分析圖譜便可以獲取信息內(nèi)的知識(shí)。知識(shí)圖譜構(gòu)建系統(tǒng)包括登錄功能、圖譜領(lǐng)域管理功能、圖譜導(dǎo)入導(dǎo)出功能、圖譜內(nèi)節(jié)點(diǎn)管理系統(tǒng)和圖譜內(nèi)關(guān)系管理系統(tǒng)。關(guān)鍵詞:知識(shí)圖譜,Java語言,Neo4j圖數(shù)據(jù)庫,數(shù)據(jù)分析,系統(tǒng)TitleDesignandimplementationofknowledgemapconstructionsystemAbstractIntheageof"Web2.0"withthegrowthofinformationexplosions,alargeamountofbasicinformationwasignored,orevendirectlydisposedof.But,there'salotofdatainThisinformation.Analyzingdataandthisrelationshipcangetalotofknowledge.Forexample,bybuildingamapofknowledgebuiltbyarecordofpeople'sattentiontopoliticalnews,wecananalyzepublicopinionaboutmodernpolitics.SohowtousethisinformationhasbeenapriorityMain.Systemtheconstructionofamapofknowledgewasbornaccordingtowithneeds.Themapofknowledgecompletecanbeobtainedbyimportinginformationdata,andknowledgeininformationcanbeobtainedbyanalyzingrespect.knowledgemapsincludingloginfunctions,mapdomainmanagementfunctions,mapimportandexportfunctions,mapnodemanagementsystemandmaprelationshipmanagementsystem.Keywords:knowledgegraph,Javalanguage,Neo4jgraphdatabase,Dataanalysis,system目錄TOC\o"1-3"\f\h\z\t"一標(biāo)題,1,二標(biāo)題,2,三標(biāo)題,3"摘要 -第1章緒論1.1課題研究背景及意義1.1.1課題研究背景 現(xiàn)如今,我們正處在信息爆炸增長(zhǎng)的“web2.0”時(shí)代,數(shù)據(jù)互聯(lián)已成了當(dāng)今時(shí)代發(fā)展方向。然而數(shù)據(jù)互聯(lián)引發(fā)的數(shù)據(jù)增長(zhǎng)帶來了新的問題——如何將這些雜亂的、結(jié)構(gòu)松散的數(shù)據(jù)轉(zhuǎn)化為我們能夠總結(jié)、研究的知識(shí)?2012年11月Google公司率先提出知識(shí)圖譜(KnowledgeGraph,KG)的概念,表示將在其搜索結(jié)果中加入知識(shí)圖譜的功能[1]。然而google沒有想到的是,這個(gè)最開始旨在為搜索引擎服務(wù)、提高搜索能力、增強(qiáng)用戶搜索質(zhì)量以及搜索體驗(yàn)的數(shù)據(jù)整合功能最終成了一條讓我們通向知識(shí)互聯(lián)的嶄新“web3.0”時(shí)代的大道。盡管KnowledgeGraph(KnowledgeGraph)概念的提出相對(duì)較晚,但BernersLee(BernersLeeidentifier)早在2006年就提出了數(shù)據(jù)鏈接(linkeddata)的概念,它呼吁促進(jìn)和改進(jìn)諸如URI、RDF和OWL等相關(guān)技術(shù)標(biāo)準(zhǔn),以便為語義網(wǎng)絡(luò)的到來做好準(zhǔn)備。于是,出現(xiàn)了語義網(wǎng)絡(luò)研究的熱潮,而知識(shí)圖譜技術(shù)正是建立在相關(guān)研究成果的基礎(chǔ)上,是對(duì)現(xiàn)有語義網(wǎng)絡(luò)技術(shù)的揚(yáng)棄和升華。[2]。1.1.2課題研究意義 龐大的數(shù)據(jù)信息充斥在網(wǎng)絡(luò)上,我國國內(nèi)知識(shí)圖譜研究大多以科研工作為主,或者是以某一學(xué)科的數(shù)據(jù)信息為研究方向。這對(duì)于大部分?jǐn)?shù)據(jù)信息——冗余的、淺顯性但基礎(chǔ)的數(shù)據(jù)是一種奢侈的浪費(fèi),這些龐大的數(shù)據(jù)雖然不能提供深層次的數(shù)據(jù)知識(shí),卻可以提供普世的、代表大眾活動(dòng)的社會(huì)關(guān)系。這一系統(tǒng)研究的主要目的是通過系統(tǒng)設(shè)計(jì),使網(wǎng)絡(luò)網(wǎng)頁上的信息能夠以最小的代價(jià)得到組織,使網(wǎng)絡(luò)中積累的信息能夠被人們所利用。知識(shí)圖譜,顧名思義將數(shù)據(jù)屬性、關(guān)系等信息進(jìn)行提取,將數(shù)據(jù)分析得到的知識(shí)用圖的方式鏈接構(gòu)建,得到的便是知識(shí)圖譜。知識(shí)圖譜從圖的角度,可以解讀為一個(gè)概念網(wǎng)絡(luò),在這個(gè)網(wǎng)絡(luò)中,每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)現(xiàn)實(shí)世界的物體,圖譜中的邊就是鏈接物體的關(guān)系。因此,可以說知識(shí)圖譜就是物理世界的象征。知識(shí)圖的主要作用是,它可以通過推理節(jié)點(diǎn)屬性以及節(jié)點(diǎn)關(guān)系進(jìn)行概念檢索;另一方面是通過圖的形式向用戶表現(xiàn)出數(shù)據(jù)處理后梳理好的數(shù)據(jù)關(guān)系和信息,使人們擺脫人工過濾網(wǎng)頁以尋求答案的模式。例如反欺詐,在風(fēng)險(xiǎn)控制中,反欺詐尤為重要。然而,如何組建起一個(gè)反欺詐引擎,并將不同來源的結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)結(jié)合起來,從而做到可以準(zhǔn)確識(shí)別出欺詐案例(如集體欺詐、身份偽造、代理包裝等)已成為大數(shù)據(jù)的反欺詐的難點(diǎn)所在。欺詐審查帶來新的挑戰(zhàn)便是大量的欺詐案件會(huì)牽涉到復(fù)雜的關(guān)系網(wǎng)。這時(shí),如果使用知識(shí)圖譜便能夠解決這兩個(gè)問題,正是利用了知識(shí)圖譜作為關(guān)系的直接表示方式的優(yōu)勢(shì)。在知識(shí)圖譜內(nèi),用戶可以簡(jiǎn)單方便的添加新數(shù)據(jù)源,組成數(shù)據(jù)節(jié)點(diǎn),而且知識(shí)圖譜本身作為表示關(guān)系的數(shù)據(jù)處理工具,用圖的方式直觀表達(dá)出內(nèi)在信息可以幫助用戶更有效地分析內(nèi)在深層關(guān)系中的潛在風(fēng)險(xiǎn)。又如精確營銷,通過分析用戶、理解用戶,一家企業(yè)可以比其競(jìng)爭(zhēng)對(duì)手在挖掘潛在客戶。網(wǎng)絡(luò)時(shí)代發(fā)揮優(yōu)勢(shì)。在市場(chǎng)營銷的手段多種多樣的今天,數(shù)據(jù)分析發(fā)掘已經(jīng)變得至關(guān)重要,甚至到了無法取代的地步。如果想要更好地理解用戶的行為,知識(shí)圖能夠結(jié)合各種數(shù)據(jù)源來分析實(shí)體間的關(guān)系。1.2國內(nèi)外研究現(xiàn)況 知識(shí)圖譜最開始在科學(xué)研究領(lǐng)域中做出了重大貢獻(xiàn),并且知識(shí)圖譜在這一領(lǐng)域的成果也是最多的。White和McCain通過作者引用的圖集將信息科學(xué)的研究劃分為“領(lǐng)域分析”和“信息檢索”,并討論了范式轉(zhuǎn)換等問題?;趧?dòng)力學(xué)原理和科學(xué)進(jìn)化的結(jié)構(gòu),KatyBorner、jeegarT.Maru和RobertL.Goldstone提出了一個(gè)同時(shí)反映合著者和引文網(wǎng)絡(luò)增長(zhǎng)規(guī)律的模型,并在PNAS數(shù)據(jù)庫中進(jìn)行了驗(yàn)證。然后,針對(duì)該模型的不足,建立了Tarl模型(主題、退化、循環(huán)連接)[3]。圖像在視覺信息中占有重要支配地位,而視覺又在人類對(duì)外界的感知中占有主導(dǎo)地位,所以當(dāng)圖形與文字結(jié)合起來進(jìn)行教學(xué),效率將成幾何倍數(shù)提高。R.H.Hal率先對(duì)知識(shí)圖譜在教學(xué)中是否起作用進(jìn)行了研究,并且通過實(shí)現(xiàn)證明了知識(shí)圖譜確實(shí)可以提高學(xué)習(xí)效率;H.E.Herl等讓學(xué)生們自主繪制知識(shí)圖譜,以此作為判斷學(xué)生們對(duì)知識(shí)的理解程度的依據(jù);J.Bidarra更實(shí)在教學(xué)中直接引入了知識(shí)圖譜[4]。正如前文所述,在我國,眾多基礎(chǔ)的操作數(shù)據(jù)被遺棄,沒有通過知識(shí)圖譜的合成篩選來提取出它的價(jià)值。而N.Haritash與B.M.Gupta通過繪制S&T問題知識(shí)圖譜,了解了人們正在探討的問題,以及民眾們自己的意見,從而形成對(duì)政府的諫言,影響到整個(gè)社會(huì)領(lǐng)域[5]。國內(nèi)對(duì)知識(shí)圖譜的鉆研較晚,受國外研究的影響比較大。2003年5月在加州大學(xué)貝克曼中心舉行的美國科學(xué)院“知識(shí)圖譜測(cè)繪”大型學(xué)術(shù)研討會(huì),對(duì)我國科學(xué)知識(shí)圖譜的發(fā)展產(chǎn)生了普遍的積極影響。。正由這個(gè)研討會(huì)開始,劉則淵教授開始在中國引領(lǐng)了國內(nèi)知識(shí)圖譜研究。和國外研究相似的是,在中國,對(duì)知識(shí)圖譜的開發(fā)與研究也是從科研領(lǐng)域開始的。根據(jù)提交的文件數(shù)量,主要由研究小組對(duì)知識(shí)圖譜進(jìn)行研究,集中在大連理工大學(xué)、武漢大學(xué)、中國科學(xué)院、天津師范大學(xué)、南京大學(xué)等高?;蚩蒲?,大連理工大學(xué)更是因?yàn)橛袆t淵教授坐鎮(zhèn),成了了研究的主力。各大研究團(tuán)體發(fā)布了類論文,涵蓋了知識(shí)圖譜的構(gòu)建、設(shè)計(jì)、可視化、繪制方法、應(yīng)用的軟件以及未來發(fā)展方向,對(duì)各種發(fā)展中出現(xiàn)的問題加以解決,比如針對(duì)中文索引的格式、軟件無法處理中文等。我國對(duì)知識(shí)圖譜的研究也包含了教學(xué)領(lǐng)域的一些研究成果:熊軍開展了醫(yī)學(xué)文獻(xiàn)改革的課程,提出了相應(yīng)的改革思路。利用信息可視化技術(shù)在其所在的醫(yī)學(xué)科內(nèi)繪制了知識(shí)圖譜。通過將知識(shí)圖譜應(yīng)用在科研課題分析中,趙玉鵬,閆魏提出了借用知識(shí)圖譜幫助研究生尋找當(dāng)代科學(xué)的熱點(diǎn)研究方向等[6]。在社會(huì)解決方案領(lǐng)域,而大連理工大學(xué)馮桂平、李明子利用陳朝梅博士開發(fā)的信息可視化分析工具,對(duì)中國社會(huì)科學(xué)引文索引數(shù)據(jù)庫和“社區(qū)”負(fù)責(zé)人2000多篇與該課題相關(guān)的文獻(xiàn)分析了詞頻并對(duì)統(tǒng)計(jì)數(shù)據(jù)進(jìn)行了研究,從而通過關(guān)于社區(qū)熱點(diǎn)問題的數(shù)據(jù)繪制出了知識(shí)圖譜,進(jìn)而幫助了社區(qū)的發(fā)展和社區(qū)服務(wù)。雷爾清將以文獻(xiàn)記載為研究對(duì)象,通過知識(shí)地圖分析軟件繪制相關(guān)知識(shí)地圖,借助文獻(xiàn)引文分析、共現(xiàn)分析、聚類分析等方法,從宏觀角度把握美軍軍事醫(yī)學(xué)的發(fā)展趨勢(shì)將美國科學(xué)信息研究所數(shù)據(jù)庫中公布的奧運(yùn)會(huì)研究主題從中年到年,繪制出國際奧運(yùn)會(huì)研究的國家和機(jī)構(gòu)分布、研究熱點(diǎn)和變化趨勢(shì)的知識(shí)地圖,并根據(jù)繪制的知識(shí)地圖進(jìn)行比較系統(tǒng)總結(jié)了國際奧林匹克運(yùn)動(dòng)研究的現(xiàn)狀和未來發(fā)展趨勢(shì)[7]。1.3論文結(jié)構(gòu)根據(jù)課題研究方向要求,對(duì)本系統(tǒng)進(jìn)行整體的設(shè)計(jì)與實(shí)現(xiàn)過程形成了本篇論文的結(jié)構(gòu)脈絡(luò)。第一章即是通過對(duì)多方面信息的了解,以及多篇文獻(xiàn)的翻閱后總結(jié)出的課題研究背景意義以及目前國內(nèi)外的研究現(xiàn)狀與成果。第二章將對(duì)本系統(tǒng)開發(fā)過程中使用的技術(shù)和軟件進(jìn)行大致的介紹,并且對(duì)選擇此技術(shù)的優(yōu)越性進(jìn)行解答。第三章根據(jù)軟件設(shè)計(jì)過程,將對(duì)本系統(tǒng)進(jìn)行需求分析以及可行性分析,分析并確定各功能模塊的功能目標(biāo),并畫出用例圖。第四章對(duì)系統(tǒng)進(jìn)行功能模塊分析,對(duì)各功能模塊進(jìn)行概要設(shè)計(jì),確定基本邏輯結(jié)構(gòu),確定數(shù)據(jù)庫的使用與設(shè)計(jì)。第五章是在基礎(chǔ)的各模塊設(shè)計(jì)上,從實(shí)際代碼出發(fā),對(duì)各功能進(jìn)行細(xì)節(jié)上的設(shè)計(jì)與實(shí)現(xiàn)。第六章主要是項(xiàng)目軟件的測(cè)試,通過對(duì)軟件進(jìn)行系統(tǒng)的設(shè)計(jì)確定業(yè)務(wù)邏輯的正確性,并記錄測(cè)試用例與結(jié)果。最后總結(jié)在課題設(shè)計(jì)實(shí)現(xiàn)期間遇到的問題,學(xué)到的知識(shí)以及對(duì)未來系統(tǒng)發(fā)展的暢想。第2章關(guān)鍵技術(shù)與開發(fā)工具2.1Java語言 JamesGosling與同事們共同開發(fā)了Java語言,并于1995年正式發(fā)布的面向?qū)ο蟮木幊陶Z言,據(jù)統(tǒng)計(jì),現(xiàn)在世界上有數(shù)億的系統(tǒng)都是由java語言開發(fā)的。Java語言本身不僅祛除了C++中較難技術(shù):多繼承與指針等概念技術(shù),還吸收并發(fā)展了C++語言的優(yōu)點(diǎn)。因此,Java兩個(gè)顯著優(yōu)點(diǎn):簡(jiǎn)易、功能強(qiáng)大。2.1.1Java語言的特點(diǎn) Java語言不僅有上文提到的兩大基本優(yōu)點(diǎn),還包括下列五大特點(diǎn): 1.跨平臺(tái)性 跨平臺(tái)性是指本語言能夠在不同的計(jì)算機(jī)硬件和操作系統(tǒng)環(huán)境中正常運(yùn)行。當(dāng)Java文件運(yùn)行時(shí),通過javac命令源文件將轉(zhuǎn)換為字節(jié)碼文件,得到的文件是可以支持多平臺(tái)的文件。Java虛擬機(jī)負(fù)責(zé)接收和處理類文件,作為一個(gè)通用的執(zhí)行平臺(tái),Java虛擬機(jī)將會(huì)裝換來自不同Java平臺(tái)的文件,而且轉(zhuǎn)換出的文件實(shí)現(xiàn)功能是相同的,所以說在各類平臺(tái)上運(yùn)行的java程序也可以在其他平臺(tái)運(yùn)行,即跨平臺(tái)性。2.面向?qū)ο竺嫦驅(qū)ο缶帉懙恼Z言相較于面向過程編寫的語言更能反映出對(duì)現(xiàn)實(shí)世界的折射,因而面向?qū)ο蠹夹g(shù)本身就是一個(gè)優(yōu)點(diǎn),它可以將應(yīng)用程序的開發(fā)變得簡(jiǎn)單易用。Java是一種面向?qū)ο蟮恼Z言,也繼承了面向?qū)ο蟮闹T多好處,如代碼擴(kuò)展、代碼復(fù)用等[8]。3.安全性在編譯期間,Java程序?qū)z查語句和語義,要明確每個(gè)變量是否存在空值以及對(duì)應(yīng)值是否合法,檢查通過后,Java語句才可以被編譯成Java類。在運(yùn)行階段時(shí),需要加載Java類,并在運(yùn)行之前對(duì)字節(jié)碼校驗(yàn)器進(jìn)行校驗(yàn)。如果是在網(wǎng)絡(luò)環(huán)境下使用Java類,這樣就可以限制其權(quán)限,從而確保用戶的安全。這些校對(duì)教程步驟將Java程序從編寫、編譯、構(gòu)建、加載與運(yùn)行方面確保了程序的安全穩(wěn)定。相較于其他編程語言,Java語言自帶的垃圾回收機(jī)制(garbagecollecto)從防止內(nèi)存溢出方面保證了程序安全。垃圾回收機(jī)制就像一個(gè)保姆在程序員身后進(jìn)行內(nèi)存回收,因此可以發(fā)現(xiàn),大多數(shù)Java程序員很少考慮內(nèi)存溢出,正體現(xiàn)出Java對(duì)于內(nèi)存處理的安全性。Java語言支持拋出異常,這就使程序在運(yùn)行過程中如果發(fā)生數(shù)據(jù)問題或者邏輯問題,無法繼續(xù)運(yùn)行時(shí)可以自動(dòng)跳出,并且在控制臺(tái)輸出預(yù)設(shè)的異常語句。程序員可以很輕松的通過異常語句對(duì)程序發(fā)生的問題進(jìn)行排查和解決,同時(shí)因?yàn)槌绦蜻M(jìn)入異常后直接拋出異常并終止了程序,這對(duì)預(yù)防黑客襲擊也有積極的輔助作用。4.多線程線程可以共享內(nèi)存和文件句柄,互相之間可以得到進(jìn)程狀態(tài)信息。正因?yàn)檫@些線程之間可以共享數(shù)據(jù)信息,并且多線程在同一進(jìn)程內(nèi)共享虛擬空間,在運(yùn)行時(shí),線程的性能明顯高于進(jìn)程。這些虛擬環(huán)境即為進(jìn)程片段以及進(jìn)程的公共數(shù)據(jù)等。當(dāng)系統(tǒng)需要?jiǎng)?chuàng)建一個(gè)進(jìn)程時(shí),需要首先為要?jiǎng)?chuàng)建的進(jìn)程分配一個(gè)獨(dú)立的存儲(chǔ)空間,以及大量的資源;而當(dāng)系統(tǒng)創(chuàng)建一個(gè)線程時(shí),過程將相對(duì)簡(jiǎn)單很多,因此在進(jìn)行并發(fā)操作時(shí),使用多線程實(shí)現(xiàn)將比使用多進(jìn)程實(shí)現(xiàn)有更多優(yōu)勢(shì)和更好的性能。綜合來說,使用多線程有共享內(nèi)存、占用資源低導(dǎo)致任務(wù)并發(fā)效率高、基于Java開發(fā)操作簡(jiǎn)單等優(yōu)勢(shì)[9]。2.2Neo4j數(shù)據(jù)庫 知識(shí)圖譜是基于圖的數(shù)據(jù)結(jié)構(gòu),所以考慮采用后臺(tái)數(shù)據(jù)庫時(shí)優(yōu)先考慮圖數(shù)據(jù)庫,查取圖數(shù)據(jù)庫排行榜后發(fā)現(xiàn),neo4j數(shù)據(jù)庫遙遙領(lǐng)先,而且在知識(shí)圖譜領(lǐng)域公認(rèn)的后臺(tái)數(shù)據(jù)庫便是neo4j數(shù)據(jù)庫[10]。以圖的形式存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫即為圖數(shù)據(jù)庫。在圖數(shù)據(jù)庫里,應(yīng)用的數(shù)據(jù)信息將存儲(chǔ)在節(jié)點(diǎn)、關(guān)系和屬性中,類似于以“行,列”形式存儲(chǔ)數(shù)據(jù)的RDBMS,GDBMS以“圖”形式存儲(chǔ)數(shù)據(jù)。2.2.1Neo4j數(shù)據(jù)庫的優(yōu)點(diǎn) 1.完整的ACID支持合理的ACID操作是數(shù)據(jù)一致性的基本保證。Neo4j確保在一個(gè)事務(wù)中同時(shí)進(jìn)行多個(gè)操作,并確保數(shù)據(jù)信息遵守ACID原則,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability),這些原則保證事務(wù)中數(shù)據(jù)的正確性。Neo4j提供了對(duì)此功能的支持,無論是嵌入模式還是多服務(wù)器集群部署。2.高可用性和高可擴(kuò)展性可信賴的圖形存儲(chǔ)器易于在任何應(yīng)用中使用,伴隨運(yùn)行中應(yīng)用的發(fā)展,性能問題也越來越突出,無論應(yīng)用程序如何變化,neo4j只受計(jì)算機(jī)硬件性能的影響,而不受公司限制這個(gè)應(yīng)用程序。一個(gè)Neo4j服務(wù)器可以有上億個(gè)節(jié)點(diǎn),并且能夠容納數(shù)以億計(jì)的關(guān)系。當(dāng)然,如果單個(gè)節(jié)點(diǎn)不能滿足數(shù)據(jù)需求,它可以使用分布式集群。3.通過遍歷工具高速檢索數(shù)據(jù)圖數(shù)據(jù)庫的最大優(yōu)點(diǎn)是可儲(chǔ)存復(fù)雜資料。有了neo4j提供的搜索工具,就可以進(jìn)行高效率的數(shù)據(jù)檢索,檢索達(dá)到每秒數(shù)十億級(jí),檢索操作與RDBMS中的join操作非常相似[11]。4.可視化圖2-1Neo4j前端頁面 Neo4j自帶的jsp前端可視化處理非常優(yōu)越,它自身便可以將內(nèi)部存儲(chǔ)的數(shù)據(jù)信息以圖的形式輸出出來,如圖2-圖2-1Neo4j前端頁面2.2.2Neo4j查詢語言Cypher介紹 Cypher是一種描述性的圖形查詢語言,它允許在不編寫遍歷代碼的情況下,對(duì)查詢進(jìn)行表達(dá)并有效地存儲(chǔ)圖形。西弗仍然在發(fā)展和成熟,這意味著語法可能會(huì)改變。與此同時(shí),這意味著作為一個(gè)組件,它不需要進(jìn)行嚴(yán)格的性能測(cè)試。作為一種人工查詢語言,Cypher本身適合于在數(shù)據(jù)庫上執(zhí)行點(diǎn)到點(diǎn)模式(ad-hoc)查詢的開發(fā)人員和專業(yè)操作人員。其結(jié)構(gòu)基于英語單詞和精巧的圖表。很多像like和orderby這樣的關(guān)鍵字都是由SQL激發(fā)的。SPARQL提供了模式匹配表達(dá)式。regex匹配的實(shí)現(xiàn)來源于Scala編程語言。Cypher作為一種數(shù)據(jù)庫管理語言,也是一種聲明性語言,相比于命令式語言(如Java)和腳本語言(如Gremlin和jruby),重點(diǎn)是如何從圖中檢索,而不是如何檢索。這樣就可以在用戶沒有公布的實(shí)現(xiàn)細(xì)節(jié)中對(duì)查詢進(jìn)行優(yōu)化。2.3JSP技術(shù) JSP全名(JavaSeverPages)是由Sun公司指導(dǎo),多個(gè)公司方共同制定的技術(shù)標(biāo)準(zhǔn)。基于Servlet規(guī)范的JSP是一種動(dòng)態(tài)Web開發(fā)技術(shù),其本質(zhì)是一種簡(jiǎn)化的Servlet。HTML和Java代碼共同存在于JSP文件中,HTML代碼用來實(shí)現(xiàn)網(wǎng)頁中靜態(tài)內(nèi)容的顯示,Java代碼用來實(shí)現(xiàn)網(wǎng)頁中動(dòng)態(tài)內(nèi)容。要與傳統(tǒng)HTML區(qū)分,需要使用JSP文件擴(kuò)展名jap[12]。 由JSP技術(shù)開發(fā)的Web應(yīng)用程序以Java為基礎(chǔ),具有如下特點(diǎn):1.預(yù)編譯預(yù)先編譯是指用戶首次通過瀏覽器訪問JSP頁面時(shí)對(duì)JSP頁進(jìn)行編譯,同時(shí)將編譯后的代碼保存一次,在下次訪問時(shí)將其直接填充到編譯后的代碼中。這樣既節(jié)約了服務(wù)器CPU資源,又大大提高了客戶端的訪問速度。2.業(yè)務(wù)代碼相分離利用JSP技術(shù)開發(fā)Web應(yīng)用程序時(shí),既能實(shí)現(xiàn)JSP文件與HTML文件的分離,又能實(shí)現(xiàn)界面與應(yīng)用程序的分離。這種構(gòu)建方式可以減輕程序員的壓力,使整個(gè)項(xiàng)目更易維護(hù)。3.組件重用通過使用JavaBeans,JSP可以編寫業(yè)務(wù)組件,也就是使用JavaBeans類封裝業(yè)務(wù)處理代碼,或者作為數(shù)據(jù)存儲(chǔ)模型使用。JavaBeans可以在JSP頁面上甚至整個(gè)項(xiàng)目中重用,并且可以應(yīng)用于其他Java應(yīng)用程序。4.跨平臺(tái)因?yàn)镴SP是基于Java語言的,所以它可以使用JavaAPI,而且所有的JSP都是跨平臺(tái)的,可以和Windows和Linux等不同的系統(tǒng)應(yīng)用。2.4IntelliJ
IDEA開發(fā)工具 IDEA的IntelliJ主要用于支持Java,Scala,Groovy等語言,以及支持當(dāng)前主流技術(shù)和框架的開發(fā)工具,擅長(zhǎng)于企業(yè)應(yīng)用,移動(dòng)應(yīng)用和Web應(yīng)用的開發(fā)。在這個(gè)行業(yè)中,IntelliJ被認(rèn)為是java最好的開發(fā)工具之一。最早的版本在2001年1月發(fā)布,當(dāng)時(shí)是少數(shù)Java集成開發(fā)環(huán)境之一,使用前階代碼瀏覽和代碼重構(gòu)。從2010年的Infoworld報(bào)告中可以看到,比較當(dāng)時(shí)市場(chǎng)上的主流Java集成開發(fā)環(huán)境,包括:Eclipse、IntelliJ、NetBeans、JDeveloper,IntelliJ獲得了該媒體測(cè)試的最高評(píng)分。IntelliJ為AppCode,CLion,PhpStorm,PyCharm,RubyMine,WebStorm和MPS等個(gè)別編程語言開發(fā)的集成環(huán)境,都可以通過插件加載IntelliJIDEA來使用。第3章系統(tǒng)需求分析在本章節(jié)將根據(jù)軟件工程中需求分析的要求,根據(jù)用戶使用情況進(jìn)行功能需求、性能需求、運(yùn)行環(huán)境需求以及其他需求分析,并從技術(shù)、經(jīng)濟(jì)、操作三大方面進(jìn)行可行性分析。3.1需求分析 在信息爆炸發(fā)展的今天,如何將數(shù)據(jù)信息相互聯(lián)系,找到其中的關(guān)系,從而將數(shù)據(jù)信息轉(zhuǎn)換為知識(shí)以及是當(dāng)代發(fā)展的重中之重[13]。知識(shí)圖譜構(gòu)建系統(tǒng)正是應(yīng)此需求而生,數(shù)據(jù)信息輸入系統(tǒng)后,可以得到一個(gè)完整的知識(shí)圖譜,從而表達(dá)數(shù)據(jù)間的關(guān)系,將數(shù)據(jù)鏈接提煉成知識(shí)。3.1.1功能需求 1.管理員登錄功能圖3-1管理員登錄用例圖 作為一個(gè)系統(tǒng),應(yīng)當(dāng)滿足管理員的登錄操作功能需求,根據(jù)管理員用戶名與密碼登錄系統(tǒng),同時(shí)應(yīng)可以保存多個(gè)管理員。管理員登錄功能用例圖如圖3圖3-1管理員登錄用例圖 2.知識(shí)圖譜領(lǐng)域管理功能 如果想要完整的構(gòu)建一個(gè)知識(shí)圖譜,首先需要管理一個(gè)知識(shí)圖譜領(lǐng)域,再在圖譜領(lǐng)域內(nèi)對(duì)知識(shí)圖譜進(jìn)行操作。知識(shí)圖譜領(lǐng)域管理功能用例圖如圖3-2。 3.知識(shí)圖譜導(dǎo)入導(dǎo)出功能 生出一篇知識(shí)圖譜,首先需要數(shù)據(jù)信息的導(dǎo)入,對(duì)數(shù)據(jù)信息處理后,系統(tǒng)構(gòu)建出知識(shí)圖譜,并可以將知識(shí)圖譜以圖片的形式輸出。知識(shí)圖譜導(dǎo)入導(dǎo)出功能用例圖如圖3-3。圖3-3圖3-3知識(shí)圖譜導(dǎo)入導(dǎo)出用例圖圖3-2知識(shí)圖譜領(lǐng)域管理用例圖 4.知識(shí)圖譜節(jié)點(diǎn)管理功能圖3-4知識(shí)圖譜節(jié)點(diǎn)管理用例圖 知識(shí)圖譜生成成功后,應(yīng)當(dāng)支持管理員對(duì)節(jié)點(diǎn)進(jìn)行增刪改查等管理操作。知識(shí)圖譜管理功能用例圖如圖3圖3-4知識(shí)圖譜節(jié)點(diǎn)管理用例圖 5.知識(shí)圖譜關(guān)系管理功能圖3-5知識(shí)圖譜關(guān)系管理用例圖 在對(duì)節(jié)點(diǎn)的操作之后,也應(yīng)對(duì)數(shù)據(jù)間的關(guān)系提供操作功能。知識(shí)圖譜關(guān)系管理功能用例圖如圖3圖3-5知識(shí)圖譜關(guān)系管理用例圖3.1.2性能需求 1.響應(yīng)時(shí)間 由于錄入數(shù)據(jù)本身耗時(shí)較大,認(rèn)為平均錄取速度應(yīng)達(dá)到有1秒/200條足以支持系統(tǒng)的響應(yīng)時(shí)間。進(jìn)行除錄入輸出外操作時(shí),響應(yīng)時(shí)間應(yīng)在2秒以內(nèi)。進(jìn)行批量操作時(shí),響應(yīng)時(shí)間應(yīng)控制在5秒以內(nèi)。 2.存儲(chǔ)數(shù)據(jù)量 知識(shí)圖是由大量數(shù)據(jù)和相互關(guān)系組成的圖,所以知識(shí)圖譜構(gòu)建系統(tǒng)的存儲(chǔ)功能應(yīng)該十分強(qiáng)大,以免出現(xiàn)存儲(chǔ)異常的情況。 3.界面友好 在巨量的數(shù)據(jù)之下產(chǎn)生的知識(shí)圖譜必然是“枝繁葉茂”的,用戶需要一個(gè)干凈整潔的界面顯示圖譜。進(jìn)而使用戶對(duì)圖譜進(jìn)行操作,分析關(guān)系時(shí),可以得到一個(gè)良好的使用感受。3.1.3運(yùn)行環(huán)境需求 1.硬件環(huán)境 對(duì)客戶機(jī)無特殊要求,一般個(gè)人PC電腦即可?;緮?shù)據(jù)要求為:處理器:1GHz32位或者64位處理器;內(nèi)存:1GB及以上;顯卡:支持DirectX9128M及以上;硬盤空間:16G以上(主分區(qū),NTFS格式)2.軟件環(huán)境 win7操作系統(tǒng)及以上,已安裝Neo4j數(shù)據(jù)庫、MySQL數(shù)據(jù)庫。3.1.4其他需求 1.可擴(kuò)展性 本系統(tǒng)作為第一版系統(tǒng)設(shè)計(jì),應(yīng)當(dāng)在程序設(shè)計(jì)時(shí)保留程序的可拓展性,保證對(duì)系統(tǒng)的二次開發(fā)以及利用。各模塊間應(yīng)嚴(yán)格遵守“高內(nèi)聚,低耦合”原則,從而利于程序在使用過程這接受用戶正向反饋,對(duì)系統(tǒng)進(jìn)行功能拓展。擴(kuò)展性是軟件系統(tǒng)計(jì)算處理能力的一種設(shè)計(jì)指標(biāo),高擴(kuò)展性代表著軟件在系統(tǒng)發(fā)展過程中保持旺盛的生命力,通過少量的修改,甚至只是增加硬件設(shè)備,就可以實(shí)現(xiàn)整個(gè)系統(tǒng)處理能力的線性增長(zhǎng),達(dá)到高吞吐量和低延遲的高性能。 2.可維護(hù)性 軟件的可維護(hù)性是衡量系統(tǒng)可修復(fù)(復(fù)原)性和可改善性的難度。所謂的可修性是指當(dāng)系統(tǒng)出現(xiàn)故障后,能夠?qū)⒐收吓懦蛞种?,并將其恢?fù)到原來的正常運(yùn)行狀態(tài)的可能性;而可改進(jìn)性是指系統(tǒng)能夠接受已有功能的改進(jìn),增加新功能的可能性。 因此系統(tǒng)應(yīng)具有可維護(hù)性,使系統(tǒng)在整個(gè)使用的生命周期內(nèi)保持可用度,并且能夠處理拋出的問題化簡(jiǎn),通過在系統(tǒng)內(nèi)設(shè)定的問題排查,是管理員可以處理輕量級(jí)的bug,再有開發(fā)人員處理重大bug。 3.存儲(chǔ)數(shù)據(jù)類型 由于客戶想要構(gòu)成的知識(shí)圖譜會(huì)有多種形式以及類型,所以構(gòu)建系統(tǒng)允許的輸入數(shù)據(jù)類型應(yīng)當(dāng)是多種的,能完全滿足用戶數(shù)據(jù)輸入要求。而對(duì)于非法數(shù)據(jù)類型,系統(tǒng)在數(shù)據(jù)輸入時(shí)應(yīng)當(dāng)能夠檢測(cè)出來,并且提示用戶輸入數(shù)據(jù)類型異常,將數(shù)據(jù)異常風(fēng)險(xiǎn)排除,3.2可行性分析3.2.1技術(shù)可行性 本系統(tǒng)有Java語言編寫,基于Java語言的簡(jiǎn)易性,本系統(tǒng)從基礎(chǔ)編程的角度看是易于實(shí)現(xiàn)的。后臺(tái)存儲(chǔ)導(dǎo)入的信息數(shù)據(jù)庫是Neo4j數(shù)據(jù)庫,Neo4j數(shù)據(jù)一致致力于開發(fā)知識(shí)圖譜領(lǐng)域,本身的數(shù)據(jù)庫設(shè)計(jì)也是貼合知識(shí)圖譜需求的,從數(shù)據(jù)層面上看本系統(tǒng)的開發(fā)是沒有重大困難的。將Neo4j與Java語言相連接時(shí),Neo4j本身有鏈接的包,可以很輕松的將兩種鏈接上,并通過Java直接對(duì)Neo4j數(shù)據(jù)庫后臺(tái)進(jìn)行操控,從業(yè)務(wù)邏輯上看,實(shí)現(xiàn)起來并不困難。 本系統(tǒng)開發(fā)的其他技術(shù)和工具,例如jsp、MySQL數(shù)據(jù)庫等,由于本身對(duì)于系統(tǒng)的占比較小,而且使用的技術(shù)都較為淺顯,易于查找和學(xué)習(xí),所以對(duì)整體系統(tǒng)的設(shè)計(jì)與構(gòu)建并不產(chǎn)生影響。3.2.2經(jīng)濟(jì)可行性 提出知識(shí)圖譜構(gòu)建系統(tǒng)設(shè)計(jì)方案之前,知識(shí)圖譜構(gòu)建時(shí)對(duì)數(shù)據(jù)信息的處理一般采用人工處理或者機(jī)器處理加人工輔助篩選。這極大的浪費(fèi)了人力資源,更是對(duì)經(jīng)濟(jì)的巨大消耗,若采取本系統(tǒng),可以節(jié)約大量人資資本以及用戶的時(shí)間成本。本系統(tǒng)開發(fā)過程中使用的開發(fā)工具都是開源免費(fèi)工具,學(xué)習(xí)資料也可以從網(wǎng)上查詢免費(fèi)獲得,使用的電腦硬件要求也不高,所以幾乎可以說系統(tǒng)的設(shè)計(jì)構(gòu)建是零成本的。 本系統(tǒng)設(shè)計(jì)構(gòu)建完成后,可以再多領(lǐng)域進(jìn)行知識(shí)圖譜開發(fā)利用,如:關(guān)聯(lián)搜索和軟件推薦,將各用戶的搜索記錄以及軟件、實(shí)體產(chǎn)品使用情況進(jìn)行收集,輸入進(jìn)知識(shí)圖譜構(gòu)建系統(tǒng)內(nèi),將會(huì)顯示出各用戶生活中關(guān)心或感興趣的方面,此時(shí)通過好物推薦等方式可以大幅度提高商品售賣率,增加利潤(rùn)。在政治方面也可以將民眾查閱新聞的記錄進(jìn)行知識(shí)圖譜構(gòu)造,通過分析生成的知識(shí)圖譜可以得到民眾們?nèi)粘jP(guān)系的新聞方向,以及對(duì)某一類新聞的大致看法。這對(duì)于分析民政、了解民生所向具有重大的促進(jìn)意義。3.3.3操作可行性 本系統(tǒng)開發(fā)目標(biāo)便是可以讓人民群眾接觸、接受并利用知識(shí)圖譜,從而方便人們生活。因此,降低系統(tǒng)的操作難度是首當(dāng)其沖的,將數(shù)據(jù)輸入變成傻瓜式輸入,對(duì)于各種管理操作有相應(yīng)的提示以及形象化的操作,使系統(tǒng)操作就是“動(dòng)動(dòng)鼠標(biāo)”那么簡(jiǎn)單。對(duì)于程序錯(cuò)誤方面,在程序設(shè)計(jì)時(shí)將考慮在程序內(nèi)截取錯(cuò)誤,對(duì)于大部分錯(cuò)誤都會(huì)產(chǎn)生提示,引導(dǎo)用戶正確使用系統(tǒng)。 因此,在盡可能的人性化設(shè)計(jì)之后,本系統(tǒng)的操作難度應(yīng)當(dāng)是較低的,足以滿足大眾的操作低難度需求。第4章概要設(shè)計(jì)4.1概要設(shè)計(jì)基本原理4.1.1模塊化 模組就是在一個(gè)完整的程序中,獨(dú)立地劃分出一組數(shù)據(jù)描述、執(zhí)行語句等程序?qū)ο?,或作為?dú)立命名和編址的元素。每個(gè)模塊都代表著各項(xiàng)功能,整體便是由各模塊組合而成的,進(jìn)而實(shí)現(xiàn)系統(tǒng)的整體功能。具體模塊表現(xiàn)為高級(jí)語言中的過程、函數(shù)、子程序等。 模塊化是指將整體系統(tǒng)功能分割后,得到若干代表各模塊的子功能模塊,是將復(fù)雜的整體系統(tǒng)構(gòu)造問題分解為簡(jiǎn)單的單項(xiàng)功能模塊實(shí)現(xiàn)問題的一種思想。通過模塊化可以降低開發(fā)工作量以達(dá)到降低開發(fā)成本和提高軟件生產(chǎn)率的作用[14]。然而模塊劃分并非越多越好,過多的模塊劃分會(huì)導(dǎo)致接口資源消耗過大,所以一個(gè)優(yōu)秀的模塊化過程應(yīng)當(dāng)是在整體工程復(fù)雜度、系統(tǒng)構(gòu)造難度與接口資源消耗中取舍出的最優(yōu)解。4.1.2抽象 抽象化是指思維中分離出事物特征、事物之間的聯(lián)系和主要方面,剔除現(xiàn)象和次要內(nèi)容,將特殊事物表現(xiàn)為一般事物。對(duì)軟件工程來說,每一階段的抽象層次都會(huì)逐漸降低,軟件結(jié)構(gòu)設(shè)計(jì)中的模塊分割就是抽象思想的具體體現(xiàn),比如上一次抽象的數(shù)據(jù)庫操作,便可以分解出普遍的正刪改查操作。4.1.3信息隱蔽 所謂信息隱蔽是指在不同模塊功能中,模塊內(nèi)部的數(shù)據(jù)應(yīng)當(dāng)是不支持相互訪問的,例如通過登錄功能進(jìn)入系統(tǒng)后,在進(jìn)行對(duì)知識(shí)圖譜節(jié)點(diǎn)的操作時(shí)不能得到管理員賬號(hào)密碼等信息。這項(xiàng)原理在對(duì)管理系統(tǒng)等后臺(tái)數(shù)據(jù)量大且私密性高的系統(tǒng)設(shè)計(jì)中尤為重要,尤其是客戶個(gè)人信息,公司企業(yè)內(nèi)部信息等具有商業(yè)價(jià)值的隱蔽信息更應(yīng)當(dāng)遵守信息隱蔽的原則。這在維護(hù)了系統(tǒng)的數(shù)據(jù)安全性的同時(shí)也滿足了客戶的安全性需求。4.1.4模塊獨(dú)立性 模塊化獨(dú)立是指每一個(gè)模塊僅完成其各自的功能,通過減少與其他模塊的聯(lián)系,減少接口等操作,使得整體系統(tǒng)易于維護(hù)和測(cè)試。提高模塊獨(dú)立性后,可以減小設(shè)計(jì)和修改程序的工作量;如果出現(xiàn)系統(tǒng)錯(cuò)誤,也可以將錯(cuò)誤控制在單個(gè)模塊內(nèi),不至于傳播導(dǎo)致重大問題;對(duì)于后續(xù)程序拓展開發(fā)時(shí),如果只是拓展功能模塊,可以直接“插入”到系統(tǒng)中,這也是易于其他工作方式的。 判斷模塊獨(dú)立性優(yōu)劣程度的標(biāo)準(zhǔn)是耦合程度和內(nèi)聚程度。耦合性能分析各個(gè)模塊之間的依賴度,而內(nèi)聚性能分析各個(gè)模塊內(nèi)部的元素依賴度。耦合和內(nèi)聚程度分析有各自的判斷標(biāo)準(zhǔn),總體上,模塊獨(dú)立性設(shè)計(jì)原則應(yīng)當(dāng)遵從“低耦合,高內(nèi)聚”原則。4.2系統(tǒng)開發(fā)架構(gòu) 本系統(tǒng)設(shè)計(jì)模式采用MVC設(shè)計(jì)模式即模型(model)-視圖(view)-控制器(controller)三層關(guān)系。利用MVC模式可以減少層與層之間的依賴性,促進(jìn)規(guī)范的代碼開發(fā),對(duì)于后期的拓展開發(fā)可以直接針對(duì)需要拓展的該層功能修改。 三層功能中,視圖層向用戶提供了使用界面,如網(wǎng)頁界面或軟件客戶端界面,它是系統(tǒng)的外殼;用戶從視圖層傳遞的操作指令將進(jìn)入控制層,控制層根據(jù)指令信息調(diào)用模型和視圖以滿足用戶的需要,控制層本身不會(huì)對(duì)數(shù)據(jù)進(jìn)行操作,而是引導(dǎo)和控制數(shù)據(jù)層進(jìn)行操作的選擇;數(shù)據(jù)層將根據(jù)控制層的指令,對(duì)底層數(shù)據(jù)進(jìn)行操作,例如增刪改查。4.3系統(tǒng)功能結(jié)構(gòu)圖4-1系統(tǒng)功能結(jié)構(gòu)圖 知識(shí)圖譜構(gòu)建系統(tǒng)功能主要分為管理員登錄功能、圖譜領(lǐng)域管理、圖譜導(dǎo)入導(dǎo)出、圖譜內(nèi)節(jié)點(diǎn)管理、圖譜內(nèi)關(guān)系管理。其中,管理員登錄可以對(duì)管理員密碼信息等進(jìn)行操作,系統(tǒng)會(huì)驗(yàn)證管理員密碼;圖譜領(lǐng)域管理是對(duì)圖譜領(lǐng)域進(jìn)行增加和刪除;圖譜導(dǎo)入導(dǎo)出是指系統(tǒng)支持圖譜數(shù)據(jù)導(dǎo)入系統(tǒng),從而生成知識(shí)圖譜。同時(shí)系統(tǒng)可以對(duì)生成的知識(shí)圖譜直接導(dǎo)出成文件形式保留;圖譜內(nèi)節(jié)點(diǎn)管理支持用戶對(duì)圖譜內(nèi)節(jié)點(diǎn)進(jìn)行增刪改查操作,以及對(duì)節(jié)點(diǎn)信息的具體操作;圖譜內(nèi)關(guān)系管理指用戶可以對(duì)圖譜內(nèi)的關(guān)系進(jìn)行增刪改操作,由于分析圖譜知識(shí)信息時(shí)以節(jié)點(diǎn)信息為主,所以不對(duì)關(guān)系做查詢操作功能開發(fā)。系統(tǒng)功能關(guān)系結(jié)構(gòu)圖如圖4圖4-1系統(tǒng)功能結(jié)構(gòu)圖4.4功能模塊設(shè)計(jì)4.4.1管理員登錄功能模塊圖4-2管理員登錄功能流程圖 作為系統(tǒng)的使用者,管理員登錄系統(tǒng)時(shí)需要進(jìn)行賬號(hào)密碼檢驗(yàn),確定身份合法后允許登入系統(tǒng)。如果想要對(duì)管理員身份做修改,例如增加管理員數(shù)量、修改管理員密碼等,可以直接對(duì)存儲(chǔ)信息的MySQL數(shù)據(jù)庫進(jìn)行操作,從而達(dá)到滿足用戶身份核對(duì)的目的。管理員登錄功能模塊流程圖如圖4圖4-2管理員登錄功能流程圖4.4.2圖譜領(lǐng)域管理功能 在創(chuàng)建知識(shí)圖譜之前,首先要?jiǎng)?chuàng)建知識(shí)圖譜領(lǐng)域,以及對(duì)知識(shí)圖譜領(lǐng)域進(jìn)行管理操作。所謂知識(shí)圖譜領(lǐng)域,這意味著將知識(shí)圖譜包裝分類,是高一層的大致管理,領(lǐng)域內(nèi)包括各類知識(shí)圖譜,換言之,如果想管理一個(gè)知識(shí)圖譜,首先要對(duì)知識(shí)圖譜領(lǐng)域進(jìn)行管理。圖譜領(lǐng)域管理功能流程圖如圖4-3。4.4.3圖譜導(dǎo)入導(dǎo)出功能 如果想構(gòu)建一篇知識(shí)圖譜,需要向系統(tǒng)輸入大量的數(shù)據(jù)信息,這些數(shù)據(jù)信息可能會(huì)是圖4-3圖譜領(lǐng)域管理功能流程圖成千上萬條,如果用戶手動(dòng)輸入是不顯示的,所以需要系統(tǒng)為用戶提供以文件形式導(dǎo)入數(shù)據(jù)的功能,以降低操作難度,節(jié)省人力物力。同時(shí),作為系統(tǒng)的設(shè)計(jì)目的,數(shù)據(jù)整理分析后構(gòu)建的知識(shí)圖譜應(yīng)當(dāng)是可輸出的,為方便用戶進(jìn)行知識(shí)圖譜分析。圖譜導(dǎo)入導(dǎo)出功能流程圖如圖4圖4-3圖譜領(lǐng)域管理功能流程圖4.4.4圖譜內(nèi)節(jié)點(diǎn)管理功能對(duì)一個(gè)知識(shí)圖譜內(nèi)部信息的基本處理,依賴于對(duì)內(nèi)部節(jié)點(diǎn)的處理。在整個(gè)圖譜構(gòu)建過程中,導(dǎo)入數(shù)據(jù)信息只是第一步,對(duì)數(shù)據(jù)信息初步處理后可以得到基礎(chǔ)的知識(shí)圖譜,這時(shí)候我們需要對(duì)節(jié)點(diǎn)進(jìn)行襲擊操作,例如基本的增刪改查,它是知識(shí)圖譜建立后的完善過程。圖譜內(nèi)節(jié)點(diǎn)管理功能流程圖如圖4-5。4.4.5圖譜內(nèi)關(guān)系管理功能 類比于圖譜內(nèi)節(jié)點(diǎn)的管理操作,圖譜內(nèi)關(guān)系也應(yīng)當(dāng)提供操作功能,在對(duì)圖譜的后期完善時(shí),管理數(shù)據(jù)之間的關(guān)系也是非常重要的。同時(shí)由于分析圖譜內(nèi)容時(shí),以節(jié)點(diǎn)信息為主,以節(jié)點(diǎn)間關(guān)系為輔助功能,所以不提供關(guān)系的搜索功能。圖譜內(nèi)關(guān)系管理功能流程圖如圖4-6。圖4-5圖4-5圖譜內(nèi)節(jié)點(diǎn)管理流程圖圖4-4圖譜導(dǎo)入導(dǎo)出功能流程圖圖4圖4-6圖譜內(nèi)關(guān)系管理功能流程圖4.5數(shù)據(jù)庫表設(shè)計(jì) 作為知識(shí)圖譜構(gòu)建系統(tǒng),本身與其他系統(tǒng)(例如各類管理系統(tǒng))不同的是,本身功能實(shí)現(xiàn)不依賴與對(duì)數(shù)據(jù)庫內(nèi)數(shù)據(jù)的管理操作,相反它依靠算法構(gòu)建和數(shù)據(jù)分析。所以相較于其他系統(tǒng),本系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)比較簡(jiǎn)單,尤其是采用了適用于開發(fā)知識(shí)圖譜的Neo4j數(shù)據(jù)庫,對(duì)于知識(shí)圖譜內(nèi)的數(shù)據(jù)存儲(chǔ)更為方便,因此本節(jié)內(nèi)容較少。4.5.1E-R圖 由于系統(tǒng)內(nèi)部不存在隱私信息,同時(shí)生成構(gòu)建知識(shí)圖譜功能可以為所有用戶開放,因此,本系統(tǒng)不區(qū)分管理員和用戶,登錄系統(tǒng)僅為支持用戶的使用需求,而防止游客登錄并操作。E-R圖也表現(xiàn)出這個(gè)信息,僅有管理員作為用戶,并且信息只包含登錄驗(yàn)證是需要的用戶名和密碼。管理員E-R圖如圖4-7 在系統(tǒng)內(nèi)部,可以認(rèn)為圖譜領(lǐng)域、圖譜內(nèi)節(jié)點(diǎn)和數(shù)據(jù)間關(guān)系為實(shí)體,進(jìn)行E-R圖描述,其中各實(shí)體關(guān)系及實(shí)體內(nèi)信息如圖4-8。圖4-8系統(tǒng)內(nèi)E-R圖圖4-7圖4-8系統(tǒng)內(nèi)E-R圖圖4-7管理員E-R圖 本系統(tǒng)中數(shù)據(jù)庫表只有使用MySQL數(shù)據(jù)庫存儲(chǔ)的管理員登錄信息的管理員信息表。知識(shí)圖譜內(nèi)存儲(chǔ)的節(jié)點(diǎn)信息和關(guān)系信息存儲(chǔ)在Neo4j數(shù)據(jù)庫內(nèi),作為圖數(shù)據(jù)庫的Neo4j數(shù)據(jù)庫是沒有表的概念的,因此具體數(shù)據(jù)信息另做描述[15]。 管理員表(user)包含管理員ID(ID)、管理員名稱(username)和登錄密碼(password)。管理員信息表如表4-1。表4-1管理員信息表字段名數(shù)據(jù)類型是否主鍵字段描述IDInt是管理員idusernamevarchar否管理員登錄用戶名passwordvarchar否管理員登錄密碼 在使用的Neo4j數(shù)據(jù)庫中,圖譜領(lǐng)域信息是作為節(jié)點(diǎn)標(biāo)簽存儲(chǔ)在節(jié)點(diǎn)信息內(nèi)的,在數(shù)據(jù)顯示上,相較于表數(shù)據(jù)庫,節(jié)點(diǎn)標(biāo)簽可以類比為數(shù)據(jù)庫名,不同節(jié)點(diǎn)則是數(shù)據(jù)庫內(nèi)的不同記錄,但不同于關(guān)系數(shù)據(jù)庫的是,節(jié)點(diǎn)內(nèi)的標(biāo)簽屬性是不唯一的,意味著同一節(jié)點(diǎn)可以在不同領(lǐng)域內(nèi)顯示[16]。每個(gè)節(jié)點(diǎn)創(chuàng)建時(shí)系統(tǒng)會(huì)為節(jié)點(diǎn)添加唯一的ID數(shù)值,節(jié)點(diǎn)屬性可以自由創(chuàng)建,如一個(gè)代表人的節(jié)點(diǎn)上,我們可以隨時(shí)加入身高屬性、體重屬性、性別屬性等,而不是在節(jié)點(diǎn)創(chuàng)建前提前定義該節(jié)點(diǎn)的屬性字段。關(guān)系的創(chuàng)建和屬性定義與節(jié)點(diǎn)相同。因此,在Neo4j數(shù)據(jù)庫中,無法為存儲(chǔ)信息定義表的結(jié)構(gòu),但由于本系統(tǒng)對(duì)后臺(tái)操作的限制,可以描述系統(tǒng)使用的存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)類型及其他信息[17]。知識(shí)圖譜存儲(chǔ)信息表如表4-2。(此處僅是用表的形式對(duì)數(shù)據(jù)信息進(jìn)行描述,并不是指下列數(shù)據(jù)信息存儲(chǔ)在表內(nèi),所以不應(yīng)用關(guān)系型數(shù)據(jù)庫的表邏輯去理解。)表4-2知識(shí)圖譜存儲(chǔ)信息表字段描述數(shù)據(jù)類型是否主鍵節(jié)點(diǎn)IDint是節(jié)點(diǎn)標(biāo)簽varchar否節(jié)點(diǎn)名varchar否節(jié)點(diǎn)屬性varchar否關(guān)系IDint是關(guān)系屬性varchar否第5章詳細(xì)設(shè)計(jì)與代碼實(shí)現(xiàn)本章節(jié)將通過需求分析和概要設(shè)計(jì)的研究成果,對(duì)系統(tǒng)內(nèi)的各功能模塊進(jìn)行詳細(xì)設(shè)計(jì)、代碼邏輯設(shè)計(jì)以及具體代碼實(shí)現(xiàn)。5.1登錄功能設(shè)計(jì) 由于本系統(tǒng)不存儲(chǔ)隱私性或高機(jī)密性信息,所以對(duì)登錄功能要求較低,只需要滿足驗(yàn)證管理員的用戶名與密碼即可,若驗(yàn)證通過,則跳轉(zhuǎn)到系統(tǒng)內(nèi)主界面。 頁面設(shè)計(jì)上采用了最簡(jiǎn)單的兩個(gè)文本輸入框和一個(gè)提交按鈕,用戶將用戶名和密碼信息輸入并提交后,control層將信息輸入,調(diào)用service層方法。service層獲取MySQL數(shù)據(jù)庫內(nèi)管理員信息和密碼與用戶輸入的信息進(jìn)行比對(duì),若通過返回true,不通過則返回false。control收到返回值為true時(shí),將頁面導(dǎo)入到系統(tǒng)主界面home頁,返回值為false則想用戶提示用戶名和密碼有誤,返回本頁面。圖5-1系統(tǒng)主界面 登錄后進(jìn)入主界面如圖5圖5-1系統(tǒng)主界面 control層關(guān)鍵代碼實(shí)現(xiàn):publicclassLoginController{
@Autowired
ILoginServiceloginClservice;
@RequestMapping("user")
publicStringgetLoginCl(@RequestParam("name")Stringname,@RequestParam("password")Stringpassword,HttpServletResponseresponse)throwsIOException{
booleanb;
b=loginClservice.Find(name,password);//調(diào)用service層的方法
if(b==true){
return"kg/home";
}
else{
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("用戶名密碼錯(cuò)誤!請(qǐng)重新輸入");
response.getWriter().flush();
return"kg/login";
}
}
} service層關(guān)鍵代碼實(shí)現(xiàn):
publicbooleanFind(Stringname,Stringpassword){
booleanb=false;
Stringpsd=knowledgegraphService.getPassword(name);
if(psd==null)
returnfalse;
elseif(psd.equals(password))
b=true;
returnb;5.2圖譜領(lǐng)域管理功能設(shè)計(jì)用戶在主界面可以點(diǎn)擊添加圖譜領(lǐng)域按鈕,在彈出的對(duì)話框內(nèi)輸入圖譜名稱,html通過點(diǎn)擊事件調(diào)用jQ的ajax()方法,傳輸圖譜名稱到control層的createdomain()方法,在control層會(huì)先對(duì)輸入名稱判斷是否為空,若為空則提示用戶并返回,若不為空則將名稱與系統(tǒng)內(nèi)以存儲(chǔ)的領(lǐng)域名稱對(duì)比,若已存在領(lǐng)域則提示用戶并返回。將符合要求的圖譜名傳入service層,service層中的createdomain()方法組建字符串“create(n:`%s`{entitytype:0,name:''})returnid(n)”其中‘%s’由傳入的圖譜名替代,在通過Neo4jUtil提供的excuteCypherSql()方法將語句在數(shù)據(jù)庫中執(zhí)行,這樣便成功在Neo4j數(shù)據(jù)庫中于一個(gè)空領(lǐng)域內(nèi)創(chuàng)建一個(gè)節(jié)點(diǎn),從而實(shí)現(xiàn)了創(chuàng)建領(lǐng)域的功能。 刪除圖譜領(lǐng)域功能的實(shí)現(xiàn)類似于創(chuàng)建圖譜領(lǐng)域,當(dāng)用戶點(diǎn)擊每個(gè)領(lǐng)域名右側(cè)的刪除按鈕時(shí),html通過點(diǎn)擊事件調(diào)用ajax()方法傳遞需要?jiǎng)h除領(lǐng)域的領(lǐng)域名到control層。此時(shí)control層不需要進(jìn)行對(duì)領(lǐng)域名的判斷直接傳遞參數(shù)到service層,因?yàn)閷?duì)領(lǐng)域刪除時(shí)需要先刪除領(lǐng)域內(nèi)所有節(jié)點(diǎn)之間的關(guān)系,再刪除領(lǐng)域內(nèi)節(jié)點(diǎn),所以service層的deletedomain()會(huì)為關(guān)系和節(jié)點(diǎn)分別組建兩條Cypher語句:"MATCH(n:`%s`)-[r]-(m)deleter"和“MATCH(n:`%s`)deleten”,其中‘%s’由需要?jiǎng)h除的圖譜名替代。再通過excuteCypherSql()方法執(zhí)行這兩條語句,實(shí)現(xiàn)刪除領(lǐng)域的功能。 圖譜領(lǐng)域管理功能窗口在主界面左側(cè)一列常駐顯示,界面圖如圖5-2所示。圖圖5-2領(lǐng)域管理功能界面 html關(guān)鍵代碼實(shí)現(xiàn):<el-buttontype="info"style="margin:2px04px2px;"plainsize="small"@click="createdomain">新建圖譜</el-button>
<a@click="matchdomaingraph(m,$event)"v-for="minpageModel.nodeList"href="javascript:void(0)"><el-tagclosablestyle="margin:2px"@close="deletedomain(m.id,)">{{}}</el-tag>點(diǎn)擊事件:vardata={domainid:id,domain:value};
$.ajax({
data:data,
type:"POST",
url:contextRoot+"deletedomain",
success:function(result){
if(result.code==200){
_this.getlabels();
_this.domain="";
}else{
_this.$message({
showClose:true,
message:result.msg,
type:'warning'
});
}
} control層關(guān)鍵代碼實(shí)現(xiàn):由于刪除方法類似于創(chuàng)建方法,此處不做展示。if(!StringUtil.isBlank(domain)){
List<Map<String,Object>>domainItem=kgservice.getDomainByName(domain);
if(domainItem.size()>0){
result.code=300;
result.setMsg("領(lǐng)域已存在");
}else{
KGGraphService.createdomain(domain);//保存到圖數(shù)據(jù)
result.code=200;
} service層關(guān)鍵代碼實(shí)現(xiàn):創(chuàng)建圖譜領(lǐng)域StringcypherSql=String.format("create(n:`%s`{entitytype:0,name:''})returnid(n)",domain);neo4jUtil.excuteCypherSql(cypherSql); (2)刪除圖譜領(lǐng)域StringrSql=String.format("MATCH(n:`%s`)-[r]-(m)deleter",domain);
neo4jUtil.excuteCypherSql(rSql);
StringdeleteNodeSql=String.format("MATCH(n:`%s`)deleten",domain);
neo4jUtil.excuteCypherSql(deleteNodeSql);5.3圖譜導(dǎo)入導(dǎo)出功能設(shè)計(jì) 用戶點(diǎn)擊導(dǎo)入功能按鈕后,需要在對(duì)話框內(nèi)選擇要導(dǎo)入的csv文件,并且需要輸入數(shù)據(jù)導(dǎo)入目標(biāo)領(lǐng)域名。文件URL地址和目標(biāo)領(lǐng)域名傳遞到control層后,需要先判斷文件URL是否合法,目標(biāo)領(lǐng)域名是否存在數(shù)據(jù)庫中。control層創(chuàng)建一個(gè)list,將vsc內(nèi)的信息存入到list中,再將list與目標(biāo)領(lǐng)域名傳遞到service層進(jìn)行數(shù)據(jù)導(dǎo)入。service層將構(gòu)造四種Cypher語句,即為創(chuàng)造領(lǐng)域名、創(chuàng)建源節(jié)點(diǎn)列、創(chuàng)建目標(biāo)節(jié)點(diǎn)列、在源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)間創(chuàng)造關(guān)系。 用戶點(diǎn)擊導(dǎo)出功能按鈕后,系統(tǒng)會(huì)提示輸入需要導(dǎo)出的圖譜領(lǐng)域名和目標(biāo)文件名。在control層會(huì)判斷圖譜領(lǐng)域名是否存在和創(chuàng)建目標(biāo)文件名是否已存在文件。service層中,導(dǎo)出功能主要通過neo4jutil工具類自帶的csv導(dǎo)出方法exportCsv()方法實(shí)現(xiàn)。圖5-3圖譜導(dǎo)入導(dǎo)出界面 圖譜導(dǎo)入導(dǎo)出功能按鈕在主界面右側(cè),功能實(shí)現(xiàn)如圖5-3所示,彈出窗口如圖5圖5-3圖譜導(dǎo)入導(dǎo)出界面control層關(guān)鍵代碼實(shí)現(xiàn):JSONObjectres=newJSONObject();
if(file==null){
res.put("code","500");
res.put("msg","請(qǐng)先選擇有效的文件");
圖5-4圖5-4導(dǎo)入導(dǎo)出彈出窗口}
Stringlabel=request.getParameter("domain");
if(StringUtil.isBlank(label)){
res.put("code","500");
res.put("msg","請(qǐng)先選擇領(lǐng)域");
returnres;List<List<String>>list=newArrayList<>();
for(Map<String,Object>item:dataList){
List<String>lst=newArrayList<>();
lst.add(item.get("sourcenode").toString());
lst.add(item.get("targetnode").toString());
lst.add(iem.get("relationship").toString());
list.add(ltst);KGGraphService.batchInsertByCSV(label,csvUrl,0); service層關(guān)鍵代碼實(shí)現(xiàn):StringloadNodeCypher1=null;
StringloadNodeCypher2=null;
StringaddIndexCypher=null;
addIndexCypher="CREATEINDEXON:"+domain+"(name);";
loadNodeCypher1="USINGPERIODICCOMMIT500LOADCSVFROM'"+csvUrl+"'ASline"+"MERGE(:`"+domain
+"`{name:line[0]});";
loadNodeCypher2="USINGPERIODICCOMMIT500LOADCSVFROM'"+csvUrl+"'ASline"+"MERGE(:`"+domain
+"`{name:line[1]});";
//拼接生產(chǎn)關(guān)系導(dǎo)入cypher
StringloadRelCypher=null;
Stringtype="RE";
loadRelCypher="USINGPERIODICCOMMIT500LOADCSVFROM'"+csvUrl+"'ASline"+"MATCH(m:`"+domain
+"`),(n:`"+domain+"`)WHERE=line[0]AND=line[1]"+"MERGE(m)-[r:"+type+"]->(n)"
+"SET=line[2];";
neo4jUtil.excuteCypherSql(addIndexCypher);
neo4jUtil.excuteCypherSql(loadNodeCypher1);
neo4jUtil.excuteCypherSql(loadNodeCypher2);
neo4jUtil.excuteCypherSql(loadRelCypher);5.4圖譜內(nèi)節(jié)點(diǎn)管理功能設(shè)計(jì) 在圖譜展示界面,用戶可以點(diǎn)擊界面內(nèi)創(chuàng)建節(jié)點(diǎn),系統(tǒng)將根據(jù)輸入的節(jié)點(diǎn)名在數(shù)據(jù)庫內(nèi)創(chuàng)建節(jié)點(diǎn)并展示在界面內(nèi)。用戶可以直接點(diǎn)擊節(jié)點(diǎn),節(jié)點(diǎn)外環(huán)出現(xiàn)節(jié)點(diǎn)各管理功能按鈕,包括展開、修改和刪除。節(jié)點(diǎn)搜索功能設(shè)計(jì)在界面上方,以搜索欄的形式存在。各管理功能實(shí)現(xiàn)代碼類似,從html經(jīng)control層傳輸節(jié)點(diǎn)名信息到service層。 創(chuàng)建節(jié)點(diǎn)時(shí),Cypher語句組建為"create(n:`%s`%s)returnn",‘%s’分別為領(lǐng)域名和節(jié)點(diǎn)信息。展開節(jié)點(diǎn)功能是在頁面顯示的節(jié)點(diǎn)不完全時(shí),用戶對(duì)源節(jié)點(diǎn)進(jìn)行展開操作可以將隱藏的目標(biāo)節(jié)點(diǎn)展示出來。Cypher語句組建為"MATCH(n:`%s`)-[r]-(m)whereid(n)=%sreturn*limit100",‘%s’分別為領(lǐng)域名和源節(jié)點(diǎn)ID。修改節(jié)點(diǎn)功能與創(chuàng)建節(jié)點(diǎn)功能類似,只是在Cypher上進(jìn)行修改即可實(shí)現(xiàn)。進(jìn)行刪除節(jié)點(diǎn)功能時(shí),在知識(shí)圖譜內(nèi)需要先刪除與被刪除節(jié)點(diǎn)有關(guān)的所有關(guān)系,然后才可以對(duì)節(jié)點(diǎn)進(jìn)行刪除操作。Cypher語句為查找目標(biāo)節(jié)點(diǎn)、查找目標(biāo)節(jié)點(diǎn)有關(guān)的所有關(guān)系、刪除關(guān)系、刪除目標(biāo)節(jié)點(diǎn)。 圖譜內(nèi)節(jié)點(diǎn)管理界面在主界面中間位置,同時(shí)實(shí)現(xiàn)展示圖譜內(nèi)節(jié)點(diǎn)功能,右鍵空白處可添加節(jié)點(diǎn),點(diǎn)擊節(jié)點(diǎn)后可進(jìn)行管理操作。圖譜內(nèi)節(jié)點(diǎn)管理界面如圖5-5所示,節(jié)點(diǎn)操作如圖5-6所示。 service層關(guān)鍵代碼實(shí)現(xiàn):創(chuàng)建節(jié)點(diǎn)if(entity.getUuid()!=0){
Stringsqlkeyval=neo4jUtil.getkeyvalCyphersql(entity);
圖5-6節(jié)點(diǎn)具體操作圖5-5圖譜內(nèi)節(jié)點(diǎn)管理界面StringcypherSql=String.format("match(n:`%s`)whereid(n)=%sset%sreturnn",domain,
圖5-6節(jié)點(diǎn)具體操作圖5-5圖譜內(nèi)節(jié)點(diǎn)管理界面}else{
entity.setColor("#ff4500");//默認(rèn)顏色
entity.setR(30);//默認(rèn)半徑
StringpropertiesString=neo4jUtil.getFilterPropertiesJson(JSON.toJSONString(entity));
StringcypherSql=String.format("create(n:`%s`%s)returnn",domain,propertiesString);
graphNodeList=neo4jUtil.GetGraphNode(cypherSql);
}
if(graphNodeList.size()>0){
rss=graphNodeList.get(0);
returnrss;
}(2)展開節(jié)點(diǎn)StringcypherSql=String.format("MATCH(n:`%s`)-[r]-(m)whereid(n)=%sreturn*limit100",domain,
nodeid);
result=neo4jUtil.GetGraphNodeAndShip(cypherSql);(3)刪除節(jié)點(diǎn)StringnSql=String.format("MATCH(n:`%s`)whereid(n)=%sreturnn",domain,nodeid);
result=neo4jUtil.GetGraphNode(nSql);
StringrSql=String.format("MATCH(n:`%s`)<-[r]->(m)whereid(n)=%sreturnr",domain,nodeid);
neo4jUtil.GetGraphRelationShip(rSql);
StringdeleteRelationSql=String.format("MATCH(n:`%s`)<-[r]->(m)whereid(n)=%sdeleter",domain,nodeid);
neo4jUtil.excuteCypherSql(deleteRelationSql);
StringdeleteNodeSql=String.format("MATCH(n:`%s`)whereid(n)=%sdeleten",domain,nodeid);
neo4jUtil.excuteCypherSql(deleteNodeSql);
returnresult;5.5圖譜內(nèi)關(guān)系管理功能設(shè)計(jì) 相較于節(jié)點(diǎn)管理功能,關(guān)系管理更好實(shí)現(xiàn),在查找和修改關(guān)系時(shí)可以根據(jù)關(guān)系ID進(jìn)行查找,創(chuàng)建關(guān)系時(shí)需要根據(jù)用戶點(diǎn)擊過得源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)傳遞信息到service層,由service層創(chuàng)建Cypher語句"MATCH(n:`%s`),(m:`%s`)WHEREid(n)=%sANDid(m)=%s"+"CREATE(n)-[r:RE{name:'%s'}]->(m)"+"RETURNr",‘%s’分別為源節(jié)點(diǎn)ID,目標(biāo)節(jié)點(diǎn)ID,源節(jié)點(diǎn)圖譜領(lǐng)域,目標(biāo)節(jié)點(diǎn)圖譜領(lǐng)域,關(guān)系名。 圖譜內(nèi)關(guān)系管理操作是針對(duì)節(jié)點(diǎn)操作的,在節(jié)點(diǎn)操作中有鏈接選項(xiàng),點(diǎn)選后點(diǎn)擊目標(biāo)節(jié)點(diǎn)即可創(chuàng)建連接關(guān)系。在每條關(guān)系連線上單擊即可進(jìn)行修改和刪除操作。圖譜內(nèi)關(guān)系管理功能如圖5-7所示,管理功能彈出框如圖5-8所示。 service層關(guān)鍵代碼實(shí)現(xiàn):創(chuàng)建關(guān)系StringcypherSql=String.format("MATCH(n:`%s`),(m:`%s`)WHEREid(n)=%sAND圖5-8圖5-8圖譜內(nèi)關(guān)系管理彈出框圖5-7圖譜內(nèi)關(guān)系管理功能id(m)=%s"
+"CREATE(n)-[r:RE{name:'%s'}]->(m)"+"RETURNr",domain,domain,sourceid,targetid,ship);
List<HashMap<String,Object>>cypherResult=neo4jUtil.GetGraphRelationShip(cypherSql);
if(cypherResult.size()>0){
rss=cypherResult.get(0);}修改關(guān)系StringcypherSql=String.format("MATCH(n:`%s`)-[r]->(m)whereid(r)=%sset='%s'returnr",domain,
shipid,shipname);
List<HashMap<String,Object>>cypherResult=neo4jUtil.GetGraphRelationShip(cypherSql);
if(cypherResult.size()>0){
rss=cypherResult.get(0);
}(3)刪除關(guān)系StringcypherSql=String.format("MATCH(n:`%s`)-[r]->(m)whereid(r)=%sdeleter",domain,shipid);
neo4jUtil.excuteCypherSql(cypherSql);第6章軟件測(cè)試這一章將測(cè)試軟件功能的實(shí)現(xiàn)程度和軟件的使用效率。軟件測(cè)試的目的是通過測(cè)試來判斷軟件系統(tǒng)是否有缺陷,功能是否完善,有無邏輯漏洞或輸入輸出格式問題等,從而達(dá)到檢驗(yàn)軟件系統(tǒng)性能,判斷軟件完成度以及維護(hù)和開發(fā)軟件的目的[18]。6.1軟件測(cè)試原則6.1.1測(cè)試盡早介入 軟件測(cè)試應(yīng)當(dāng)盡早介入軟件開發(fā)過程中,缺陷的發(fā)展是分階段的,如果在開發(fā)前期發(fā)現(xiàn)功能上或邏輯上的缺陷,可以在代碼量較低的時(shí)候?qū)Υa進(jìn)行修改和維護(hù),從而節(jié)約人力物力,降低維護(hù)成本。6.1.2GoodEnough原則 在測(cè)試過程中,應(yīng)當(dāng)在測(cè)試投入和產(chǎn)出間做權(quán)衡。當(dāng)測(cè)試投入過低時(shí),測(cè)試程度過淺,系統(tǒng)內(nèi)深層邏輯缺陷可能測(cè)試不到,也可能因此測(cè)試用例過少,無法體現(xiàn)通用性;放測(cè)試投入過高時(shí),會(huì)發(fā)生重復(fù)測(cè)試、功能相同測(cè)試等情況,在不能體現(xiàn)測(cè)試性的同時(shí)浪費(fèi)人力物力資源[19]。6.1.3缺陷集群性 當(dāng)測(cè)試出軟件缺陷時(shí),應(yīng)當(dāng)對(duì)缺陷產(chǎn)生代碼區(qū)間及周邊代碼進(jìn)行多次測(cè)試。缺陷產(chǎn)生的原因一般源于開發(fā)人員工作狀態(tài)、代碼理解程度以及代碼復(fù)雜度,所以當(dāng)缺陷發(fā)生時(shí),往往會(huì)產(chǎn)生集群效應(yīng),在缺陷產(chǎn)生代碼區(qū)可能產(chǎn)生多個(gè)缺陷,所發(fā)現(xiàn)的缺陷數(shù)量往往與未發(fā)現(xiàn)的缺陷數(shù)量成比例。6.1.4避免開發(fā)人員測(cè)試以及同化效應(yīng) 在軟件測(cè)試過程中,測(cè)試人員應(yīng)當(dāng)盡量選擇與軟件開發(fā)過程中關(guān)系松散的人員進(jìn)行測(cè)試。如果測(cè)試人員是開發(fā)人員本身,會(huì)因?yàn)殚_發(fā)思路以及程序認(rèn)可度等因素,導(dǎo)致測(cè)試效果不明顯,邏輯漏洞缺陷等無法顧及。即使人員選擇正確,在長(zhǎng)時(shí)間軟件測(cè)試和項(xiàng)目跟進(jìn)過程中,測(cè)試人員和開發(fā)人員會(huì)產(chǎn)生同化效應(yīng),邏輯思維相似并提高程序認(rèn)可度。所以測(cè)試人員選擇應(yīng)當(dāng)盡量選擇與本系統(tǒng)開發(fā)過程聯(lián)系不緊密的人員,以交叉測(cè)試方法為優(yōu)[20]。6.2軟件測(cè)試方法6.1.1黑盒測(cè)試 黑盒子測(cè)試意為功能測(cè)試,是在不考慮模塊內(nèi)部邏輯結(jié)構(gòu)的情況下,按照功能設(shè)計(jì)規(guī)范來測(cè)試模塊的功能。從理論上講,黑盒測(cè)試只能通過窮舉法來實(shí)現(xiàn),但在測(cè)試過程中不能實(shí)現(xiàn)完全窮舉,這與GoodEnough原則背道而馳,應(yīng)該選擇有代表性的測(cè)試用例來測(cè)試系統(tǒng)功能的大多數(shù)情況。這時(shí),測(cè)試用例的選擇非常重要,甚至可以直接顯示黑盒測(cè)試的測(cè)試效果。一個(gè)好的測(cè)試用例應(yīng)該具有表達(dá)清晰,無歧義,可操作性,輸入輸出清晰,覆蓋度高等優(yōu)點(diǎn)。黑盒測(cè)試用例的具體設(shè)計(jì)方法有因果關(guān)系圖、交互式設(shè)計(jì)法、函數(shù)圖、情景法等。6.1.2白盒測(cè)試 白盒子測(cè)試是一種結(jié)構(gòu)測(cè)試,不同于黑盒子測(cè)試:黑盒測(cè)試忽略了模塊的功能內(nèi)部邏輯結(jié)構(gòu),只關(guān)注功能實(shí)現(xiàn)程度,而白盒測(cè)試是在清楚了模塊的內(nèi)部邏輯結(jié)構(gòu)的前提下,對(duì)模塊的邏輯結(jié)構(gòu)、邏輯路徑等進(jìn)行窮盡測(cè)試。白盒測(cè)試期間,應(yīng)測(cè)試每一個(gè)判斷陳述,并至少測(cè)試每一個(gè)判斷陳述一次;循環(huán)主體在循環(huán)邊界和運(yùn)行邊界內(nèi)執(zhí)行;內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性測(cè)試等等[21]。白盒測(cè)試用例的具體設(shè)計(jì)方法有:靜態(tài)結(jié)構(gòu)分析法、基本路徑測(cè)試法、符號(hào)測(cè)試法等。6.3測(cè)試用例6.3.1管理員登錄功能測(cè)試 管理員登錄功能測(cè)試主要測(cè)試用戶名和密碼驗(yàn)證能否成功、輸入錯(cuò)誤用例后能否做出用戶提示。測(cè)試用例如表6-1所示。表6-1用戶登錄測(cè)試用例操作預(yù)期結(jié)果實(shí)際結(jié)果測(cè)試結(jié)果輸入用戶名admin輸入密碼123登錄失敗,提示“用戶名或密碼錯(cuò)誤”顯示提示信息“用戶名或密碼錯(cuò)誤”測(cè)試通過輸入用戶名admin,輸入密碼admin登陸成功,進(jìn)入系統(tǒng)主頁頁面跳轉(zhuǎn),進(jìn)入系統(tǒng)主頁測(cè)試通過6.3.2圖譜領(lǐng)域管理功能測(cè)試 圖譜領(lǐng)域管理功能測(cè)試將測(cè)試輸入不同數(shù)據(jù)類型圖譜領(lǐng)域名能否通過、輸入已存在圖譜領(lǐng)域名能否通過、刪除圖譜領(lǐng)域能否成功。測(cè)試用例如表6-2所示。表6-2圖譜領(lǐng)域管理功能測(cè)試用例操作預(yù)期結(jié)果實(shí)際結(jié)果測(cè)試結(jié)果創(chuàng)建圖譜領(lǐng)域名animal創(chuàng)建成功,進(jìn)入圖譜領(lǐng)域animal創(chuàng)建成功,進(jìn)入圖譜領(lǐng)域animal測(cè)試通過創(chuàng)建圖譜領(lǐng)域名動(dòng)物創(chuàng)建成功,進(jìn)入圖譜領(lǐng)域動(dòng)物創(chuàng)建成功,進(jìn)入圖譜領(lǐng)域動(dòng)物測(cè)試通過創(chuàng)建圖譜領(lǐng)域名123創(chuàng)建成功,進(jìn)入圖譜領(lǐng)域123創(chuàng)建成功,進(jìn)入圖譜領(lǐng)域123測(cè)試通過創(chuàng)建圖譜領(lǐng)域名animal創(chuàng)建失敗,提示系統(tǒng)內(nèi)已有該領(lǐng)域創(chuàng)建失敗,提示系統(tǒng)內(nèi)已有該領(lǐng)域測(cè)試通過刪除圖譜領(lǐng)域動(dòng)物l跳出刪除提示并刪除成功跳出刪除提示并刪除成功測(cè)試通過6.3.3圖譜導(dǎo)入導(dǎo)出功能測(cè)試 圖譜導(dǎo)入導(dǎo)出功能測(cè)試主要測(cè)試不輸入圖譜領(lǐng)域名能否通過、輸入圖譜領(lǐng)域名不存在能否通過、不選擇導(dǎo)入文件能否通過、正確輸入圖譜領(lǐng)域名和文件能否通過、圖譜導(dǎo)出能否成功。測(cè)試用例如表6-3所示。表6-3圖譜導(dǎo)入導(dǎo)出功能測(cè)試用例操作預(yù)期結(jié)果實(shí)際結(jié)果測(cè)試結(jié)果領(lǐng)域名為空,文件選擇csv文件導(dǎo)入失敗,提示領(lǐng)域名不能為空導(dǎo)入失敗,提示領(lǐng)域名不能為空測(cè)試通過領(lǐng)域名輸入動(dòng)物,文件選擇為csv文件導(dǎo)入失敗,提示領(lǐng)域不存在導(dǎo)入失敗,提示領(lǐng)域不存在測(cè)試通過領(lǐng)域名輸入動(dòng)物,文件選擇為空導(dǎo)入失敗,提示文件不能為空導(dǎo)入失敗,提示文件不能為空測(cè)試通過領(lǐng)域名輸入animal,文件選擇為csv文件導(dǎo)入成功,圖譜領(lǐng)域animal內(nèi)出現(xiàn)數(shù)據(jù)節(jié)點(diǎn)和關(guān)系導(dǎo)入成功,圖譜領(lǐng)域animal內(nèi)出現(xiàn)數(shù)據(jù)節(jié)點(diǎn)和關(guān)系測(cè)試通過導(dǎo)出圖譜領(lǐng)域animal導(dǎo)出成功,生成animal文件導(dǎo)出成功,生成animal文件測(cè)試通過6.3.4圖譜內(nèi)節(jié)點(diǎn)管理功能測(cè)試 圖譜內(nèi)節(jié)點(diǎn)管理功能測(cè)試主要測(cè)試創(chuàng)建節(jié)點(diǎn)名為空能否通過、創(chuàng)建節(jié)點(diǎn)名為各數(shù)據(jù)類型能否通過、創(chuàng)建節(jié)點(diǎn)名已存在能否通過、修改節(jié)點(diǎn)信息能否成功、刪除節(jié)點(diǎn)能否成功、查找存在的節(jié)點(diǎn)能否成功、查找不存在的節(jié)點(diǎn)能否成功。測(cè)試用例如表6-4所示。表6-4圖譜內(nèi)節(jié)點(diǎn)管理功能測(cè)試用例操作預(yù)期結(jié)果實(shí)際結(jié)果測(cè)試結(jié)果創(chuàng)建節(jié)點(diǎn)名為空創(chuàng)建失敗,提示節(jié)點(diǎn)名不能為空創(chuàng)建失敗,提示節(jié)點(diǎn)名不能為空測(cè)試通過創(chuàng)建節(jié)點(diǎn)名為動(dòng)物界創(chuàng)建成功創(chuàng)建成功測(cè)試通過創(chuàng)建節(jié)點(diǎn)名為123創(chuàng)建成功創(chuàng)建成功測(cè)試通過(續(xù)表6-4)操作預(yù)期結(jié)果實(shí)際結(jié)果測(cè)試結(jié)果創(chuàng)建節(jié)點(diǎn)名為abc創(chuàng)建成功創(chuàng)建成功測(cè)試通過創(chuàng)建節(jié)點(diǎn)名為動(dòng)物界創(chuàng)建失敗,提示已存在該節(jié)點(diǎn)創(chuàng)建失敗,提示已存在該節(jié)點(diǎn)測(cè)試通過修改動(dòng)物界節(jié)點(diǎn)信息為自然存在修改成功修改成功測(cè)試通過刪除節(jié)點(diǎn)動(dòng)物界刪除成功刪除成功測(cè)試通過查找節(jié)點(diǎn)植物界查找成功,定位到植物界節(jié)點(diǎn)查找成功,定位到植物界節(jié)點(diǎn)測(cè)試通過查找節(jié)點(diǎn)動(dòng)物界查找失敗,提示無該節(jié)點(diǎn)查找失敗,提示無該節(jié)點(diǎn)測(cè)試通過6.3.5圖譜內(nèi)關(guān)系管理功能測(cè)試
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025荷蘭花卉園藝產(chǎn)業(yè)市場(chǎng)分析投資現(xiàn)狀評(píng)估發(fā)展趨勢(shì)規(guī)劃報(bào)告
- 2025荷蘭石油開采行業(yè)市場(chǎng)供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025英國智能垃圾桶領(lǐng)域市場(chǎng)供需分析及企業(yè)投資風(fēng)險(xiǎn)評(píng)估規(guī)劃發(fā)展報(bào)告
- 2025英國新能源汽車行業(yè)市場(chǎng)供需分析及發(fā)展投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025花卉種植行業(yè)市場(chǎng)發(fā)展分析及行業(yè)動(dòng)態(tài)與投資分析研究報(bào)告
- 2025航運(yùn)行業(yè)市場(chǎng)競(jìng)爭(zhēng)格局及海外投資布局決策分析研究報(bào)告
- 2025浙江省工程勘察設(shè)計(jì)院集團(tuán)博士后工作站招聘4人筆試備考重點(diǎn)試題及答案解析
- 高中生物人教版高中生物必修示范現(xiàn)代生物進(jìn)化理論的由來教案(2025-2026學(xué)年)
- 大班音樂郵遞馬車教案(2025-2026學(xué)年)
- 小班語言活動(dòng)水果屋附教學(xué)教案
- 農(nóng)機(jī)安全操作培訓(xùn)課件
- 醫(yī)患溝通與人文關(guān)懷
- Unit 1 Teenage Life 學(xué)習(xí)成果展示 檢測(cè)(含答案)高中英語人教版必修第一冊(cè)
- 2024北師大版八年級(jí)數(shù)學(xué)上冊(cè) 第一章思想方法:勾股定理中的三種主要數(shù)學(xué)思想(含答案)
- 2024年北京戲曲藝術(shù)職業(yè)學(xué)院?jiǎn)握小墩Z文》試題及完整答案詳解【各地真題】
- 【25年秋】【第16周】《逐科技之光筑愛國之夢(mèng)》主題班會(huì)【課件】
- 《濕法冶金-浸出技術(shù)》課件-第 7 章 金和銀的浸出
- 學(xué)生在線學(xué)習(xí)中的動(dòng)機(jī)激勵(lì)研究
- 鐵路局招聘考試《鐵路基礎(chǔ)知識(shí)》100題及答案
- 幼兒園后勤比武活動(dòng)方案
- ehs費(fèi)用管理制度
評(píng)論
0/150
提交評(píng)論