SWRL - 使用课程

时间:2015-12-11 10:09:11

标签: owl rules protege swrl jena-rules

我想使用在类之间建模的知识。例如。我模拟了一辆汽车和一辆公共汽车有4个轮子,一个自行车2轮。现在,我想表达自行车可以提示(如果你不保持平衡 - 不称职的司机)。 如果我添加一个实例" CB450",subClassOf Bike,规则应该启用推理: can(CB450,Tip)。 方式:

Type(Cb450,Bike) and has(Bike,TwoWheels) and can(TwoWheels,Tip) -> can (CB450,Tip)

我没有找到任何方式在SWRL或Jena规则中表达此规则。有可能吗?

我知道它可以以不同的方式建模,但我需要在实例中使用类关系来实现规则。

我使用带有2.3.1颗粒的Protege 5.16。 请参阅下面的示例本体

Prefix: owl: <http://www.w3.org/2002/07/owl#>
Prefix: rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
Prefix: xml: <http://www.w3.org/XML/1998/namespace>
Prefix: xsd: <http://www.w3.org/2001/XMLSchema#>
Prefix: rdfs: <http://www.w3.org/2000/01/rdf-schema#>

Ontology: <http://www.semanticweb.org/vehicle>
ObjectProperty: <http://www.semanticweb.org/vehicle#has>
ObjectProperty: <http://www.semanticweb.org/vehicle#can>

Class: <http://www.semanticweb.org/vehicle#Car>

SubClassOf: 
    <http://www.semanticweb.org/vehicle#Vehicle>,
    <http://www.semanticweb.org/vehicle#has> some <http://www.semanticweb.org/vehicle#FourWheels>

Class: <http://www.semanticweb.org/vehicle#Vehicle>
Class: <http://www.semanticweb.org/vehicle#Bike>

SubClassOf: 
    <http://www.semanticweb.org/vehicle#Vehicle>,
    <http://www.semanticweb.org/vehicle#has> some     <http://www.semanticweb.org/vehicle#TwoWheels>

Class: <http://www.semanticweb.org/vehicle#FourWheels>

SubClassOf: 
    <http://www.semanticweb.org/vehicle#Property>
Class: <http://www.semanticweb.org/vehicle#TwoWheels>

SubClassOf: 
    <http://www.semanticweb.org/vehicle#can> some        <http://www.semanticweb.org/vehicle#Tip>,
    <http://www.semanticweb.org/vehicle#Property>

Class: <http://www.semanticweb.org/vehicle#Property>
Class: <http://www.semanticweb.org/vehicle#Tip>

SubClassOf: 
    <http://www.semanticweb.org/vehicle#Property>

Individual: <http://www.semanticweb.org/vehicle#CB450>

Types: 
    <http://www.semanticweb.org/vehicle#Bike>

Individual: <http://www.semanticweb.org/vehicle#Tip>

Types: 
    <http://www.semanticweb.org/vehicle#Tip>

1 个答案:

答案 0 :(得分:1)

根据您解释问题的方式,它看起来像&#34; CB40&#34;不是Bike的子类,而是Bike类型的个体。所以说你有一个类Vehicle,一个数据属性hasWheels on Vehicle和一个布尔属性canTip on Vehicle,你可以写一个SWRL规则为

Vehicle(?x) ^ hasWheels(?x, 2) -> canTip(?x, true)

翻译为&#34;带有两个轮子的车辆可翻倒&#34; 。 ?x是指定类型的任何个体。因此,如果您创建一个类Bike作为Vehicle的子类和该类的单个CB40并设置所有相关数据属性,推理器将为CB40分配canTip属性为true