我有一个简单的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,并将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].
}";根据类层次结构,这个查询应该返回'bluetooth‘作为答案,因为security是spec的子类(据我所知)。但到目前为止还没有结果。有人能帮我解决我犯错的地方吗?在进阶时谢谢
发布于 2015-07-22 21:22:26
我正在尝试定义类规范,并将安全类定义为规范的子类。
我认为你已经正确地完成了这一部分。
根据类层次结构,这个查询应该返回'bluetooth‘作为答案,因为安全性是规范的子类(据我所知)。
要推断被断言为安全类型的实例也是规范类型的实例,您至少需要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推理的更多信息,您可能会发现其中一些问题和答案很有帮助:
https://stackoverflow.com/questions/31561169
复制相似问题