Notation3的类层次结构

时间:2015-07-22 10:57:49

标签: class sparql dotnetrdf n3

我有一个简单的符号3本体

@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并将security类定义为spec的子类。

这是我在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].
}";

根据类层次结构,此查询应返回&#39; bluetooth&#39;作为答案,因为securityspec的子类(据我所知)。但到目前为止没有结果。我可以帮助我解决这个问题吗?谢谢先进

1 个答案:

答案 0 :(得分:2)

  

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

我认为您已正确完成此部分。

  

根据类层次结构,此查询应返回&#39; bluetooth&#39;作为答案,因为安全性是规范的子类(据我所知)。

要推断声明为安全性类型的实例也是 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 。在这种情况下,这意味着所有内容都是安全规范

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