此问题实际上与this one相同。上面的答案回答了问题“财产限制和财产声明之间有什么区别?”但在我看来,它没有回答(OP的)问题:
为什么我要使用属性限制?
让我们说
Every man likes a woman. (i.e. "man subClassOf like some woman")
除了分配likes
属性之外,还有什么用途,例如like some {Mary}
,对每一个(男性)个人(无论如何,如果我做了财产限制,我必须做什么)。
目前我正在构建一个基本的本体,但是在创建这些类之后,我不确定当我将这些属性限制放在它上面时,我获得了什么样的优势。因为,通过例如
获取个人SELECT ?subject ?likes
WHERE {
?subject rdfs:subClassOf :man;
:like ?likes .
}
会告诉我数据是否有PropertyRestriction
或者没有(可能这个假设不正确)。
也许一个小例子可以帮助我理解我可以用它做什么。
答案 0 :(得分:1)
这是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
属性不是woman
的成员,那么该个人无法满足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
的成员返回一组三元组(而不是在匹配中选择变量绑定)。
回到最初的问题“为什么要使用财产限制?”。如果要根据此响应中的第一段进行分类,请使用这些。 OWL擅长这种分类。否则,值得研究基于SPARQL的解决方案。
答案 1 :(得分:0)
在没有个人时,了解存在性限制是有用的。根据您的需要,这可能是不必要的。