0

我有一个简单的 notation3 本体

@prefix my: <http://www.codeproject.com/KB/recipes/n3_notation#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .



    my:spec a rdfs:Class.
    my:security a rdfs:Class; rdfs:subClassOf my:spec .

    my:bluetooth a my:security;
    my:preferedby my:BusinessPerson;
    my:name "bluetooth".

我试图定义类spec并将类定义securityspec.

这是我在 dotNetRdf 库的帮助下使用的 sparql 查询

PREFIX my: <http://www.codeproject.com/KB/recipes/n3_notation#>
SELECT ?name
WHERE {
    [ a my:spec;
        my:preferedby my:BusinessPerson;
        my:name ?name].
}";

根据类层次结构,此查询应返回“蓝牙”作为答案,因为security它是spec(据我所知) 的子类。但到目前为止还没有结果。有人可以帮我解决我犯的错误吗?先谢谢了

4

1 回答 1

2

我试图定义类规范并将安全类定义为规范的子类。

我认为你已经正确地完成了这部分。

根据类层次结构,此查询应返回“蓝牙”作为答案,因为安全性是规范的子类(据我所知)。

要推断断言类型为security的实例也是类型spec的实例,您至少需要 RDFS 推理。SPARQL 不直接提供,尽管许多端点和三重存储可能对它有一些支持。但是,可以使用 SPARQL对一些基本形式的推理进行编码,并且您可以让您的查询在这种情况下工作。您只需要调整您的查询(并添加rdfs:前缀)到此:

SELECT ?name WHERE {
    [ a rdfs:subClassOf*/my:spec;
        my:preferedby my:BusinessPerson;
        my:name ?name].
}

这字面意思是你想找到一个类 C 的实例,其中 C 由长度为零或更多的rdfs:subClassOf链接链连接到my:spec。在这种情况下,这意味着任何东西都是securityspec

有关在 SPARQL 中进行 RDFS 和 OWL 推理的更多信息,您可能会发现其中一些问题和答案很有帮助:

于 2015-07-22T13:22:25.520 回答