Sparql 如何创建两个owl:class的owl:intersection?

Sparql 如何创建两个owl:class的owl:intersection?,sparql,rdf,owl,rdfs,Sparql,Rdf,Owl,Rdfs,对于学校练习,我有一个RDF文件和一个OWL文件 有一个owl:Class讲师和一个owl:Class研究员。两者的交叉点应该是教授。我已经把我的RDF和OWL文件放在下面了 问题是:当我进行查询时,没有任何资源是Professor类型的,而在RDF文件中,我们可以看到Laura应该是Professor rdf文件的简化版本: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE rdf:RDF [ <!ENTITY human

对于学校练习,我有一个RDF文件和一个OWL文件

有一个
owl:Class讲师
和一个
owl:Class研究员
。两者的交叉点应该是教授。我已经把我的RDF和OWL文件放在下面了

问题是:当我进行查询时,没有任何资源是Professor类型的,而在RDF文件中,我们可以看到Laura应该是Professor

rdf文件的简化版本:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rdf:RDF [
<!ENTITY humans   "http://www.inria.fr/2007/09/11/humans.rdfs"> 
<!ENTITY xsd      "http://www.w3.org/2001/XMLSchema#"> ]> 
<rdf:RDF  
   xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
   xmlns:xsd ="&xsd;" 
   xmlns     ="&humans;#" 
   xml:base  ="&humans;-instances" > 
    <Person rdf:ID="Laura">
        <name>Laura</name>
    </Person>
    <Lecturer rdf:about="#Laura"/>
    <Researcher rdf:about="#Laura">
      <name>Laura</name>
    </Researcher>
</rdf:RDF>
但我实际上希望做的是:

select * where {
   ?x a <http://www.inria.fr/2007/09/11/humans.rdfs#Professor>
}
选择*where{
?x a
}
我确实看到了这个答案:但我不明白它应该以何种方式用于我的具体问题

我希望有人能帮忙。顺便说一句,这是我在这里的第一篇文章,所以如果有什么遗漏,请告诉我。

转述自@:


使用
rdf:ID
(而不是
rdf:ID
)的正确大小写,并在将rdf加载到GraphDB中时启用“OWL Max”推理。

我希望您理解SPARQL主要只在rdf上进行三重模式匹配。您的数据不包含任何在三元组(resp.OWL class assertion axiom)中使用的个体,这些个体声明它属于类
Professor
。任何超出三重匹配的内容都需要所谓的推理,即推断隐式数据。要么使用支持推理的SPARQL引擎,要么使用DL查询等其他查询机制。注意,这两个都是完全不同的。谢谢你的回答@AKSW确实我的rdf数据没有说资源分配给教授。但它确实说明了资源是讲师和研究员。因此,除了rdf数据之外,使用owl模式(它指定教授是讲师和研究人员),我认为我应该能够对所有教授进行查询,并且仍然可以检索我的资源(Laura)。我正在使用Corese SPARQL引擎()。你是说这种方法是不可能的吗?用
代替
。我已经用“OWL Max”推理将您的RDF文件加载到GraphDB triplestore中,Laura真的是一位教授。@StanislavKralin您的答案包含解决方案:我不知道查询引擎包含多种推理类型的选项。谢谢!
 select * where {
   ?x ?p ?y
 }
select * where {
   ?x a <http://www.inria.fr/2007/09/11/humans.rdfs#Professor>
}