Protege ontology - 一个人可以引用一个类吗?

时间:2016-11-19 02:53:06

标签: ontology protege

有没有办法让一个属性(在个人身上)实际上是对另一个类的引用?

例如,在示例Wine ontology(http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine)中,我想为Wine这样的特定葡萄酒指定pairsWellWith属性LaneTannerPinotNoir,引用另一个类RedMeat

我想要个人(LaneTannerPinotNoir)引用类似RedMeat的类 - 而不是像Steak这样的个人。从一个人到另一个人的引用是微不足道的(对象属性)。

我想这样做而不必混淆层次结构。即。LaneTannerPinotNoir不是RedMeat,因此任何涉及多层次结构的解决方案都可能出错。

也许我可以某种方式推断所有可能的个体?那也没关系。

1 个答案:

答案 0 :(得分:1)

想象一下,你正在用蔬菜烹饪辛辣的烤面包。让我们假设你的酒窖里有一瓶Lane Tanner Pinot Noir Julia's Vineyard 2006。你不记得这个瓶子,你喜欢你的数字葡萄酒配对助手,帮助你选择合适的葡萄酒。助理知道您在酒窖中的所有瓶子,并可以访问邻近的葡萄酒精品店的链接数据,建议您购买什么。

你真正希望这个工具说的是:

lt:JuliaVineyard2006  onto:pairsWellWith  my:spicyRoastedBeef .

知道:

my:spicyRoastedBeef  a  onto:RedMeat .
lt:JuliaVineyard2006  a  lt:PinotNoir .

在这种情况下,您希望知识库知道所有LT的黑皮诺与所有红肉菜肴搭配得很好。这可以在OWL中说,但it's not trivial。幸运的是,Lane Tanner的知识库有关于其葡萄酒的这些公理:

ex:r1  a  owl:ObjectProperty .
ex:r2  a  owl:ObjectProperty .
onto:pairsWellWith  owl:propertyChainAxiom  ( ex:r1 ex:r2 ) .
ex:a   a  owl:Thing .
lt:PinotNoir  a  owl:Class;
   rdfs:subClassOf  [
      a  owl:Restriction;
      owl:onProperty  ex:r1;
      owl:someValuesFrom  [a owl:Class; owl:oneOf ( ex:a )]
   ] .
onto:RedMeat  a  owl:Class;
   rdfs:subClassOf  [
      a  owl:Restriction;
      owl:onProperty  [owl:inverseOf ex:r2];
      owl:someValuesFrom  [a owl:Class; owl:oneOf ( ex:a )]
   ] .

助理只需要问:

SELECT ?wine WHERE {
   ?wine  onto:pairsWellWith  my:spicyRoastedBeef .
}

查询正确的数据源组合并应用正确的推理。您可以从酒窖中获取适合您用餐的所有葡萄酒,以及从邻近商店购买的建议。

在OP评论之后编辑:为了使本体不那么富有表现力,也可以简单地将每个葡萄酒与红肉联系起来(说葡萄酒与所有红葡萄酒搭配得很好肉类,像这样:

onto:RedMeat  a  owl:Class;
    rdfs:subClassOf  [
        a  owl:Restriction;
        owl:onProperty  onto:pairsWellWith;
        owl:hasValue  lt:JuliaVineyard2006
    ] .

对于所有与红肉搭配良好的葡萄酒,你必须这样做。

如果您认为这仍然过于富有表现力,您还可以明确地明确添加所有配对(葡萄酒,餐)很好地配对,这从消费者的角度来看是有效的,但相当于说&# 34; f ** k语义"并且在发布商方面投入了大量开销。

另一种选择是完全忽略OWL并提供与其他技术等效的含义,例如基于规则的推理。规则交换(RIF)有一个标准,这样你就可以与世界分享你的规则本体,但是RIF在采用方面并不是很成功,所以大多数人/系统都会忽略它。 存在其他非标准定义规则的方法,例如SWRL,SPIN,n3。该规则很容易表达和推理:

?x  a  lt:PinotNoir .
?y  a  onto:RedMeat .
----------------------------
?x  onto:pairsWellWith  ?y .

还有其他方法可以将个人与班级联系起来,例如使用owl:AnnotationProperty或惩罚。但是,没有这些技术会传达你想要的正确语义。