直接回答graphdb等效类的sparql select查询?

直接回答graphdb等效类的sparql select查询?,select,sparql,graphdb,Select,Sparql,Graphdb,我在Protege中有一个“equivalento”定义,类equivalento为(hasobjpropsomeclassa)和(has_data_prop正好是1 rdfs:Literal) GraphDB 9.4是否有一种SPARQL查询形式,可以在不必显式收集和遍历所有组成的空白节点的情况下,获得对等价类的select查询的“直接”答案?基本上,我在寻找一条捷径。我不想得到等价类的实例,只想一次得到类定义本身。我试图寻找答案,但我不太清楚可能相关的答案在说什么 我想买一些类似于 (has

我在Protege中有一个“equivalento”定义,类equivalento为(hasobjpropsomeclassa)和(has_data_prop正好是1 rdfs:Literal)

GraphDB 9.4是否有一种SPARQL查询形式,可以在不必显式收集和遍历所有组成的空白节点的情况下,获得对等价类的select查询的“直接”答案?基本上,我在寻找一条捷径。我不想得到等价类的实例,只想一次得到类定义本身。我试图寻找答案,但我不太清楚可能相关的答案在说什么

我想买一些类似于

(hasObjProp some ClassA)和(has_data_prop正好是1 rdfs:Literal)

作为对类的SELECT查询的回答。如果答案是“不可能”,那就足够了。我可以用自己必需的属性编写空白节点遍历。

谢谢

文件是-

本体导入GraphDB:tester.owl
-

从GraphDB中选择所有三元组*排除*推断三元组:测试仪GraphDB sparql选择所有排除推断三元组。tsv
-

从GraphDB中选择所有三元组*包括*推断的三元组:测试仪GraphDB sparql选择所有包括推断的tsv
-

添加了响应@UninformedUser的示例查询。例如,我使用“select*”,但实际上我对“最终结果”感兴趣,即fp、fo、rop、roo。本质上,我在寻找比下面更简单、更简洁的东西。我发布的示例只有一个交集(“and”子句)。在我的真实世界集合中,有多个具有不同数量的“and”子句的等价类

前缀owl:
前缀rdf:
前缀:
选择*其中{
:equivalentClass owl:equivalentClass?bneq。
?bneq?p?bnhead。
?bnhead rdf:第一个?第一个。
?第一个?fp?fo。
?bn3 rdf:休息?休息。
?休息?rp?ro。
?滚翻?滚翻?滚翻。
过滤器(?bn3!=owl:Class&&ro!=rdf:nil)
}

您可以使用属性路径展开列表:

prefix :      <http://www.semanticweb.org/ontologies/2020/9/tester#> 
prefix owl:   <http://www.w3.org/2002/07/owl#> 
prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
prefix xsd:   <http://www.w3.org/2001/XMLSchema#> 
prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> 

select * {
  :EquivClass owl:equivalentClass/owl:intersectionOf/rdf:rest*/rdf:first ?restr.
  ?restr a owl:Restriction .
  optional {?restr owl:onProperty     ?prop}
  optional {?restr owl:cardinality    ?cardinality}
  optional {?restr owl:someValuesFrom ?class}
}

你使用哪种推理模式?我的意思是,如果您使用OWL 2 RL,例如,您的类表达式作为等价类公理的超类部分未被涵盖,请参阅规范:-除
max
之外的类基数限制无论如何都不受支持,并且您使用
确切地
我也不明白为什么需要“空白节点遍历”-这是什么意思?对于查询不需要的实例数据,这只适用于查询模式。还是我遗漏了什么?您还需要
group by
cnt
来获得基数限制,因为我没有查询这个类的实例数据-我想要没有中间空白节点的类定义组件。啊,我明白了。你想要类表达式,或者更好的说法是组成类表达式的所有三元组?这是什么样的查询?我的意思是,它必须是一个
构造
查询,即使这样,我也不明白这在SPARQL中应该是什么样子。我的意思是,只做
select?ce,其中{:owl:equivalentTo?ce}
会很奇怪,或者至少我无法想象
?ce
的绑定会是什么样子。对于
CONSTRUCT
查询也一样,我想这就是您想要的?你想要三元组,对吗?这让我想知道,你如何做空白节点遍历?你能举个例子吗?
prefix :      <http://www.semanticweb.org/ontologies/2020/9/tester#> 
prefix owl:   <http://www.w3.org/2002/07/owl#> 
prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
prefix xsd:   <http://www.w3.org/2001/XMLSchema#> 
prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> 

select * {
  :EquivClass owl:equivalentClass/owl:intersectionOf/rdf:rest*/rdf:first ?restr.
  ?restr a owl:Restriction .
  optional {?restr owl:onProperty     ?prop}
  optional {?restr owl:cardinality    ?cardinality}
  optional {?restr owl:someValuesFrom ?class}
}
|   | restr   | prop           | cardinality                  | class   |
| 1 | _:node3 | :hasObjProp    |                              | :ClassA |
| 2 | _:node5 | :has_data_prop | "1" ^^xsd:nonNegativeInteger |         |