RDF 三倍于 table

RDF triples to a table

我有一个带有 RDF 三元组的三元组存储,我想将数据导出到 table,其中列代表谓词。例如,如果我有以下三元组

:s1 :p1 "v11"
:s1 :p2 "v12"
:s2 :p2 "v22"
:s2 :p3 "v23"

我要如下

----|  p1    | p2  | p3
s1  |  v11   | v12 | (null)
s2  | (null) | v22 | v23

这可能看起来有点奇怪,因为在大多数情况下我们需要以其他方式导出,但在这里我想将这些数据输入数据挖掘软件。

使用可选的

如果您事先知道谓词,您可以将每个谓词包装在可选中,以使所有主题的所有谓词都在同一行中 - 即使缺少某些谓词。这是一个 example:

SELECT ?name ?birth ?death
WHERE {
?person foaf:name ?name .
?person dbo:birthPlace :Berlin .
OPTIONAL { ?person dbo:birthDate ?birth . }
OPTIONAL { ?person dbo:deathDate ?death .}
}
ORDER BY ?name
LIMIT 1000

保留原答案供参考:

使用 UNION(为每个谓词创建单独的行)

如果您事先知道谓词,则可以使用 UNION 获取所有主题的所有谓词 - 即使缺少某些谓词。这是一个 example:

SELECT ?name ?birth ?field
WHERE {
?person foaf:name ?name .
?person dbo:birthPlace :Berlin .
{
?person dbo:birthDate ?birth .
} UNION {
?person dbo:field ?field .
}}
ORDER BY ?name
LIMIT 100