本体论:如果我可以将 属性 直接分配给个体,为什么还要在 class 上定义对象限制?

Ontologies: Why should I define object restrictions on a class if I can assign a property directly to the individual?

这道题其实和this one是一样的。上面的答案回答了问题 "What is the difference between Property Restriction and Property Assertion?" 但在我看来它没有回答问题(OP):

Why should I use Property Restrictions at all?

假设

Every man likes a woman. (i.e. "man subClassOf like some woman")

除了分配 likes 属性,这还有什么用,例如like some {Mary},对每个(男人)个人(如果我执行 属性 限制,无论如何我必须做的)。

目前我正在构建一个基本的 ontology,但是在创建 类 之后,我不确定当我对它施加那些 属性 限制时我得到了什么优势。因为,通过例如

获取个人
SELECT ?subject ?likes
WHERE { 
   ?subject rdfs:subClassOf :man;
             :like ?likes .
}

无论我是否有这个 PropertyRestriction 都会给我数据(也许这个假设不正确)。

也许一个小例子可以帮助我理解它的用途。

当没有个体时,知道存在限制是有用的。根据您的需要,这可能是不必要的。

这是 OWL 有点违反直觉的地方之一。 属性限制用于分类。例如,给定断言 "man subClassOf like some woman",您可以发现具有 like 属性 的某个对象和属于 woman 的对象是 man .

我怀疑您要查找的内容有些相反:man 的所有成员是否都有 likes 属性 是 woman 的成员?这是 OWL 不太擅长回答的问题,主要是因为 Open-World Assumption。但是,如果您想在 RDF 中执行此操作,使用 SPARQL 查询数据,则相对容易:

SELECT ?subject
WHERE {
   ?subject a :Man .
   FILTER NOT EXISTS {
      ?subject :likes ?woman .
      ?woman a :Woman .
   }
}

这基本上说明了如果 man 的成员既没有 likes 属性 也没有 likes 属性 不是 [= 的成员15=],则此人不符合every many likes a woman标准。请注意,这里不需要子类化。 man的成员使用likes属性来指定个人。再次遵循参考示例,RDF 规范将是:

:John :likes :Mary .
:Mary a :Woman .
:John a :Man .

其中 Turtle 语法允许 a 代替 rdf:type

另请注意,您仍然可以推断出 man 的成员资格:

CONSTRUCT {
   ?subject a :Man .
}
WHERE {
   ?subject :likes ?object .
   ?object a :Woman .
   FILTER NOT EXISTS {
      ?subject a :Man .
   }
}

...这表明如果一个人还不是 man 的成员并且有一个 likes 属性 是 man 的成员,我们通过返回一组三元组(与在匹配中选择变量绑定相反)推断个体是 man 的成员。

所以回到"Why use property restrictions?"的原始问题。如果您想根据此回复的第一段进行分类,请使用这些。 OWL 擅长这种分类。否则,值得研究基于 SPARQL 的解决方案。

作为参考,一些基于 SPARQL 的 W3C 提案已经存在了一段时间 - 看看 SPIN and SHACL,后者现在是工作草案。