版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6/6利用jenaAPI查询OWL本体(可以作为学习本体和jena接口的一个经典实例)2008—05-1015:12
最近在学习本体和语义网.学习了OWL,也尝试着用了一下jenaAPI对OWL本体进行查询。1.本体简介
“本体”这个术语来自于哲学,它是研究世界上的各种实体以及他们是怎么关联的科学。本体是对应用领域概念化的显示的解释说明,为某领域提供了一个共享通用的理解,从而无论是人还是应用系统之间都能够有效地进行语义上的理解和通讯。studer认为,本体是:“共享概念模型的明确的形式化规范说明”.这包括了4层含义:ﻫ概念化(conceptualization)ﻫ通过抽象出客观世界中一些现象的相关概念而得到的模型,其表示的含义独立于具体的环境状态
明确(explicit)
所使用的概念及使用这些概念的约束都有明确的定义ﻫ形式化(formal)
本体应是计算机可读的.
共享(share)
知识本体中体现的是共同认可的知识,反映的是相关领域中公认的概念集,它所针对的是团体而不是个体。本体的目标是捕获相关的领域的知识,提供对该领域知识的共同理解,确定该陋域内共同认可的词汇,并从不同层次的形式化模式上给出这些词汇和词汇之间相互关系的明确定义。2。OWL简介
2003年7月W3C公布了OWLWebontology语言的最初工作草案,2004年2月10日,OWL正式成为W3C推荐的标准.OWL和DAML+OIL非常相近,只有一些微小的变化.DAML+OIL和OWL的语义都基于描述逻辑(descriptionlogic,DL).OWL作为W3C推荐的标准本体表示语言,它的最大特点是关联描述逻辑,通过对概念、概念属性及其相互间关系的描述,构成概念的复杂关系网络,这就意味着描述逻辑推理机可以推理OWL本体。OWL有3个表达能力递增的子语言:OWLLite,OWLDL,OWLFull[20]。OWLLite提供了类层次的能力和简单的约束能力,支持基数为0或1的基数约束,包括6个类别的语言构造子。OWLDL在保持计算完整性(computationalcompleteness)和可判定性(decidability)的前提下,提供了尽可能大的表达能力,包含了OWL的全部语言构造成分,但他们的使用受到一些限制(如一个类可以是许多类的子类,但不能是另一个类的实例)。描述逻辑是OWL的形式化基础,OWLDL的主要扩充是增加了布尔逻辑运算操作.OWLFull包含OWL的全部语言构造成分并取消了OWLDL的限制,在OWLFull中一个类可以看成个体的集合,也可以看成是一个个体。由于OWLFull取消了OWLDL中的保证可计算的某些限制,在没有计算保证的语法自由的RDF上进行最大程度表达,允许一个Ontology在预定义的(RDF、OWL)词汇表上增加词汇,从而任何推理软件均不能支持OWLFULL的所有特点,因此不存在完整的推理算法支持OWLFull的全部特性。OWL通过对概念、概念属性及其相互间关系的描述,构成概念的复杂关系网络。
3.jena简介
jena是惠普公司的一个项目,jena为应用程序开发人员提供了一套java接口对本体进行操作。这样我们就可以调用jenaAPI,构建我们自己的应用程序,实现对包括RDF,OWL本体进行创建,修改,查询以及推理操作。
这是一个用OWL语言开发的家族本体。这是本体的数据文件下面是利用jenaAPI对查询某个人的爸爸,妈妈,兄弟,姐妹,爷爷,祖先和后代.....publicclassSearchFamily{
privatefinalstaticStringFATHER=”father";ﻫprivatefinalstaticStringMOTHER="mother”;ﻫprivatefinalstaticStringDAUGHTER=”daughter”;ﻫprivatefinalstaticStringSON="son”;
privatefinalstaticStringSISTER=”sister";
privatefinalstaticStringBROTHER="brother";
privatefinalstaticStringANCESTOR=”ancestor”;
privatefinalstaticStringOFFSPRING="offSpring”;ﻫprivatefinalstaticStringGRANDPA=”grandPa";ﻫprivatefinalstaticStringrulePath="E:\\programming\\workspace\\OWLTest\\WebRoot\\WEB—INF\\family。rules”;ﻫ
privatefinalstaticStringpre="#";ﻫpublicfinalstaticString”E:\\programming\\workspace\\OWLTest\\WebRoot\\WEB-INF\\familySchema。xml”;
publicfinalstaticString"E:\\programming\\workspace\\OWLTest\\WebRoot\\WEB—INF\\familyData.xml";ﻫ/*下面的方法,接受一个人的名字,然后构造出sparql语句*/ﻫpublicstaticStringgetSearchString(StringkeyWords){ﻫ
StringBuffersb=newStringBuffer(”PREFIXfa:〈#〉”+ﻫ
"PREFIXrdfs:<#>”+
"PREFIXrdf:〈#>”
);ﻫ
sb.append(”SELECT?father?mother?son?daughter?sister?brother?ancestor?offSpring?grandPa”);ﻫ
sb.append("WHERE{”);ﻫ
ﻫ
sb。append("OPTIONAL{”);ﻫ
sb.append(keyWords+”fa:hasFather?father");ﻫ
sb.append("}.”);
sb.append("OPTIONAL{”);ﻫ
sb。append(keyWords+”fa:hasMother?mother”);ﻫ
sb。append(”}。");
sb。append("OPTIONAL{");
sb。append(keyWords+"fa:hasSon?son”);ﻫ
sb.append("}.”);
sb.append(”OPTIONAL{”);
sb.append(keyWords+"fa:hasDaughter?daughter");
sb.append(”}.");
sb.append(”OPTIONAL{");
sb.append(keyWords+"fa:hasSister?sister");ﻫ
sb.append(”}.");ﻫ
sb.append(”OPTIONAL{");
sb。append(keyWords+”fa:hasBrother?brother");ﻫ
sb.append("}.");ﻫ
sb.append("OPTIONAL{");ﻫ
sb。append(keyWords+"fa:hasAncestor?ancestor”);
sb。append("}。”);ﻫ
sb。append(”OPTIONAL{");ﻫ
sb.append(keyWords+"fa:hasOffSpring?offSpring");ﻫ
sb。append(”}.”);
sb.append("OPTIONAL{");ﻫ
sb.append(keyWords+”fa:hasGrandPa?grandPa");
sb。append("}");ﻫﻫ
sb.append("}");
System。out.println(sb);
returnsb.toString();ﻫ}publicstaticMapgetResultsList(StringkeyWords,Stringrule){ﻫ
ﻫ
//Modelm=getModel(,);//没有使用家族规则
ﻫ
ﻫ
if(rule==null)rule=rulePath;ﻫ
Modelrm=getModelByRules(,,rule);//使用了家族规则
StringsearchString=getSearchString("fa:”+keyWords);ﻫ
ﻫ
Mapmap=getResultsList(searchString,rm);ﻫ
ﻫ
ﻫ
returnmap;ﻫ
}
publicstaticModelgetModel(String){
fm=();ﻫ
Modelschema=fm.loadModel();ﻫ
Modeldata=fm。loadModel();
ﻫ
Reasonerreasoner=ReasonerRegistry.getOWLReasoner();
reasoner=reasoner.bindSchema(schema);ﻫ
InfModelm=ModelFactory。createInfModel(reasoner,data);ﻫ
ﻫ
OntModelom=ModelFactory.createOntologyModel(OntModelSpec。OWL_MEM,m);ﻫ
returnom;ﻫ}ﻫ/**根据rule,构建model对象*/ﻫpublicstaticModelgetModelByRules(StringrulePath){ﻫ
fm=();ﻫ
Modelschema=fm。loadModel();
Modeldata=fm.loadModel();
//设置新的领域规则
Listrules=Rule.rulesFromURL(rulePath);
ﻫ
GenericRuleReasonerrea=newGenericRuleReasoner(rules);
rea.setOWLTranslation(true);
//notneededinRDFScase
rea.setTransitiveClosureCaching(true);
rea=(GenericRuleReasoner)rea。bindSchema(schema);
ﻫ
InfModelm=ModelFactory.createInfModel(rea,data);
ﻫ
OntModelom=ModelFactory。createOntologyModel(OntModelSpec.OWL_MEM,m);ﻫ
returnom;ﻫ}
privatestaticMapgetResultsList(StringsearchString,Modelmodel){ﻫ
Queryq=QueryFactory.create(searchString);
QueryExecutionqe=QueryExecutionFactory.create(q,model);
ResultSetrs=qe.execSelect();//执行查询
System.out。println("rs.getReaultVars-—"+rs。getResultVars());
QuerySolutionqs;
RDFNodefather,mother,son,daughter,sister,ancestor,offSpring,brother,grandPa;ﻫ
Map〈String,Set<RDFNode〉〉map=newHashMap〈String,Set<RDFNode>>();
Set<RDFNode>father_=newHashSet〈RDFNode〉();
Set<RDFNode>mother_=newHashSet<RDFNode>();ﻫ
Set<RDFNode>son_=newHashSet〈RDFNode〉();ﻫ
Set<RDFNode>sister_=newHashSet<RDFNode>();
Set〈RDFNode〉ancestor_=newHashSet<RDFNode〉();
Set<RDFNode>offSpring_=newHashSet<RDFNode>();ﻫ
Set〈RDFNode>brother_=newHashSet〈RDFNode〉();
Set<RDFNode>daughter_=newHashSet<RDFNode>();ﻫ
Set<RDFNode〉grandPa_=newHashSet〈RDFNode>();ﻫ
ﻫ
while(rs.hasNext()){ﻫ
qs=rs.nextSolution();
father=qs.get(FATHER);
mother=qs.get(MOTHER);ﻫ
son=qs.get(SON);
daughter=qs.get(DAUGHTER);ﻫ
sister=qs.get(SISTER);
ancestor=qs.get(ANCESTOR);ﻫ
offSpring=qs。get(OFFSPRING);ﻫ
brother=qs.get(BROTHER);ﻫ
grandPa=qs。get(GRANDPA);ﻫ
ﻫ
if(father!=null)
father_.add(father);
if(mother!=null)
mother_。add(mother);ﻫ
if(son!=null)
son_.add(son);ﻫ
if(daughter!=null)
daughter_.add(daughter);
if(sister!=null)ﻫ
sister_。add(sister);ﻫ
if(ancestor!=null)
ancestor_.add(ancestor);
if(offSpring!=null)
offSpring_.add(offSpring);ﻫ
if(brother!=null)ﻫ
brother_。add(brother);
if(grandPa!=null)
grandPa_.add(grandPa);ﻫ
ﻫ
ﻫ
ﻫ
}
map.put(FATHER,father_);
map.put(MOTHER,mother_);
map.put(SON,son_);ﻫ
map。put(SISTER,sister_);ﻫ
map。put(BROTHER,brother_);ﻫ
map.put(ANCESTOR,ancestor_);ﻫ
map.put(DAUGHTER,daughter_);ﻫ
map。put(OFFSPRING,offSpring_);ﻫ
map.put(GRANDPA,grandPa_);
ﻫ
//ResultSetFormatter。out(System。out,rs,q);ﻫ
qe.close();
returnmap;
ﻫ
}ﻫpublicstaticvoidprint(Map<String,Set<RDFNode>〉map){ﻫSet<String>keys=map.keySet();
Iterator<String>keyi=keys。iterator();ﻫStringkey;ﻫSet<RDFNode〉l;ﻫIterator〈RDFNode>i;ﻫRDFNoder;
while(keyi。hasNext()){
key=keyi.next();
System.out.println(key+"-—-—:");
l=map.get(key);
i=l.iterator();
while(i。hasNext()){
r=i。next();
if(r。isResource()){ﻫ
System.out。print(((Resource)r)。getLocalNa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程BIM协同施工平台
- 乐器行业3D打印技术趋势
- 儿童生长发育的机器学习预测模型
- 2023-2024学年北京东城北京二中物理高一第二学期期末考试模拟试题含解析
- 2023-2024学年安徽省合肥市庐江县高一物理第二学期期末考试模拟试题含解析
- 城市基础设施建设的绿色发展策略
- 基于大数据的备抵损失预测
- 多用途自控微型无人驾驶飞机项目招商引资风险评估报告
- 国际环评法规比较及启示
- 陕西省西安市碑林区铁一中学2023-2024学年物理高一第二学期期末教学质量检测试题含解析
- 职工安全生产教育培训档案表
- 光华案例大赛金融分析组
- (完整版)中医外科学重点
- 通信管道工程新建项目施工组织设计
- 维修电工高级技师论文(6篇推荐范文)
- 人教版培智三年级下第6册生活数学教案
- FZ∕T 63054-2021 涤纶色纺缝纫线
- 2022年上大专升本国际贸易原理与实务在线作业答案
- 泥结碎石路面施工方案
- 统编版四年级道德与法治下册第9课《生活离不开他们》优质课件(含视频)
- 粘土砂处理设使用说明
评论
0/150
提交评论