如何在protege中使用cardinality约束来链接一个类和一个实例?

问题描述 投票:0回答:1

例如,A类的所有个体只能在一个位置B--一个实例上使用。我想把'A类'在(onlyexact 1)[位置B]使用。但是这个约束似乎只能在类之间保持。如何才能做到不创建一个 "位置B "这个实例的空类?

谢谢。

owl protege cardinality
1个回答
0
投票

如果你想说,所有类的实例 A 位于实例 B 而且只在 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这样的知识表示语言(它描述的是世界如何被 ).

© www.soinside.com 2019 - 2024. All rights reserved.