您好,欢迎访问三七文档
Jena2推理支持这节文档描述了目前在jena2里可用的推理支持。它包括一个大致的推理API的大纲,还包括在jena2中提供的具体规则引擎的细节以及对RDFS和OWL推理的配置的细节。我们在这里没有介绍所有API的细节:请参考jena2javadoc来获得API的所有细节。注意,这是这个文档的一个昀初的版本,可能会出现一些错误以及不一致的地方,所以欢迎您的反馈。目录:1.推理支持概述2.推理API3.RDFS推理机4.OWL推理机5.DAML支持6.Thetransitivereasoner7.一般目的的规则引擎8.扩展推理支持9.未来推理支持概述设计Jena2推理子系统是用来允许一系列推理引擎或reasoner被插入(bepluggedinto)Jena。这样的引擎被用来获取额外的rdf断言,这些断言是从一些带有任何可选的本体信息baserdf以及和reasoner一起的公理和规则得到的。这个机制的主要的应用是支持使用RDFS和OWL语言,这些语言允许从实例数据和类描述中推断出额外的事实。然而,这种机制被设计得非常一般,特别是,它包括一个可以用于许多RDF处理或转换任务的一般的规则引擎。我们尽量使用术语inference指获取额外信息的抽象过程,用术语reasoner来指执行任务的一个具体的代码对象。这样的应用是任意的,所以,如果我们将像reasoning和inferenceengine的术语弄混淆了,请原谅我们。全部的推理机制可用下图来描述:应用程序一般通过使用ModelFactory获得推理机制,将一个数据集和一些reasoner联系起来来创建一个新的Model。对新创建的Model的查询不仅返回在原始数据中出现的陈述,还将返回那些由reasoner执行的使用规则和其他推理机制得来的陈述。正如图中所述,推理机制实际上是在GraphSPI的水平之上执行的,所以,任何不同的Model接口都可以被构造成一个推理Graph。特别是,OntologyAPI提供了便利的方法来将适当的reasoner和它构造的OntModels联系起来。作为一般RDFAPI的一部分,我们也提供了一个InfModel,它是提供额外控制和访问底层推理图的一般的Model接口的扩展。ReasonerAPI支持这样的概念:通过将一个reasoner同一组schema或本体数据使用bindSchema调用绑定起来将一个reasoner专用化。然后使用bind调用,这个专用化的reasoner就可以附属于不同的实例数据集合了。在与不同的实例数据多次使用同一个schema信息这种情况下,这个技术就允许重用推理。在RDF中,没有明显的区分schema数据(AKAtbox)和实例数据(AKAabox),类或相关的实例可以包括在bind或bindSchema调用里。为了保持这个设计尽量openended,jena2也包含了一个ReasonerRegistry。它是一个静态的类,通过这个类目前可用的reasoner便可以被检测到。我们可以注册一个新的reasoner类型,也可以动态的查找一个给定类型的reasoner。ReasonerRegistry也可以提供简便的访问由提供的主要的reasoner的预建的实例。可用的reasoners有许多预定义的reasoners包括在jena中:传递的reasoner(Transitivereasoner):提供对存储和传递类和属性的支持。这个仅仅实现了rdfs:subProperty和rdfs:subClassOf传递和对称的属性。RDFS规则reasoner:实现了一个可配置的RDFS继承的子集。OWL,OWLMini,OWLMicroReasoners:一组有用的但是不完全的OWL/Lite子集和OWL/Full语言的实现DAMLmicroreasoner用于内部,使得DAMLAPI能够提供昀小得推理。一般得规则reasoner:一个基于规则得reasoner,它可以支持用户定义的规则。支持前向链,后向链以及混合的执行策略。TheInferenceAPI1.一般的reasonerAPI2.小例子3.在推理模型上的操作-确认(Validation)-Extendedliststatements-直接和间接关系-来历(Derivations)-访问原始数据和演绎-处理控制-追踪(tracing)一般的reasonerAPI:找到一个reasoner对于每种类型的reasoner,都有一个factory类(这个factroy类要符合ReasonerFactory接口),它的实例可以被用来创建它所关联的Reasoner的实例。Factory实例可以直接由一个已知的factory类使用静态方法theInstance()来定位,也可以从一个全局的ReasnonerRegistry来获取,这个ReasonerRegistry存储着factory实例通过URI索引另外,ReasonerRegistry还有一些非常方便的方法来定位对每个主要的reasoner的一个预创建的实例(getTransitiveReasoner,getRDFSReasoner,getRDFSSimpleReasoner,getOWLReasoner,getOWLMiniReasoner,getOWLMicroReasoner)注意,这些来创建reasoners的factory对象仅仅是来简化设计和扩展注册服务的。一旦你有了一个reasoner实例,这个实例就可以多次被使用,通过将它绑定到不同的数据集合中,并且没有冲突的危险――就没有必要每次都要创建一个新的reasoner实例。如果与OntolgoyAPI一起工作,就不总是需要明确的指定一个reasoner。预创建OntModelSpec实例提供了对适当reasoners的简单的访问,来用于不同的本体配置。类似地,如果你想要的仅仅是一个普通的带有RDFS推理的RDFModel,那么就可以使用简便的方法ModelFactory.creatRDFSModel了。配置一个reasoner(译者注:几种不同的配置reasoner的方法)可以配置reasoners的许多行为。为了允许任意的配置信息都可以被传到reasoners,我们使用RDF来编码这个配置的细节。ReasonerFactory.create方法可以传递一个jenaResource对象,这个对象的属性可以用来配置这个reasoner。为了在简单的情况下简化代码,我们也提供了一个直接的java方法来设置一个单一的配置参数,Reasoner.setParameter。这个参数集有相应的配置属性来确定。对于内置的reasoner,可用的配置参数在下面描述,并且在ReasonerVocabulary类里预定义。参数的值一般情况下是一个String或是一个structuredvalue。例如:为了设置一个布尔值,我们可以使用串“true”或“false”,或在java里用一个Boolean对象,或在RDF中使用xsd:Boolean的一个实例。对数据使用reasoner一旦有了一个reasoner的实例,它就会被附属于一组RDF数据来创建一个推理模型。可以通过将所有的RDF数据放进一个Model来实现,也可以将其分成两个组件――schema和实例数据。对于一些外部reasoner,将需要一个明确的(hard)划分。对于所有内置的reasoner,可以任意划分。这个划分的主要价值是允许一些推理使得一组数据(通常是schema数据)可以很有效的使用到多组数据(通常是实例数据)的推理中。如果你想用这种方法专有化一个reasoner,通过部分应用它到一组schema数据,可以使用Reasoner.bindSchema方法,它可以返回一个新的,专有的reasoner将reasoner绑定在昀终的数据集来创建一个推理模型,参照ModelFactory方法,尤其是ModelFactory.createInfModel访问推理(Accessinginferences)昀后,已经创建了一个推理model然后任何访问RDF陈述的API操作将都能够访问额外的陈述,这些额外的陈述是通过一个reasoner从数据界限中继承下来的。(就是reasoner推出来的,个人理解)。这些额外的虚的陈述可能是在第一次这个model被接触时预计算出来的,也可能是每次都动态的重新计算出来,或者可能在要求的时候计算出来,这些都有reasoner来决定。Reasoner描述可以使用RDF元数据来描述Reasoner,我们搜索这些元数据来来定位带有适当属性的reasoner。调用Reasoner.getCapabilities和Reasoner.supportsProperty来获取这些描述的元数据。一些小例子这些昀初的例子并不是设计来表明reasoners的能力,而是来表明建立一个reasoner所需要的代码。首先创建一个jenamodel,包含这些陈述,属性p是另外一个属性q的子属性,有一个资源a对于属性p的值为foo。可以通过写一个RDF/XML文件或三元组(N3)文件,并且将其读入。我们采用RDFAPI:StringNS=urn:x-hp-jena:eg/;//BuildatrivialexampledatasetModelrdfsExample=ModelFactory.createDefaultModel();Propertyp=rdfsExample.createProperty(NS,p);Propertyq=rdfsExample.createProperty(NS,q);rdfsExample.add(p,RDFS.subPropertyOf,q);rdfsExample.createResource(NS+a).addProperty(p,foo);现在我们可以创建一个推理Model,它可以对这些数据执行RDFS推理,通过使用:InfModelinf=ModelFactory.createRDFSModel(rdfsExample);//[1]然后我们可以检查这个结果Model来表明:a也有一个属性q,值为foo,由于subPropertyOfentailment。Resourcea=inf.getResource(NS+a);System.out.println(Statement:+a.getProperty(q));它的输出结果是:Statement:[urn:x-hp-jena:eg/a,urn:x-hp-jena:eg/q,Literal]另一种情形,我们可能已经创建了一个空的推理model然后直接在这个model里添加陈述。如果我们想使用一个不同的reasoner,它不是可用的作为一个便利的方法或者想配置一个,我们需要改一下line〔1〕。例如,手动创建一个同样的,我们可以用下面来替换line〔1〕:Reasonerreasoner=ReasonerRegistry.getRDFSReasoner();InfModelinf=ModelFactory.createInfModel(reasoner,rdfsExample);或者更加手动地:Reasonerreasoner=RDFSRuleReasonerFactory.theInstance().create(null);InfModelinf=ModelFactory.createInfModel(reasoner,rdfsExample);创建一个新的reasoner实例像这样的变量的目的是能够设置配置参数。例如:如果我们要在infModel上listStatements,我们将看到它也“包括”了所有RDFS公理,并且有很多。有时禁止这些是非常有用的,而仅仅看到那些“有兴趣的”entailments。可以通过设置处理水平参数来实现,通过创建一个新的reasoner的配置描述并且将其传到factory方法:Resour
本文标题:jena推理翻译
链接地址:https://www.777doc.com/doc-5734907 .html