知识图谱构建系统设计与实现_第1页
知识图谱构建系统设计与实现_第2页
知识图谱构建系统设计与实现_第3页
知识图谱构建系统设计与实现_第4页
知识图谱构建系统设计与实现_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

知识图谱构建系统设计与实现摘要在信息量爆炸式增长的“web2.0”时代,大量的基础性数据信息被忽视,甚至是直接丢弃掉。然而这些信息中蕴藏着大量的数据关系,分析这些数据和关系可以得到大量的知识。例如通过构建一个由民众关注政治新闻的访问记录构建的知识图谱,可以分析到民众舆情对时政的看法。因此,如何利用这些信息成了重中之重。知识图谱构建系统应需求而生,通过导入数据信息可以得到一个完整的知识图谱,通过分析图谱便可以获取信息内的知识。知识图谱构建系统包括登录功能、图谱领域管理功能、图谱导入导出功能、图谱内节点管理系统和图谱内关系管理系统。关键词:知识图谱,Java语言,Neo4j图数据库,数据分析,系统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"一标题,1,二标题,2,三标题,3"摘要 -第1章绪论1.1课题研究背景及意义1.1.1课题研究背景 现如今,我们正处在信息爆炸增长的“web2.0”时代,数据互联已成了当今时代发展方向。然而数据互联引发的数据增长带来了新的问题——如何将这些杂乱的、结构松散的数据转化为我们能够总结、研究的知识?2012年11月Google公司率先提出知识图谱(KnowledgeGraph,KG)的概念,表示将在其搜索结果中加入知识图谱的功能[1]。然而google没有想到的是,这个最开始旨在为搜索引擎服务、提高搜索能力、增强用户搜索质量以及搜索体验的数据整合功能最终成了一条让我们通向知识互联的崭新“web3.0”时代的大道。尽管KnowledgeGraph(KnowledgeGraph)概念的提出相对较晚,但BernersLee(BernersLeeidentifier)早在2006年就提出了数据链接(linkeddata)的概念,它呼吁促进和改进诸如URI、RDF和OWL等相关技术标准,以便为语义网络的到来做好准备。于是,出现了语义网络研究的热潮,而知识图谱技术正是建立在相关研究成果的基础上,是对现有语义网络技术的扬弃和升华。[2]。1.1.2课题研究意义 庞大的数据信息充斥在网络上,我国国内知识图谱研究大多以科研工作为主,或者是以某一学科的数据信息为研究方向。这对于大部分数据信息——冗余的、浅显性但基础的数据是一种奢侈的浪费,这些庞大的数据虽然不能提供深层次的数据知识,却可以提供普世的、代表大众活动的社会关系。这一系统研究的主要目的是通过系统设计,使网络网页上的信息能够以最小的代价得到组织,使网络中积累的信息能够被人们所利用。知识图谱,顾名思义将数据属性、关系等信息进行提取,将数据分析得到的知识用图的方式链接构建,得到的便是知识图谱。知识图谱从图的角度,可以解读为一个概念网络,在这个网络中,每个节点对应一个现实世界的物体,图谱中的边就是链接物体的关系。因此,可以说知识图谱就是物理世界的象征。知识图的主要作用是,它可以通过推理节点属性以及节点关系进行概念检索;另一方面是通过图的形式向用户表现出数据处理后梳理好的数据关系和信息,使人们摆脱人工过滤网页以寻求答案的模式。例如反欺诈,在风险控制中,反欺诈尤为重要。然而,如何组建起一个反欺诈引擎,并将不同来源的结构化数据和非结构化数据结合起来,从而做到可以准确识别出欺诈案例(如集体欺诈、身份伪造、代理包装等)已成为大数据的反欺诈的难点所在。欺诈审查带来新的挑战便是大量的欺诈案件会牵涉到复杂的关系网。这时,如果使用知识图谱便能够解决这两个问题,正是利用了知识图谱作为关系的直接表示方式的优势。在知识图谱内,用户可以简单方便的添加新数据源,组成数据节点,而且知识图谱本身作为表示关系的数据处理工具,用图的方式直观表达出内在信息可以帮助用户更有效地分析内在深层关系中的潜在风险。又如精确营销,通过分析用户、理解用户,一家企业可以比其竞争对手在挖掘潜在客户。网络时代发挥优势。在市场营销的手段多种多样的今天,数据分析发掘已经变得至关重要,甚至到了无法取代的地步。如果想要更好地理解用户的行为,知识图能够结合各种数据源来分析实体间的关系。1.2国内外研究现况 知识图谱最开始在科学研究领域中做出了重大贡献,并且知识图谱在这一领域的成果也是最多的。White和McCain通过作者引用的图集将信息科学的研究划分为“领域分析”和“信息检索”,并讨论了范式转换等问题。基于动力学原理和科学进化的结构,KatyBorner、jeegarT.Maru和RobertL.Goldstone提出了一个同时反映合著者和引文网络增长规律的模型,并在PNAS数据库中进行了验证。然后,针对该模型的不足,建立了Tarl模型(主题、退化、循环连接)[3]。图像在视觉信息中占有重要支配地位,而视觉又在人类对外界的感知中占有主导地位,所以当图形与文字结合起来进行教学,效率将成几何倍数提高。R.H.Hal率先对知识图谱在教学中是否起作用进行了研究,并且通过实现证明了知识图谱确实可以提高学习效率;H.E.Herl等让学生们自主绘制知识图谱,以此作为判断学生们对知识的理解程度的依据;J.Bidarra更实在教学中直接引入了知识图谱[4]。正如前文所述,在我国,众多基础的操作数据被遗弃,没有通过知识图谱的合成筛选来提取出它的价值。而N.Haritash与B.M.Gupta通过绘制S&T问题知识图谱,了解了人们正在探讨的问题,以及民众们自己的意见,从而形成对政府的谏言,影响到整个社会领域[5]。国内对知识图谱的钻研较晚,受国外研究的影响比较大。2003年5月在加州大学贝克曼中心举行的美国科学院“知识图谱测绘”大型学术研讨会,对我国科学知识图谱的发展产生了普遍的积极影响。。正由这个研讨会开始,刘则渊教授开始在中国引领了国内知识图谱研究。和国外研究相似的是,在中国,对知识图谱的开发与研究也是从科研领域开始的。根据提交的文件数量,主要由研究小组对知识图谱进行研究,集中在大连理工大学、武汉大学、中国科学院、天津师范大学、南京大学等高校或科研,大连理工大学更是因为有刘则渊教授坐镇,成了了研究的主力。各大研究团体发布了类论文,涵盖了知识图谱的构建、设计、可视化、绘制方法、应用的软件以及未来发展方向,对各种发展中出现的问题加以解决,比如针对中文索引的格式、软件无法处理中文等。我国对知识图谱的研究也包含了教学领域的一些研究成果:熊军开展了医学文献改革的课程,提出了相应的改革思路。利用信息可视化技术在其所在的医学科内绘制了知识图谱。通过将知识图谱应用在科研课题分析中,赵玉鹏,闫魏提出了借用知识图谱帮助研究生寻找当代科学的热点研究方向等[6]。在社会解决方案领域,而大连理工大学冯桂平、李明子利用陈朝梅博士开发的信息可视化分析工具,对中国社会科学引文索引数据库和“社区”负责人2000多篇与该课题相关的文献分析了词频并对统计数据进行了研究,从而通过关于社区热点问题的数据绘制出了知识图谱,进而帮助了社区的发展和社区服务。雷尔清将以文献记载为研究对象,通过知识地图分析软件绘制相关知识地图,借助文献引文分析、共现分析、聚类分析等方法,从宏观角度把握美军军事医学的发展趋势将美国科学信息研究所数据库中公布的奥运会研究主题从中年到年,绘制出国际奥运会研究的国家和机构分布、研究热点和变化趋势的知识地图,并根据绘制的知识地图进行比较系统总结了国际奥林匹克运动研究的现状和未来发展趋势[7]。1.3论文结构根据课题研究方向要求,对本系统进行整体的设计与实现过程形成了本篇论文的结构脉络。第一章即是通过对多方面信息的了解,以及多篇文献的翻阅后总结出的课题研究背景意义以及目前国内外的研究现状与成果。第二章将对本系统开发过程中使用的技术和软件进行大致的介绍,并且对选择此技术的优越性进行解答。第三章根据软件设计过程,将对本系统进行需求分析以及可行性分析,分析并确定各功能模块的功能目标,并画出用例图。第四章对系统进行功能模块分析,对各功能模块进行概要设计,确定基本逻辑结构,确定数据库的使用与设计。第五章是在基础的各模块设计上,从实际代码出发,对各功能进行细节上的设计与实现。第六章主要是项目软件的测试,通过对软件进行系统的设计确定业务逻辑的正确性,并记录测试用例与结果。最后总结在课题设计实现期间遇到的问题,学到的知识以及对未来系统发展的畅想。第2章关键技术与开发工具2.1Java语言 JamesGosling与同事们共同开发了Java语言,并于1995年正式发布的面向对象的编程语言,据统计,现在世界上有数亿的系统都是由java语言开发的。Java语言本身不仅祛除了C++中较难技术:多继承与指针等概念技术,还吸收并发展了C++语言的优点。因此,Java两个显著优点:简易、功能强大。2.1.1Java语言的特点 Java语言不仅有上文提到的两大基本优点,还包括下列五大特点: 1.跨平台性 跨平台性是指本语言能够在不同的计算机硬件和操作系统环境中正常运行。当Java文件运行时,通过javac命令源文件将转换为字节码文件,得到的文件是可以支持多平台的文件。Java虚拟机负责接收和处理类文件,作为一个通用的执行平台,Java虚拟机将会装换来自不同Java平台的文件,而且转换出的文件实现功能是相同的,所以说在各类平台上运行的java程序也可以在其他平台运行,即跨平台性。2.面向对象面向对象编写的语言相较于面向过程编写的语言更能反映出对现实世界的折射,因而面向对象技术本身就是一个优点,它可以将应用程序的开发变得简单易用。Java是一种面向对象的语言,也继承了面向对象的诸多好处,如代码扩展、代码复用等[8]。3.安全性在编译期间,Java程序将检查语句和语义,要明确每个变量是否存在空值以及对应值是否合法,检查通过后,Java语句才可以被编译成Java类。在运行阶段时,需要加载Java类,并在运行之前对字节码校验器进行校验。如果是在网络环境下使用Java类,这样就可以限制其权限,从而确保用户的安全。这些校对教程步骤将Java程序从编写、编译、构建、加载与运行方面确保了程序的安全稳定。相较于其他编程语言,Java语言自带的垃圾回收机制(garbagecollecto)从防止内存溢出方面保证了程序安全。垃圾回收机制就像一个保姆在程序员身后进行内存回收,因此可以发现,大多数Java程序员很少考虑内存溢出,正体现出Java对于内存处理的安全性。Java语言支持抛出异常,这就使程序在运行过程中如果发生数据问题或者逻辑问题,无法继续运行时可以自动跳出,并且在控制台输出预设的异常语句。程序员可以很轻松的通过异常语句对程序发生的问题进行排查和解决,同时因为程序进入异常后直接抛出异常并终止了程序,这对预防黑客袭击也有积极的辅助作用。4.多线程线程可以共享内存和文件句柄,互相之间可以得到进程状态信息。正因为这些线程之间可以共享数据信息,并且多线程在同一进程内共享虚拟空间,在运行时,线程的性能明显高于进程。这些虚拟环境即为进程片段以及进程的公共数据等。当系统需要创建一个进程时,需要首先为要创建的进程分配一个独立的存储空间,以及大量的资源;而当系统创建一个线程时,过程将相对简单很多,因此在进行并发操作时,使用多线程实现将比使用多进程实现有更多优势和更好的性能。综合来说,使用多线程有共享内存、占用资源低导致任务并发效率高、基于Java开发操作简单等优势[9]。2.2Neo4j数据库 知识图谱是基于图的数据结构,所以考虑采用后台数据库时优先考虑图数据库,查取图数据库排行榜后发现,neo4j数据库遥遥领先,而且在知识图谱领域公认的后台数据库便是neo4j数据库[10]。以图的形式存储数据的数据库即为图数据库。在图数据库里,应用的数据信息将存储在节点、关系和属性中,类似于以“行,列”形式存储数据的RDBMS,GDBMS以“图”形式存储数据。2.2.1Neo4j数据库的优点 1.完整的ACID支持合理的ACID操作是数据一致性的基本保证。Neo4j确保在一个事务中同时进行多个操作,并确保数据信息遵守ACID原则,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),这些原则保证事务中数据的正确性。Neo4j提供了对此功能的支持,无论是嵌入模式还是多服务器集群部署。2.高可用性和高可扩展性可信赖的图形存储器易于在任何应用中使用,伴随运行中应用的发展,性能问题也越来越突出,无论应用程序如何变化,neo4j只受计算机硬件性能的影响,而不受公司限制这个应用程序。一个Neo4j服务器可以有上亿个节点,并且能够容纳数以亿计的关系。当然,如果单个节点不能满足数据需求,它可以使用分布式集群。3.通过遍历工具高速检索数据图数据库的最大优点是可储存复杂资料。有了neo4j提供的搜索工具,就可以进行高效率的数据检索,检索达到每秒数十亿级,检索操作与RDBMS中的join操作非常相似[11]。4.可视化图2-1Neo4j前端页面 Neo4j自带的jsp前端可视化处理非常优越,它自身便可以将内部存储的数据信息以图的形式输出出来,如图2-图2-1Neo4j前端页面2.2.2Neo4j查询语言Cypher介绍 Cypher是一种描述性的图形查询语言,它允许在不编写遍历代码的情况下,对查询进行表达并有效地存储图形。西弗仍然在发展和成熟,这意味着语法可能会改变。与此同时,这意味着作为一个组件,它不需要进行严格的性能测试。作为一种人工查询语言,Cypher本身适合于在数据库上执行点到点模式(ad-hoc)查询的开发人员和专业操作人员。其结构基于英语单词和精巧的图表。很多像like和orderby这样的关键字都是由SQL激发的。SPARQL提供了模式匹配表达式。regex匹配的实现来源于Scala编程语言。Cypher作为一种数据库管理语言,也是一种声明性语言,相比于命令式语言(如Java)和脚本语言(如Gremlin和jruby),重点是如何从图中检索,而不是如何检索。这样就可以在用户没有公布的实现细节中对查询进行优化。2.3JSP技术 JSP全名(JavaSeverPages)是由Sun公司指导,多个公司方共同制定的技术标准。基于Servlet规范的JSP是一种动态Web开发技术,其本质是一种简化的Servlet。HTML和Java代码共同存在于JSP文件中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容。要与传统HTML区分,需要使用JSP文件扩展名jap[12]。 由JSP技术开发的Web应用程序以Java为基础,具有如下特点:1.预编译预先编译是指用户首次通过浏览器访问JSP页面时对JSP页进行编译,同时将编译后的代码保存一次,在下次访问时将其直接填充到编译后的代码中。这样既节约了服务器CPU资源,又大大提高了客户端的访问速度。2.业务代码相分离利用JSP技术开发Web应用程序时,既能实现JSP文件与HTML文件的分离,又能实现界面与应用程序的分离。这种构建方式可以减轻程序员的压力,使整个项目更易维护。3.组件重用通过使用JavaBeans,JSP可以编写业务组件,也就是使用JavaBeans类封装业务处理代码,或者作为数据存储模型使用。JavaBeans可以在JSP页面上甚至整个项目中重用,并且可以应用于其他Java应用程序。4.跨平台因为JSP是基于Java语言的,所以它可以使用JavaAPI,而且所有的JSP都是跨平台的,可以和Windows和Linux等不同的系统应用。2.4IntelliJ

IDEA开发工具 IDEA的IntelliJ主要用于支持Java,Scala,Groovy等语言,以及支持当前主流技术和框架的开发工具,擅长于企业应用,移动应用和Web应用的开发。在这个行业中,IntelliJ被认为是java最好的开发工具之一。最早的版本在2001年1月发布,当时是少数Java集成开发环境之一,使用前阶代码浏览和代码重构。从2010年的Infoworld报告中可以看到,比较当时市场上的主流Java集成开发环境,包括:Eclipse、IntelliJ、NetBeans、JDeveloper,IntelliJ获得了该媒体测试的最高评分。IntelliJ为AppCode,CLion,PhpStorm,PyCharm,RubyMine,WebStorm和MPS等个别编程语言开发的集成环境,都可以通过插件加载IntelliJIDEA来使用。第3章系统需求分析在本章节将根据软件工程中需求分析的要求,根据用户使用情况进行功能需求、性能需求、运行环境需求以及其他需求分析,并从技术、经济、操作三大方面进行可行性分析。3.1需求分析 在信息爆炸发展的今天,如何将数据信息相互联系,找到其中的关系,从而将数据信息转换为知识以及是当代发展的重中之重[13]。知识图谱构建系统正是应此需求而生,数据信息输入系统后,可以得到一个完整的知识图谱,从而表达数据间的关系,将数据链接提炼成知识。3.1.1功能需求 1.管理员登录功能图3-1管理员登录用例图 作为一个系统,应当满足管理员的登录操作功能需求,根据管理员用户名与密码登录系统,同时应可以保存多个管理员。管理员登录功能用例图如图3图3-1管理员登录用例图 2.知识图谱领域管理功能 如果想要完整的构建一个知识图谱,首先需要管理一个知识图谱领域,再在图谱领域内对知识图谱进行操作。知识图谱领域管理功能用例图如图3-2。 3.知识图谱导入导出功能 生出一篇知识图谱,首先需要数据信息的导入,对数据信息处理后,系统构建出知识图谱,并可以将知识图谱以图片的形式输出。知识图谱导入导出功能用例图如图3-3。图3-3图3-3知识图谱导入导出用例图图3-2知识图谱领域管理用例图 4.知识图谱节点管理功能图3-4知识图谱节点管理用例图 知识图谱生成成功后,应当支持管理员对节点进行增删改查等管理操作。知识图谱管理功能用例图如图3图3-4知识图谱节点管理用例图 5.知识图谱关系管理功能图3-5知识图谱关系管理用例图 在对节点的操作之后,也应对数据间的关系提供操作功能。知识图谱关系管理功能用例图如图3图3-5知识图谱关系管理用例图3.1.2性能需求 1.响应时间 由于录入数据本身耗时较大,认为平均录取速度应达到有1秒/200条足以支持系统的响应时间。进行除录入输出外操作时,响应时间应在2秒以内。进行批量操作时,响应时间应控制在5秒以内。 2.存储数据量 知识图是由大量数据和相互关系组成的图,所以知识图谱构建系统的存储功能应该十分强大,以免出现存储异常的情况。 3.界面友好 在巨量的数据之下产生的知识图谱必然是“枝繁叶茂”的,用户需要一个干净整洁的界面显示图谱。进而使用户对图谱进行操作,分析关系时,可以得到一个良好的使用感受。3.1.3运行环境需求 1.硬件环境 对客户机无特殊要求,一般个人PC电脑即可。基本数据要求为:处理器:1GHz32位或者64位处理器;内存:1GB及以上;显卡:支持DirectX9128M及以上;硬盘空间:16G以上(主分区,NTFS格式)2.软件环境 win7操作系统及以上,已安装Neo4j数据库、MySQL数据库。3.1.4其他需求 1.可扩展性 本系统作为第一版系统设计,应当在程序设计时保留程序的可拓展性,保证对系统的二次开发以及利用。各模块间应严格遵守“高内聚,低耦合”原则,从而利于程序在使用过程这接受用户正向反馈,对系统进行功能拓展。扩展性是软件系统计算处理能力的一种设计指标,高扩展性代表着软件在系统发展过程中保持旺盛的生命力,通过少量的修改,甚至只是增加硬件设备,就可以实现整个系统处理能力的线性增长,达到高吞吐量和低延迟的高性能。 2.可维护性 软件的可维护性是衡量系统可修复(复原)性和可改善性的难度。所谓的可修性是指当系统出现故障后,能够将故障排除或抑制,并将其恢复到原来的正常运行状态的可能性;而可改进性是指系统能够接受已有功能的改进,增加新功能的可能性。 因此系统应具有可维护性,使系统在整个使用的生命周期内保持可用度,并且能够处理抛出的问题化简,通过在系统内设定的问题排查,是管理员可以处理轻量级的bug,再有开发人员处理重大bug。 3.存储数据类型 由于客户想要构成的知识图谱会有多种形式以及类型,所以构建系统允许的输入数据类型应当是多种的,能完全满足用户数据输入要求。而对于非法数据类型,系统在数据输入时应当能够检测出来,并且提示用户输入数据类型异常,将数据异常风险排除,3.2可行性分析3.2.1技术可行性 本系统有Java语言编写,基于Java语言的简易性,本系统从基础编程的角度看是易于实现的。后台存储导入的信息数据库是Neo4j数据库,Neo4j数据一致致力于开发知识图谱领域,本身的数据库设计也是贴合知识图谱需求的,从数据层面上看本系统的开发是没有重大困难的。将Neo4j与Java语言相连接时,Neo4j本身有链接的包,可以很轻松的将两种链接上,并通过Java直接对Neo4j数据库后台进行操控,从业务逻辑上看,实现起来并不困难。 本系统开发的其他技术和工具,例如jsp、MySQL数据库等,由于本身对于系统的占比较小,而且使用的技术都较为浅显,易于查找和学习,所以对整体系统的设计与构建并不产生影响。3.2.2经济可行性 提出知识图谱构建系统设计方案之前,知识图谱构建时对数据信息的处理一般采用人工处理或者机器处理加人工辅助筛选。这极大的浪费了人力资源,更是对经济的巨大消耗,若采取本系统,可以节约大量人资资本以及用户的时间成本。本系统开发过程中使用的开发工具都是开源免费工具,学习资料也可以从网上查询免费获得,使用的电脑硬件要求也不高,所以几乎可以说系统的设计构建是零成本的。 本系统设计构建完成后,可以再多领域进行知识图谱开发利用,如:关联搜索和软件推荐,将各用户的搜索记录以及软件、实体产品使用情况进行收集,输入进知识图谱构建系统内,将会显示出各用户生活中关心或感兴趣的方面,此时通过好物推荐等方式可以大幅度提高商品售卖率,增加利润。在政治方面也可以将民众查阅新闻的记录进行知识图谱构造,通过分析生成的知识图谱可以得到民众们日常关系的新闻方向,以及对某一类新闻的大致看法。这对于分析民政、了解民生所向具有重大的促进意义。3.3.3操作可行性 本系统开发目标便是可以让人民群众接触、接受并利用知识图谱,从而方便人们生活。因此,降低系统的操作难度是首当其冲的,将数据输入变成傻瓜式输入,对于各种管理操作有相应的提示以及形象化的操作,使系统操作就是“动动鼠标”那么简单。对于程序错误方面,在程序设计时将考虑在程序内截取错误,对于大部分错误都会产生提示,引导用户正确使用系统。 因此,在尽可能的人性化设计之后,本系统的操作难度应当是较低的,足以满足大众的操作低难度需求。第4章概要设计4.1概要设计基本原理4.1.1模块化 模组就是在一个完整的程序中,独立地划分出一组数据描述、执行语句等程序对象,或作为独立命名和编址的元素。每个模块都代表着各项功能,整体便是由各模块组合而成的,进而实现系统的整体功能。具体模块表现为高级语言中的过程、函数、子程序等。 模块化是指将整体系统功能分割后,得到若干代表各模块的子功能模块,是将复杂的整体系统构造问题分解为简单的单项功能模块实现问题的一种思想。通过模块化可以降低开发工作量以达到降低开发成本和提高软件生产率的作用[14]。然而模块划分并非越多越好,过多的模块划分会导致接口资源消耗过大,所以一个优秀的模块化过程应当是在整体工程复杂度、系统构造难度与接口资源消耗中取舍出的最优解。4.1.2抽象 抽象化是指思维中分离出事物特征、事物之间的联系和主要方面,剔除现象和次要内容,将特殊事物表现为一般事物。对软件工程来说,每一阶段的抽象层次都会逐渐降低,软件结构设计中的模块分割就是抽象思想的具体体现,比如上一次抽象的数据库操作,便可以分解出普遍的正删改查操作。4.1.3信息隐蔽 所谓信息隐蔽是指在不同模块功能中,模块内部的数据应当是不支持相互访问的,例如通过登录功能进入系统后,在进行对知识图谱节点的操作时不能得到管理员账号密码等信息。这项原理在对管理系统等后台数据量大且私密性高的系统设计中尤为重要,尤其是客户个人信息,公司企业内部信息等具有商业价值的隐蔽信息更应当遵守信息隐蔽的原则。这在维护了系统的数据安全性的同时也满足了客户的安全性需求。4.1.4模块独立性 模块化独立是指每一个模块仅完成其各自的功能,通过减少与其他模块的联系,减少接口等操作,使得整体系统易于维护和测试。提高模块独立性后,可以减小设计和修改程序的工作量;如果出现系统错误,也可以将错误控制在单个模块内,不至于传播导致重大问题;对于后续程序拓展开发时,如果只是拓展功能模块,可以直接“插入”到系统中,这也是易于其他工作方式的。 判断模块独立性优劣程度的标准是耦合程度和内聚程度。耦合性能分析各个模块之间的依赖度,而内聚性能分析各个模块内部的元素依赖度。耦合和内聚程度分析有各自的判断标准,总体上,模块独立性设计原则应当遵从“低耦合,高内聚”原则。4.2系统开发架构 本系统设计模式采用MVC设计模式即模型(model)-视图(view)-控制器(controller)三层关系。利用MVC模式可以减少层与层之间的依赖性,促进规范的代码开发,对于后期的拓展开发可以直接针对需要拓展的该层功能修改。 三层功能中,视图层向用户提供了使用界面,如网页界面或软件客户端界面,它是系统的外壳;用户从视图层传递的操作指令将进入控制层,控制层根据指令信息调用模型和视图以满足用户的需要,控制层本身不会对数据进行操作,而是引导和控制数据层进行操作的选择;数据层将根据控制层的指令,对底层数据进行操作,例如增删改查。4.3系统功能结构图4-1系统功能结构图 知识图谱构建系统功能主要分为管理员登录功能、图谱领域管理、图谱导入导出、图谱内节点管理、图谱内关系管理。其中,管理员登录可以对管理员密码信息等进行操作,系统会验证管理员密码;图谱领域管理是对图谱领域进行增加和删除;图谱导入导出是指系统支持图谱数据导入系统,从而生成知识图谱。同时系统可以对生成的知识图谱直接导出成文件形式保留;图谱内节点管理支持用户对图谱内节点进行增删改查操作,以及对节点信息的具体操作;图谱内关系管理指用户可以对图谱内的关系进行增删改操作,由于分析图谱知识信息时以节点信息为主,所以不对关系做查询操作功能开发。系统功能关系结构图如图4图4-1系统功能结构图4.4功能模块设计4.4.1管理员登录功能模块图4-2管理员登录功能流程图 作为系统的使用者,管理员登录系统时需要进行账号密码检验,确定身份合法后允许登入系统。如果想要对管理员身份做修改,例如增加管理员数量、修改管理员密码等,可以直接对存储信息的MySQL数据库进行操作,从而达到满足用户身份核对的目的。管理员登录功能模块流程图如图4图4-2管理员登录功能流程图4.4.2图谱领域管理功能 在创建知识图谱之前,首先要创建知识图谱领域,以及对知识图谱领域进行管理操作。所谓知识图谱领域,这意味着将知识图谱包装分类,是高一层的大致管理,领域内包括各类知识图谱,换言之,如果想管理一个知识图谱,首先要对知识图谱领域进行管理。图谱领域管理功能流程图如图4-3。4.4.3图谱导入导出功能 如果想构建一篇知识图谱,需要向系统输入大量的数据信息,这些数据信息可能会是图4-3图谱领域管理功能流程图成千上万条,如果用户手动输入是不显示的,所以需要系统为用户提供以文件形式导入数据的功能,以降低操作难度,节省人力物力。同时,作为系统的设计目的,数据整理分析后构建的知识图谱应当是可输出的,为方便用户进行知识图谱分析。图谱导入导出功能流程图如图4图4-3图谱领域管理功能流程图4.4.4图谱内节点管理功能对一个知识图谱内部信息的基本处理,依赖于对内部节点的处理。在整个图谱构建过程中,导入数据信息只是第一步,对数据信息初步处理后可以得到基础的知识图谱,这时候我们需要对节点进行袭击操作,例如基本的增删改查,它是知识图谱建立后的完善过程。图谱内节点管理功能流程图如图4-5。4.4.5图谱内关系管理功能 类比于图谱内节点的管理操作,图谱内关系也应当提供操作功能,在对图谱的后期完善时,管理数据之间的关系也是非常重要的。同时由于分析图谱内容时,以节点信息为主,以节点间关系为辅助功能,所以不提供关系的搜索功能。图谱内关系管理功能流程图如图4-6。图4-5图4-5图谱内节点管理流程图图4-4图谱导入导出功能流程图图4图4-6图谱内关系管理功能流程图4.5数据库表设计 作为知识图谱构建系统,本身与其他系统(例如各类管理系统)不同的是,本身功能实现不依赖与对数据库内数据的管理操作,相反它依靠算法构建和数据分析。所以相较于其他系统,本系统的数据库设计比较简单,尤其是采用了适用于开发知识图谱的Neo4j数据库,对于知识图谱内的数据存储更为方便,因此本节内容较少。4.5.1E-R图 由于系统内部不存在隐私信息,同时生成构建知识图谱功能可以为所有用户开放,因此,本系统不区分管理员和用户,登录系统仅为支持用户的使用需求,而防止游客登录并操作。E-R图也表现出这个信息,仅有管理员作为用户,并且信息只包含登录验证是需要的用户名和密码。管理员E-R图如图4-7 在系统内部,可以认为图谱领域、图谱内节点和数据间关系为实体,进行E-R图描述,其中各实体关系及实体内信息如图4-8。图4-8系统内E-R图图4-7图4-8系统内E-R图图4-7管理员E-R图 本系统中数据库表只有使用MySQL数据库存储的管理员登录信息的管理员信息表。知识图谱内存储的节点信息和关系信息存储在Neo4j数据库内,作为图数据库的Neo4j数据库是没有表的概念的,因此具体数据信息另做描述[15]。 管理员表(user)包含管理员ID(ID)、管理员名称(username)和登录密码(password)。管理员信息表如表4-1。表4-1管理员信息表字段名数据类型是否主键字段描述IDInt是管理员idusernamevarchar否管理员登录用户名passwordvarchar否管理员登录密码 在使用的Neo4j数据库中,图谱领域信息是作为节点标签存储在节点信息内的,在数据显示上,相较于表数据库,节点标签可以类比为数据库名,不同节点则是数据库内的不同记录,但不同于关系数据库的是,节点内的标签属性是不唯一的,意味着同一节点可以在不同领域内显示[16]。每个节点创建时系统会为节点添加唯一的ID数值,节点属性可以自由创建,如一个代表人的节点上,我们可以随时加入身高属性、体重属性、性别属性等,而不是在节点创建前提前定义该节点的属性字段。关系的创建和属性定义与节点相同。因此,在Neo4j数据库中,无法为存储信息定义表的结构,但由于本系统对后台操作的限制,可以描述系统使用的存储数据的数据类型及其他信息[17]。知识图谱存储信息表如表4-2。(此处仅是用表的形式对数据信息进行描述,并不是指下列数据信息存储在表内,所以不应用关系型数据库的表逻辑去理解。)表4-2知识图谱存储信息表字段描述数据类型是否主键节点IDint是节点标签varchar否节点名varchar否节点属性varchar否关系IDint是关系属性varchar否第5章详细设计与代码实现本章节将通过需求分析和概要设计的研究成果,对系统内的各功能模块进行详细设计、代码逻辑设计以及具体代码实现。5.1登录功能设计 由于本系统不存储隐私性或高机密性信息,所以对登录功能要求较低,只需要满足验证管理员的用户名与密码即可,若验证通过,则跳转到系统内主界面。 页面设计上采用了最简单的两个文本输入框和一个提交按钮,用户将用户名和密码信息输入并提交后,control层将信息输入,调用service层方法。service层获取MySQL数据库内管理员信息和密码与用户输入的信息进行比对,若通过返回true,不通过则返回false。control收到返回值为true时,将页面导入到系统主界面home页,返回值为false则想用户提示用户名和密码有误,返回本页面。图5-1系统主界面 登录后进入主界面如图5图5-1系统主界面 control层关键代码实现:publicclassLoginController{

@Autowired

ILoginServiceloginClservice;

@RequestMapping("user")

publicStringgetLoginCl(@RequestParam("name")Stringname,@RequestParam("password")Stringpassword,HttpServletResponseresponse)throwsIOException{

booleanb;

b=loginClservice.Find(name,password);//调用service层的方法

if(b==true){

return"kg/home";

}

else{

response.setContentType("text/html;charset=utf-8");

response.getWriter().write("用户名密码错误!请重新输入");

response.getWriter().flush();

return"kg/login";

}

}

} service层关键代码实现:

publicbooleanFind(Stringname,Stringpassword){

booleanb=false;

Stringpsd=knowledgegraphService.getPassword(name);

if(psd==null)

returnfalse;

elseif(psd.equals(password))

b=true;

returnb;5.2图谱领域管理功能设计用户在主界面可以点击添加图谱领域按钮,在弹出的对话框内输入图谱名称,html通过点击事件调用jQ的ajax()方法,传输图谱名称到control层的createdomain()方法,在control层会先对输入名称判断是否为空,若为空则提示用户并返回,若不为空则将名称与系统内以存储的领域名称对比,若已存在领域则提示用户并返回。将符合要求的图谱名传入service层,service层中的createdomain()方法组建字符串“create(n:`%s`{entitytype:0,name:''})returnid(n)”其中‘%s’由传入的图谱名替代,在通过Neo4jUtil提供的excuteCypherSql()方法将语句在数据库中执行,这样便成功在Neo4j数据库中于一个空领域内创建一个节点,从而实现了创建领域的功能。 删除图谱领域功能的实现类似于创建图谱领域,当用户点击每个领域名右侧的删除按钮时,html通过点击事件调用ajax()方法传递需要删除领域的领域名到control层。此时control层不需要进行对领域名的判断直接传递参数到service层,因为对领域删除时需要先删除领域内所有节点之间的关系,再删除领域内节点,所以service层的deletedomain()会为关系和节点分别组建两条Cypher语句:"MATCH(n:`%s`)-[r]-(m)deleter"和“MATCH(n:`%s`)deleten”,其中‘%s’由需要删除的图谱名替代。再通过excuteCypherSql()方法执行这两条语句,实现删除领域的功能。 图谱领域管理功能窗口在主界面左侧一列常驻显示,界面图如图5-2所示。图图5-2领域管理功能界面 html关键代码实现:<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>点击事件: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层关键代码实现:由于删除方法类似于创建方法,此处不做展示。if(!StringUtil.isBlank(domain)){

List<Map<String,Object>>domainItem=kgservice.getDomainByName(domain);

if(domainItem.size()>0){

result.code=300;

result.setMsg("领域已存在");

}else{

KGGraphService.createdomain(domain);//保存到图数据

result.code=200;

} service层关键代码实现:创建图谱领域StringcypherSql=String.format("create(n:`%s`{entitytype:0,name:''})returnid(n)",domain);neo4jUtil.excuteCypherSql(cypherSql); (2)删除图谱领域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图谱导入导出功能设计 用户点击导入功能按钮后,需要在对话框内选择要导入的csv文件,并且需要输入数据导入目标领域名。文件URL地址和目标领域名传递到control层后,需要先判断文件URL是否合法,目标领域名是否存在数据库中。control层创建一个list,将vsc内的信息存入到list中,再将list与目标领域名传递到service层进行数据导入。service层将构造四种Cypher语句,即为创造领域名、创建源节点列、创建目标节点列、在源节点和目标节点间创造关系。 用户点击导出功能按钮后,系统会提示输入需要导出的图谱领域名和目标文件名。在control层会判断图谱领域名是否存在和创建目标文件名是否已存在文件。service层中,导出功能主要通过neo4jutil工具类自带的csv导出方法exportCsv()方法实现。图5-3图谱导入导出界面 图谱导入导出功能按钮在主界面右侧,功能实现如图5-3所示,弹出窗口如图5图5-3图谱导入导出界面control层关键代码实现:JSONObjectres=newJSONObject();

if(file==null){

res.put("code","500");

res.put("msg","请先选择有效的文件");

图5-4图5-4导入导出弹出窗口}

Stringlabel=request.getParameter("domain");

if(StringUtil.isBlank(label)){

res.put("code","500");

res.put("msg","请先选择领域");

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层关键代码实现: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]});";

//拼接生产关系导入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图谱内节点管理功能设计 在图谱展示界面,用户可以点击界面内创建节点,系统将根据输入的节点名在数据库内创建节点并展示在界面内。用户可以直接点击节点,节点外环出现节点各管理功能按钮,包括展开、修改和删除。节点搜索功能设计在界面上方,以搜索栏的形式存在。各管理功能实现代码类似,从html经control层传输节点名信息到service层。 创建节点时,Cypher语句组建为"create(n:`%s`%s)returnn",‘%s’分别为领域名和节点信息。展开节点功能是在页面显示的节点不完全时,用户对源节点进行展开操作可以将隐藏的目标节点展示出来。Cypher语句组建为"MATCH(n:`%s`)-[r]-(m)whereid(n)=%sreturn*limit100",‘%s’分别为领域名和源节点ID。修改节点功能与创建节点功能类似,只是在Cypher上进行修改即可实现。进行删除节点功能时,在知识图谱内需要先删除与被删除节点有关的所有关系,然后才可以对节点进行删除操作。Cypher语句为查找目标节点、查找目标节点有关的所有关系、删除关系、删除目标节点。 图谱内节点管理界面在主界面中间位置,同时实现展示图谱内节点功能,右键空白处可添加节点,点击节点后可进行管理操作。图谱内节点管理界面如图5-5所示,节点操作如图5-6所示。 service层关键代码实现:创建节点if(entity.getUuid()!=0){

Stringsqlkeyval=neo4jUtil.getkeyvalCyphersql(entity);

图5-6节点具体操作图5-5图谱内节点管理界面StringcypherSql=String.format("match(n:`%s`)whereid(n)=%sset%sreturnn",domain,

图5-6节点具体操作图5-5图谱内节点管理界面}else{

entity.setColor("#ff4500");//默认颜色

entity.setR(30);//默认半径

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)展开节点StringcypherSql=String.format("MATCH(n:`%s`)-[r]-(m)whereid(n)=%sreturn*limit100",domain,

nodeid);

result=neo4jUtil.GetGraphNodeAndShip(cypherSql);(3)删除节点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图谱内关系管理功能设计 相较于节点管理功能,关系管理更好实现,在查找和修改关系时可以根据关系ID进行查找,创建关系时需要根据用户点击过得源节点和目标节点传递信息到service层,由service层创建Cypher语句"MATCH(n:`%s`),(m:`%s`)WHEREid(n)=%sANDid(m)=%s"+"CREATE(n)-[r:RE{name:'%s'}]->(m)"+"RETURNr",‘%s’分别为源节点ID,目标节点ID,源节点图谱领域,目标节点图谱领域,关系名。 图谱内关系管理操作是针对节点操作的,在节点操作中有链接选项,点选后点击目标节点即可创建连接关系。在每条关系连线上单击即可进行修改和删除操作。图谱内关系管理功能如图5-7所示,管理功能弹出框如图5-8所示。 service层关键代码实现:创建关系StringcypherSql=String.format("MATCH(n:`%s`),(m:`%s`)WHEREid(n)=%sAND图5-8图5-8图谱内关系管理弹出框图5-7图谱内关系管理功能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);}修改关系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)删除关系StringcypherSql=String.format("MATCH(n:`%s`)-[r]->(m)whereid(r)=%sdeleter",domain,shipid);

neo4jUtil.excuteCypherSql(cypherSql);第6章软件测试这一章将测试软件功能的实现程度和软件的使用效率。软件测试的目的是通过测试来判断软件系统是否有缺陷,功能是否完善,有无逻辑漏洞或输入输出格式问题等,从而达到检验软件系统性能,判断软件完成度以及维护和开发软件的目的[18]。6.1软件测试原则6.1.1测试尽早介入 软件测试应当尽早介入软件开发过程中,缺陷的发展是分阶段的,如果在开发前期发现功能上或逻辑上的缺陷,可以在代码量较低的时候对代码进行修改和维护,从而节约人力物力,降低维护成本。6.1.2GoodEnough原则 在测试过程中,应当在测试投入和产出间做权衡。当测试投入过低时,测试程度过浅,系统内深层逻辑缺陷可能测试不到,也可能因此测试用例过少,无法体现通用性;放测试投入过高时,会发生重复测试、功能相同测试等情况,在不能体现测试性的同时浪费人力物力资源[19]。6.1.3缺陷集群性 当测试出软件缺陷时,应当对缺陷产生代码区间及周边代码进行多次测试。缺陷产生的原因一般源于开发人员工作状态、代码理解程度以及代码复杂度,所以当缺陷发生时,往往会产生集群效应,在缺陷产生代码区可能产生多个缺陷,所发现的缺陷数量往往与未发现的缺陷数量成比例。6.1.4避免开发人员测试以及同化效应 在软件测试过程中,测试人员应当尽量选择与软件开发过程中关系松散的人员进行测试。如果测试人员是开发人员本身,会因为开发思路以及程序认可度等因素,导致测试效果不明显,逻辑漏洞缺陷等无法顾及。即使人员选择正确,在长时间软件测试和项目跟进过程中,测试人员和开发人员会产生同化效应,逻辑思维相似并提高程序认可度。所以测试人员选择应当尽量选择与本系统开发过程联系不紧密的人员,以交叉测试方法为优[20]。6.2软件测试方法6.1.1黑盒测试 黑盒子测试意为功能测试,是在不考虑模块内部逻辑结构的情况下,按照功能设计规范来测试模块的功能。从理论上讲,黑盒测试只能通过穷举法来实现,但在测试过程中不能实现完全穷举,这与GoodEnough原则背道而驰,应该选择有代表性的测试用例来测试系统功能的大多数情况。这时,测试用例的选择非常重要,甚至可以直接显示黑盒测试的测试效果。一个好的测试用例应该具有表达清晰,无歧义,可操作性,输入输出清晰,覆盖度高等优点。黑盒测试用例的具体设计方法有因果关系图、交互式设计法、函数图、情景法等。6.1.2白盒测试 白盒子测试是一种结构测试,不同于黑盒子测试:黑盒测试忽略了模块的功能内部逻辑结构,只关注功能实现程度,而白盒测试是在清楚了模块的内部逻辑结构的前提下,对模块的逻辑结构、逻辑路径等进行穷尽测试。白盒测试期间,应测试每一个判断陈述,并至少测试每一个判断陈述一次;循环主体在循环边界和运行边界内执行;内部数据结构的有效性测试等等[21]。白盒测试用例的具体设计方法有:静态结构分析法、基本路径测试法、符号测试法等。6.3测试用例6.3.1管理员登录功能测试 管理员登录功能测试主要测试用户名和密码验证能否成功、输入错误用例后能否做出用户提示。测试用例如表6-1所示。表6-1用户登录测试用例操作预期结果实际结果测试结果输入用户名admin输入密码123登录失败,提示“用户名或密码错误”显示提示信息“用户名或密码错误”测试通过输入用户名admin,输入密码admin登陆成功,进入系统主页页面跳转,进入系统主页测试通过6.3.2图谱领域管理功能测试 图谱领域管理功能测试将测试输入不同数据类型图谱领域名能否通过、输入已存在图谱领域名能否通过、删除图谱领域能否成功。测试用例如表6-2所示。表6-2图谱领域管理功能测试用例操作预期结果实际结果测试结果创建图谱领域名animal创建成功,进入图谱领域animal创建成功,进入图谱领域animal测试通过创建图谱领域名动物创建成功,进入图谱领域动物创建成功,进入图谱领域动物测试通过创建图谱领域名123创建成功,进入图谱领域123创建成功,进入图谱领域123测试通过创建图谱领域名animal创建失败,提示系统内已有该领域创建失败,提示系统内已有该领域测试通过删除图谱领域动物l跳出删除提示并删除成功跳出删除提示并删除成功测试通过6.3.3图谱导入导出功能测试 图谱导入导出功能测试主要测试不输入图谱领域名能否通过、输入图谱领域名不存在能否通过、不选择导入文件能否通过、正确输入图谱领域名和文件能否通过、图谱导出能否成功。测试用例如表6-3所示。表6-3图谱导入导出功能测试用例操作预期结果实际结果测试结果领域名为空,文件选择csv文件导入失败,提示领域名不能为空导入失败,提示领域名不能为空测试通过领域名输入动物,文件选择为csv文件导入失败,提示领域不存在导入失败,提示领域不存在测试通过领域名输入动物,文件选择为空导入失败,提示文件不能为空导入失败,提示文件不能为空测试通过领域名输入animal,文件选择为csv文件导入成功,图谱领域animal内出现数据节点和关系导入成功,图谱领域animal内出现数据节点和关系测试通过导出图谱领域animal导出成功,生成animal文件导出成功,生成animal文件测试通过6.3.4图谱内节点管理功能测试 图谱内节点管理功能测试主要测试创建节点名为空能否通过、创建节点名为各数据类型能否通过、创建节点名已存在能否通过、修改节点信息能否成功、删除节点能否成功、查找存在的节点能否成功、查找不存在的节点能否成功。测试用例如表6-4所示。表6-4图谱内节点管理功能测试用例操作预期结果实际结果测试结果创建节点名为空创建失败,提示节点名不能为空创建失败,提示节点名不能为空测试通过创建节点名为动物界创建成功创建成功测试通过创建节点名为123创建成功创建成功测试通过(续表6-4)操作预期结果实际结果测试结果创建节点名为abc创建成功创建成功测试通过创建节点名为动物界创建失败,提示已存在该节点创建失败,提示已存在该节点测试通过修改动物界节点信息为自然存在修改成功修改成功测试通过删除节点动物界删除成功删除成功测试通过查找节点植物界查找成功,定位到植物界节点查找成功,定位到植物界节点测试通过查找节点动物界查找失败,提示无该节点查找失败,提示无该节点测试通过6.3.5图谱内关系管理功能测试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论