[尝试使用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>.
}
第一个查询在语法上不正确:<>
不是有效的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)