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

时间:2015-07-19 04:30:37

标签: sparql owl ontology

此问题实际上与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或者没有(可能这个假设不正确)。

也许一个小例子可以帮助我理解我可以用它做什么。

2 个答案:

答案 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的解决方案。

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

答案 1 :(得分:0)

在没有个人时,了解存在性限制是有用的。根据您的需要,这可能是不必要的。