NoSQL   发布时间:2022-05-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了研究本体逻辑NoSQL方案大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

研究本体逻辑Nosql方案

一.研究说明

1.本体

本体论是一个概念化的规范(a specification of a conceptualization),在计算机科学领域,其核心意思是指一种模型,用于描述由一套对象类型(概念或者说)、属性以及关系类型所构成的世界。尽管不同的本体对于这些构成成分的确切称谓有所不同,但它们却都是一部本体不可或缺的基本要素。一般来说,人们所普遍期望的一点就是,本体之中模型的那些特征应当非常类似相应的现实世界。

2.mongoDB数据库

@H_544_2@mongoDB是一个基于分布式文件存储的数据库,旨在为WEB应用提供可护展的高性能数据存储解决方案。

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
*面向集合存储,易存储对象类型的数据。
*模式自由。
*支持动态查询。
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性
*支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
*文件存储格式为BSON(一种JsON的扩展)
*可通过网络访问

根据本体的结构特点,设计了一种基于mongoDB的存储方法。mongoDB是一个面向文档的数据库,没有模式的概念,可以很方便的存储结构对象的信息,可以很方便的将本体转换成文档结构的BSON(一种@R_675_6122@的格式,但是是二进制序列化的)结构存储在mongoDB中。

3.jena工具

一、介绍jena
jena由 HP Labs(http://www.hpl.hp.com)开发的Java开发工具包,用于Semantic Web(语义网)中的应用程序开发;Jana是开源的,在下载的文档中有jena的完整代码。jena框架主要包括:
a)以RDF/XML、三元组形式读写RDF
资源描述框架是(RDF)是描述资源的一项标准(在技术上是W3C的推荐标准),jena文档中有一部分呢详细介绍了RDF和jena RDF API,其内容包括对jena RDF包的介绍、RDF模型的创建、读写、查询等操作,以及RDF容器等的讨论。

b)RDFS,OWL,damL+OIL等本体的操作
jena框架包含一个本体子系统(Ontology Subsystem),它提供的API允许处理基于RDF的本体数据,也就是说,它支持OWL,damL+OIL和RDFS。本体API与推理子系统结合可以从特定本体中提取信息,jena 2还提供文档管理器(OntdocumentManager)以支持对导入本体的文档管理。

C)利用数据库保存数据
jena 2允许将数据存储到硬盘中,或者是OWL文件,或者是关系数据库中。本文处理的本体就是OWL文件读入的。

二.研究思路

方案一 jena读取本体OWL文件解析存储到mongoDB

通过jena的API可以将描述本体的OWL文件解析每一个statement的Subject,preDicate,Object。解析后的形式:如下

[url] http://dbpedia.org/ontology/VolleyballLeague

[subClassOf] http://dbpedia.org/ontology/SportsLeague

[label] ligue de volleyball@fr volleyball league@en

[type] http://www.w3.org/2002/07/owl#Class

[comment] A group ofsports teams that compete against each other in volleyball.@en

存储后的文档格式:如下

{ "_ID" : {"$oID" : "507a71093b731926baa997a6"},

"name" :"http://dbpedia.org/ontology/GrandPrix/distance",

"domain": "[http://dbpedia.org/ontology/GrandPrix]",

"label" : "[distance (km)@en]",

"type" :"[http://www.w3.org/2002/07/owl#DatatypeProperty]"

}

解析出来的每一个标签组(每一个statement)视作一个document,以key-value的形式存储在同一个collection中。这种方式解析完之后,mongoDB中只有一个collection,存储的文档根据type来区分是类(class),还是类的实例(objectproperty),还是属性(dataproperty)。

方案二 分集合存储

采取解析OWL的另一种方式,以类型(type)分类,建立三个collection,分别为类的描述(classRes),类实例的描述(instanceRes),属性的描述(propertyRes).此时每个collection中的文档的key包含了name,label,comment,subclass,range,domain等等。

存储后文档的格式

{ "_ID" : { "$oID" :"507a72013b738a6e3026a944"},

"Classname" :"http://dbpedia.org/ontology/Athlete",

"subClassOf" :

{ "Classname" :"http://dbpedia.org/ontology/Person","equivalentClass" :"http://xmlns.com/foaf/0.1/Person","label" : ["person","Person","pessoa","personne"],"_ID" : { "$oID" :"507a72013b738a6e3026a943"}

},

"label" : [ "athlete","athlète"]

三.Q&A

Q1:jena解析有的本体没有类型(type)输出(徐所说),至于其他的没有type输出的本体有待研究。若存在没有type的本体,该怎样判别它的类型(不建议用手工的形式去判别后存储)

Q2:OWL标签中的所有owl,rdf等子标签的xmlns均用一个collection存储,在这种情况下,存储稳定的时候,可以在value上只需存储本地化名字(localhost),在后续的事物逻辑上会不会有不方便之处?

大佬总结

以上是大佬教程为你收集整理的研究本体逻辑NoSQL方案全部内容,希望文章能够帮你解决研究本体逻辑NoSQL方案所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: