利用jenaAPI查询家族本体(学习jena的实例)_第1页
利用jenaAPI查询家族本体(学习jena的实例)_第2页
利用jenaAPI查询家族本体(学习jena的实例)_第3页
利用jenaAPI查询家族本体(学习jena的实例)_第4页
利用jenaAPI查询家族本体(学习jena的实例)_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论