如何使用SPARQL查询获得IRI之间或某个rdf:type的两个节点之间的路径?

问题描述 投票:0回答:1

[尝试使用rdf4j控制台针对sparql端点执行查询,以使用属性通配符但不走运找到2个节点之间的路径。第一个查询给出错误为

格式错误的查询:不是有效(绝对)的IRI:

第二个查询使控制台崩溃。我应该尝试以其他方式使用查询来查询端点,因为这可能是rdf4j问题,或者查询本身是否错误?

PREFIX xy: <http://mainuri/>

select
*

where

{

  <http://uriOfInstanceOfData> ((<>|!<>)|^(<>|!<>))* ?x .
  ?x ?p ?o .
  ?o ((<>|!<>)|^(<>|!<>))* <http://uriOfInstanceOfData>.
  }

AND

PREFIX xy: <http://mainuri/>

select
*

where

{

  <http://uriOfInstanceOfData> (xy:|!xy:)* ?x .
  ?x ?p ?o .
  ?o (xy:|!xy:)* <http://uriOfInstanceOfData>.
  }
sparql rdf semantic-web rdf4j
1个回答
0
投票

第一个查询在语法上不正确:<>不是有效的IRI参考。 SPARQL语法允许使用空字符串,但是规范还指出,任何IRI引用都必须是有效RFC3987 IRI中(在转义处理结果之后)的字符串。由于IRI至少需要一个方案标识符,因此根据定义,空字符串可以不是有效的IRI。

当我在一个小的测试数据集上尝试第二个查询时,它将起作用。但是,处理可能非常昂贵。

EDIT我实际尝试过的查询:

PREFIX xy: <http://mainuri/>
select
*
where
{
  rdfs:domain (xy:|!xy:)* ?x .
  ?x ?p ?o .
  ?o (xy:|!xy:)* rdf:Property.
}

在启用了基本RDFS推理的本地内存数据库中,将得到以下结果:

Evaluating SPARQL query...
+------------------------+------------------------+------------------------+
| x                      | p                      | o                      |
+------------------------+------------------------+------------------------+
| rdfs:domain            | rdf:type               | rdf:Property           |
| rdfs:domain            | rdfs:domain            | rdf:Property           |
+------------------------+------------------------+------------------------+
2 result(s) (28 ms)
© www.soinside.com 2019 - 2024. All rights reserved.