首页 > 解决方案 > 如何使用基数约束将类链接到 protege 中的实例?

问题描述

例如,来自 A 类的所有个体只能在一个位置 B 使用——一个实例。我想在(仅/确切的 1)[位置 B] 使用“A 类”。但似乎这种约束只能在类之间进行。如何在不创建实例“位置 B”的空类的情况下做到这一点?

谢谢。

标签: owlprotegecardinality

解决方案


如果您想说类的所有实例A都位于 instanceB且仅位于B,您可以使用以下方法(Turtle 语法):

:A  a  owl:Class;
  rdfs:subClassOf  [
    a  owl:Restriction;
    owl:allValuesFrom  [
      a  owl:Class;
      owl:oneOf  ( :B )
    ]
  ], [
    a  owl:Restriction;
    owl:onProperty  :location;
    owl:hasValue  :B
  ] .

但是请注意,被命名的事物B可能有其他名称,所以如果您知道:

:x  a  :A;
   :location  :C, :D .

那么你可以得出结论CD是名为 的事物的另外两个名称B。如果您希望将其检测为错误或错误,您可以明确说明CD命名不同的东西B

:B  owl:differentFrom  :C, :D .

或者您可以使用 SHACL 之类的约束语言,或者您可以依赖唯一名称假设 (UNA) 进行推理过程(但是,标准 OWL 不会生成 UNA,因此您不能期望外部数据符合此假设)。

还要注意,如果您想描述对数据的约束,例如当某个实体已知是 的实例时,A那么在数据中必须有它所在的语句B,您需要使用像 SHACL 这样的约束语言(描述应该如何塑造数据),而不是像 OWL 这样的知识表示语言(描述世界怎样的)。


推荐阅读