我有一个简单的符号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;作为答案,因为security
是spec
的子类(据我所知)。但到目前为止没有结果。我可以帮助我解决这个问题吗?谢谢先进
答案 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推理的更多信息,您可能会发现其中一些问题和答案有用: