您无法使用SPARQL 1.1在CONSTRUCT查询中指定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的末尾,它表示所有转换后的文字