1

您无法使用SPARQL 1.1CONSTRUCT查询中指定GRAPH

CONSTRUCT {
  GRAPH <graph:1> { ?s rdf:type ?o . }
}
WHERE {
  GRAPH <graph:1> { ?s rdf:type ?o . }
  VALUES (?o) { (<class:1>) (<class:2>) }
}
  • 我将上面的查询称为GRAPH CONSTRUCT查询

我的想法是可以通过将GRAPH CONSTRUCT查询转换为SELECT查询来获得预期的结果。我们通常期望一个长度为 4 的数组表示一个 RDF 四边形,因此能够使用GRAPH进行CONSTRUCT会很有帮助。

转换的过程意义不大,考虑到所有极端情况,我对从GRAPH CONSTRUCT查询到SELECT查询的结果格式更感兴趣。

我也很感激一个答案,它解释了为什么使用SELECT查询很难做到这一点。


问题

考虑到所有极端情况,如何针对GRAPH CONSTRUCT查询格式化SELECT查询?

我们将假设SELECT查询结果将大致转换为如下所示的GRAPH CONSTRUCT结果,但我们不会担心被跟踪变量的格式或此转换的过程。

// Variables which are tracked to construct quads
const tracked = { "?V0": ["?s", "?V1", "?o"] };

// 'constructQuery' is converted to 'selectQuery'
const selectQuery = convertGraphConstructToSelect(constructQuery);

// SPARQL is executed on 'selectQuery'
const result = executeSparql(selectQuery);

// Returns expected result of GRAPH CONSTRUCT
const quads = constructFromSelect(tracked, result);
  • 伪代码粗略表示获取GRAPH CONSTRUCT结果的过程

示例答案

(参考顶部的GRAPH CONSTRUCT查询)

SELECT ?V0 ?s ?V1 ?o
WHERE {
  GRAPH ?V0 { ?s ?V1 ?o . }
  VALUES (?o) { (<class:1>) (<class:2>) }
  VALUES (?V0 ?V1) { (<graph:1> rdf:type) }
}
  • GRAPH CONSTRUCT中的所有文字都转换为唯一变量
  • WHERE中转换的文字的每个实例都转换为那些唯一的变量名称。
  • VALUES块被添加到WHERE的末尾,它表示所有转换后的文字
4

0 回答 0