《2022年2022年利用jenaAPI查询家族本体 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年利用jenaAPI查询家族本体 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、利用 jena API查询 OWL 本体(可以作为学习本体和jena 接口的一个经典实例)2008-05-10 15:12 最近在学习本体和语义网。 学习了 OWL , 也尝试着用了一下jena API 对 OWL本体进行查询。1. 本体简介“ 本体 ” 这个术语来自于哲学,它是研究世界上的各种实体以及他们是怎么关联的科学。本体是对应用领域概念化的显示的解释说明,为某领域提供了一个共享通用的理解,从而无论是人还是应用系统之间都能够有效地进行语义上的理解和通讯。studer 认为,本体是:“ 共享概念模型的明确的形式化规范说明” 。这包括了4 层含义:概念化 (conceptualization
2、) 通过抽象出客观世界中一些现象的相关概念而得到的模型,其表示的含义独立于具体的环境状态明确 (explicit) 所使用的概念及使用这些概念的约束都有明确的定义形式化 (formal) 本体应是计算机可读的。共享 (share) 知识本体中体现的是共同认可的知识,反映的是相关领域中公认的概念集,它所针对的是团体而不是个体。 本体的目标是捕获相关的领域的知识,提供对该领域知识的共同理解,确定该陋域内共同认可的词汇,并从不同层次的形式化模式上给出这些词汇和词汇之间相互关系的明确定义。2.OWL简介2003 年7 月W3C 公布了OWL Web ontology 语言的最初工作草案,2004 年2
3、 月10 日,OWL 正式成为W3C 推荐的标准。OWL 和DAML + OIL 非常相近,只有一些微小的变化。DAML + OIL 和OWL 的语义都基于描述逻辑(descriptionlogic ,DL) 。OWL 作为W3C 推荐的标准本体表示语言,它的最大特点是关联描述逻辑, 通过对概念、 概念属性及其相互间关系的描述,构成概念的复杂关系网络,这就意味着描述逻辑推理机可以推理OWL 本体。OWL 有3 个表达能力递增的子语言:OWL Lite ,OWL DL , OWL Full20 。OWL Lite 提供了类层次的能力和简单的约束能力,支持基数为0 或1 的基数约束,包括6 个类别
4、的语言构造子。OWL DL 在保持计算完整性( computational completeness ) 和可判定性(decidability) 的前提下,提供了尽可能大的表达能力,包含了OWL 的全部语言构造成分,但他们的使用受到一些限制(如一个类可以是许多类的子类,但不能是另一个类的实例) 。描述逻辑是OWL 的形式化基础,OWL DL 的主要扩充是增加了布尔逻辑运算操作。OWL Full 包含OWL 的全部语言构造成分并取消了OWL DL 的限制,在OWL Full 中一个类可以看成个体的集合,也可以看成是一个个体。由于OWL Full 取消了OWL DL 中的保证可计算的某些限制,在没
5、有计算保证的语法自由的RDF 上进行最大程度表达, 允许一个Ontology 在预定义的(RDF、OWL) 词汇表上增加词汇,从而任何推理软件均不能支持OWL FULL 的所有特点,因此不存在完整的推理算法支持OWL Full 的全部特性。OWL 通过对概念、概念属性及其相互间关系的描述,构成概念的复杂关系网络。 OWL本体的一个优点是会有能够对其做推理的工具。这些工具提供了不特定于某个主名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - -
6、- - 题领域的通用支持,而如果要构建一个能对一个特定的工业界标准XML Schema做推理的系统,它往往是特定于一个领域的。构建一个可靠的和有用的推理系统不是一项简单的工作。而创建一个本体则更为容易处理。3.jena简介 jena是惠普公司的一个项目,jena 为应用程序开发人员提供了一套java 接口对本体进行操作。这样我们就可以调用jenaAPI ,构建我们自己的应用程序,实现对包括RDF ,OWL本体进行创建,修改,查询以及推理操作。这是一个用OWL 语言开发的家族本体。这是本体的数据文件下面是利用jenaAPI 对查询某个人的爸爸,妈妈,兄弟,姐妹,爷爷,祖先和后代。.public
7、class SearchFamily private final static String FATHER=father; private final static String MOTHER=mother; private final static String DAUGHTER=daughter; private final static String SON=son; private final static String SISTER=sister; private final static String BROTHER=brother; private final static St
8、ring ANCESTOR=ancestor; private final static String OFFSPRING=offSpring; private final static String GRANDPA=grandPa; private final static String rulePath=E:programmingworkspaceOWLTestWebRootWEB-INFfamily.rules;private final static String pre=http:/ public final static String fileSchema=E:programmin
9、gworkspaceOWLTestWebRootWEB-INFfamilySchema.xml; public final static String fileData=E:programmingworkspaceOWLTestWebRootWEB-INFfamilyData.xml;/*下面的方法,接受一个人的名字,然后构造出sparql语句*/ public static String getSearchString(String keyWords) StringBuffer sb=new StringBuffer(PREFIX fa: + PREFIX rdfs: + PREFIX rd
10、f: ); sb.append( SELECT ?father ?mother ?son ?daughter ?sister ?brother ?ancestor ?offSpring ?grandPa ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - sb.append(WHERE ); sb.append( OPTIONAL ); sb.append(keyWords+ fa:hasFather ?father ); s
11、b.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(keyW
12、ords+ 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.appe
13、nd( . ); sb.append( OPTIONAL ); sb.append(keyWords + fa:hasGrandPa ?grandPa ); sb.append( ); sb.append( ); System.out.println(sb); return sb.toString(); public static Map getResultsList(String keyWords,String fileSchema,String fileData,String rule) /Model m=getModel(fileSchema, fileData);/没有使用家族规则 i
14、f(rule=null) rule=rulePath; Model rm=getModelByRules(fileSchema, fileData, rule); /使用了家族规则名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - String searchString=getSearchString(fa:+keyWords); Map map=getResultsList(searchString, rm); return ma
15、p; public static Model getModel(String fileSchema,String fileData) FileManager fm=FileManager.get(); Model schema = fm.loadModel(fileSchema); Model data = fm.loadModel(fileData); Reasoner reasoner = ReasonerRegistry.getOWLReasoner(); reasoner = reasoner.bindSchema(schema); InfModel m = ModelFactory.
16、createInfModel(reasoner, data); OntModel om=ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, m); return om; /*根据 rule ,构建 model 对象*/ public static Model getModelByRules(String fileSchema,String fileData,String rulePath) FileManager fm=FileManager.get(); Model schema = fm.loadModel(fileSchema);
17、 Model data = fm.loadModel(fileData); /设置新的领域规则 List rules = Rule.rulesFromURL(rulePath); GenericRuleReasoner rea = new GenericRuleReasoner(rules); rea.setOWLTranslation(true); / not needed in RDFS case rea.setTransitiveClosureCaching(true); rea =(GenericRuleReasoner) rea.bindSchema(schema); InfMode
18、l m = ModelFactory.createInfModel(rea, data); OntModel om=ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, m); return om; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - private static Map getResultsList(String searchString,Model mode
19、l) Query q=QueryFactory.create(searchString); QueryExecution qe=QueryExecutionFactory.create(q, model); ResultSet rs=qe.execSelect(); /执行查询 System.out.println(rs.getReaultVars-+rs.getResultVars(); QuerySolution qs; RDFNode father,mother,son,daughter,sister,ancestor,offSpring,brother,grandPa; MapStri
20、ng, Set map=new HashMapString, Set(); Set father_=new HashSet(); Set mother_=new HashSet(); Set son_=new HashSet(); Set sister_=new HashSet(); Set ancestor_=new HashSet(); Set offSpring_=new HashSet(); Set brother_=new HashSet(); Set daughter_=new HashSet(); Set grandPa_=new HashSet(); while(rs.hasN
21、ext() 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!=nul
22、l) mother_.add(mother); if(son!=null) son_.add(son); if(daughter!=null) daughter_.add(daughter); if(sister!=null) sister_.add(sister); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - if(ancestor!=null) ancestor_.add(ancestor); if(offSpring!
23、=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_)
24、; map.put(OFFSPRING, offSpring_); map.put(GRANDPA, grandPa_); / ResultSetFormatter.out(System.out, rs,q); qe.close(); return map; public static void print( MapString, Set map) Set keys=map.keySet(); Iterator keyi=keys.iterator(); String key; Set l; Iterator i; RDFNode r; while(keyi.hasNext() key=key
25、i.next(); System.out.println(key+-:); l=map.get(key); i=l.iterator(); while(i.hasNext() r=i.next(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - if(r.isResource() System.out.print( (Resource)r).getLocalName()+ - ); if(r.isLiteral() Syste
26、m.out.print( (Literal)r).getString()+ - ); System.out.println(); public static void main(String args) String keyWords=zhangxiaoli; MapString, Set map=getResultsList(keyWords, fileSchema, fileData,null); print(map); 运行代码,可以看到zhangxiaoli的所有亲人。其中用到的规则主要有:include . include .prefix rdf: . prefix xsd: . p
27、refix rdfs: . prefix owl: . prefix fa: . rule1: (?X fa:hasHusband ?Y) (?X fa:isMotherOf ?Z) - (?Y fa:isFatherOf ?Z) rule2: (?X fa:hasHusband ?Y) (?X fa:hasDaughter ?Z) - (?Y fa:isFatherOf ?Z) rule3: (?X fa:hasHusband ?Y) (?X fa:hasDaughter ?Z) - (?Y fa:hasDaughter ?Z) rule4: (?X fa:hasHusband ?Y) (?X fa:hasDaughter ?Z) - (?Z fa:hasFather ?Y) rule5: (?Y fa:hasFather ?Z) (?X fa:hasFather ?Y) - (?X fa:hasGrandPa ?Z) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -