Rdf 从OWL中获取代表性类;或;类表达式

Rdf 从OWL中获取代表性类;或;类表达式,rdf,owl,owl-api,reasoning,dlquery,Rdf,Owl,Owl Api,Reasoning,Dlquery,我有三类:爬行动物,哺乳动物和猫,其中猫是哺乳动物的一个子类 我有一个“或”类表达式: Reptile or Mammal or Cat 对于任何给定的“或”类表达式,我如何用推理机推断出最具代表性的类?就像在这种情况下,它们是爬行动物和哺乳动物,似乎getdirectsubclass(youroexpression)给了你想要的答案。似乎getdirectsubclass(youroexpression)给了你想要的答案。另一种方法:给定一个析取,生成比原始元素少一个元素的所有析取,并检查它

我有三类:
爬行动物
哺乳动物
,其中
哺乳动物
的一个子类

我有一个“或”类表达式:

Reptile or Mammal or Cat

对于任何给定的“或”类表达式,我如何用推理机推断出最具代表性的类?就像在这种情况下,它们是爬行动物和哺乳动物,似乎
getdirectsubclass(youroexpression)
给了你想要的答案。

似乎
getdirectsubclass(youroexpression)
给了你想要的答案。

另一种方法:给定一个析取,生成比原始元素少一个元素的所有析取,并检查它们是否相等。如果为true,则被删除的元素是“冗余的”——或者是析取中另一个类的子类,或者包含在两个或多个元素的析取中(因此被其他元素覆盖)

这同样适用于连词


您可以重复此过程-如果不使新表达式与旧表达式不相等,则无法删除任何元素时,此过程将终止。

另一种方法:给定一个析取,生成比原始表达式少一个元素的所有析取,并检查它们是否相等。如果为true,则被删除的元素是“冗余的”——或者是析取中另一个类的子类,或者包含在两个或多个元素的析取中(因此被其他元素覆盖)

这同样适用于连词


您可以重复此过程-如果不使新表达式与旧表达式不相等,就无法删除任何元素,则此过程将终止。

如何定义“代表性”?@AKSW I的意思是超类,例如
爬行动物
哺乳动物
类可以表示表达式
爬行动物或哺乳动物或猫[or]
。我指的不仅仅是它们的直接子类,而是它们的所有子类。你如何定义“代表性”@AKSW我指的是超类,例如
爬虫类
哺乳类
类可以代表
爬虫类或哺乳类或猫类[or]
。我指的不仅仅是它们的直接子类,而是它们的所有子类。因此我有两种情况:第一种是
表达式,我可以使用
getdirectsubclass
。另一个问题是,当表达式仅包含一个类时,我应该使用哪种方法在表达式中获取该类?@MiP您应该(在问题中)提供一个完整的示例,说明您所期望的(包括分类法中具有多个级别的情况)。我真的不知道你想要什么,为什么不验证Dmitry Tsarkov的答案。@MiP确实,如果你提供一个查询示例和预期结果,这会有所帮助。第二种情况我不清楚。如果有一个
表达式只有一个参数(顺便说一句,不是合法的OWL2),这是一个命名类,那么您将收到该参数作为结果。然后可以对该类的定义应用相同的过程。只有一个类的表达式不是“and”或“or”。OWL规范说这样的构造需要两个或更多的元素。@DmitryTsarkov对于新的潜伏者,正确的答案是
OWLReasoner::getSubclass(orClassExpression,true)
。因此我有两种情况:第一种是
表达式,我可以使用
getDirectSubclass
。另一个问题是,当表达式仅包含一个类时,我应该使用哪种方法在表达式中获取该类?@MiP您应该(在问题中)提供一个完整的示例,说明您所期望的(包括分类法中具有多个级别的情况)。我真的不知道你想要什么,为什么不验证Dmitry Tsarkov的答案。@MiP确实,如果你提供一个查询示例和预期结果,这会有所帮助。第二种情况我不清楚。如果有一个
表达式只有一个参数(顺便说一句,不是合法的OWL2),这是一个命名类,那么您将收到该参数作为结果。然后可以对该类的定义应用相同的过程。只有一个类的表达式不是“and”或“or”。OWL规范说这样的构造需要两个或更多的元素。@DmitryTsarkov对于新的潜伏者,正确的答案是
OWLReasoner::getSubclass(orClassExpression,true)