Protege ontology - 个人可以引用 class 吗?

Protege ontology - can an individual reference a class?

有什么方法可以使 属性(在个人上)实际上是对另一个 class 的引用?

例如,在示例 Wine ontology (http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine) 中,我想指定一个 Wine 属性 pairsWellWith 用于特定的葡萄酒,如 LaneTannerPinotNoir,可以参考另一种 class,如 RedMeat

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

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

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

想象一下,您正在用蔬菜烹饪辣味烤牛肉。假设您的地窖里有一瓶 Lane Tanner 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 的评论后编辑: 使 ontology 不那么表达,也可以简单地将每种葡萄酒与红肉联系起来(说葡萄酒与所有红肉搭配都很好,就像这样:

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

所有与红肉搭配的葡萄酒都必须这样做。

如果您认为这仍然过于表达,您还可以显式添加所有配对良好的配对 (wine,meal),这从消费者的角度来看是有效的,但等于说 "f**k semantics" 并给发布商带来大量开销。

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

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

还有其他方法可以将个人与 class 联系起来,例如使用 owl:AnnotationProperty 或双关语。但是,这些技术都无法传达您想要的正确语义。