Rdf 如何在Sparql中查询具有对象属性的类

Rdf 如何在Sparql中查询具有对象属性的类,rdf,sparql,ontology,owl,rdfs,Rdf,Sparql,Ontology,Owl,Rdfs,有人知道如何在Sparql中查询具有对象属性的类吗? 假设我们有一个包含以下内容的OWL文件 Human ----(hasPizza)---> Pizzas 人和比萨饼是类(或概念)。在SPARQL中,此查询不返回任何内容: select ?x ?y where { ?x hasPizza ?y } 但如果我在这些概念下添加两个个体(或实体),如 Human:Jim ----(hasPizza)---> Pizzas:cheesePizza 该查询将返回?x=Jim和?y=

有人知道如何在Sparql中查询具有对象属性的类吗? 假设我们有一个包含以下内容的OWL文件

Human ----(hasPizza)---> Pizzas
人和比萨饼是类(或概念)。在SPARQL中,此查询不返回任何内容:

select ?x ?y where {
  ?x hasPizza ?y
}
但如果我在这些概念下添加两个个体(或实体),如

Human:Jim ----(hasPizza)---> Pizzas:cheesePizza
该查询将返回
?x=Jim
?y=cheesePizza
如何使用SPARQL获取
?x=Human
?y=Pizza
?给定的数据(以RDF/XML格式):


或者同样,在可读性更强的海龟中:

@前缀:。
@前缀rdfs:。
@前缀pizzas:。
@前缀owl:。
@前缀xsd:。
@前缀rdf:。
比萨饼:吉姆
比萨饼:人,猫头鹰:名字是个人;
比萨:比萨比萨:奶酪比萨。
比萨饼:比萨饼
猫头鹰:对象属性;
rdfs:域pizzas:人类;
rdfs:系列披萨:披萨。
比萨饼:人类
猫头鹰:上课。
比萨饼:比萨饼
猫头鹰:上课。
猫头鹰:本体论。
比萨:芝士比萨
披萨:披萨,猫头鹰:名字是个人。
请注意,断言
Jim hassepizza chiesepizza
在图中是一个三元组。
hasPizza
对象属性的域和范围公理是两个三元组:
hasPizza-rdfs:domain-Human
hasPizza-rdfs:range-Pizza
。SPARQL查询将查询模式与图中的三元组相匹配。因此,从以下查询:

前缀:
选择?x?y,其中{
有比萨饼吗
}
您将获得以下结果:

$arq--data pizzas.ttl--query query.sparql
-----------------------
|x | y|
=======================
|:吉姆:芝士比扎|
-----------------------
因为图中有一个三元组,其谓词是
:hasPizza
,该三元组的主语是
:Jim
,宾语是
:CheesePizza
。听起来您实际上是在询问
:hasPizza
属性的域和范围,这些属性也很容易检索。使用如下查询:

前缀:
前缀rdfs:
选择?域?范围,其中{
:rdfs:domain?domain;
范围?范围。
}
您将得到如下结果:

$arq--data pizzas.ttl--query query.sparql
-------------------
|域|范围|
===================
|:人类:披萨|
-------------------

能否发布本体的RDF版本?在OWL中,类不是由属性直接链接的,它通常是通过存在约束公理来实现的。因此,打开本体的RDF版本并查看构造;然后,您可以尝试将其与SPARQL查询匹配。听起来更有可能是您有一个对象属性
hasPizza
,其中rdfs:domain和rdfs:range分别是
Human
Pizzas
。虽然搜索起来也相对容易,但这是一项独特的任务。