本体论:如果我可以将 属性 直接分配给个体,为什么还要在 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,后者现在是工作草案。
这道题其实和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,后者现在是工作草案。