在OWL中,是否可以查询没有属性的类?
假设我有一个对象属性 R,并且我想检索所有没有属性 R 的类。另外,假设我已经用闭包关闭了所有类。
我正在尝试这个:
假设有问题的属性是 hasProperty,我的查询是这样的
hasProperty only Nothing
但它不起作用
“没有属性的类”是什么意思?
从语义上讲,一个类是一组个体,一个属性是一组个体对。鉴于这两组,“类有/没有属性”是什么意思?
关于您的示例查询
hasProperty only Nothing
让我们稍微重写一下,以便我们可以用自然语言来思考它。这可以更好地了解此查询的含义。
首先让我们重命名hasProperty
为follows
(或任何英语动词),然后我们有:
follows only Nothing
这在语义上等价于
follows only (not Thing)
这在语义上等同于
not (follows some Thing)
现在我们已经摆脱了only
OWL 中令人困惑的部分,最好避免使用。所以现在我们可以用英语将查询描述为:
those who do not follow anything
或者
who does not follow anything?
或更正式地
which individuals of the ontology are known
not to have a follow relationship to any other individual
例如,如果您的本体声明
John does not follow Mary.
John does not follow himself.
Every individual in the ontology is either John or is Mary.
那么John
将是上述查询的答案。如果要求的限制适用于(命名的)个人组,您还可以获得命名类作为查询答案。在任何情况下,必须满足以下条件:如果您断言答案(或其成员)确实与某个人有follow
关系,那么它将使本体不一致。
OWL 没有任何方法可以查询数据。SPARQL 用于此目的。因此,查找所有不具有属性 :R 的类定义的 SPARQL 查询将是:
SELECT ?cls
WHERE {
?cls a owl:Class .
FILTER NOT EXISTS {?cls :R ?o}
}