3

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

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

我希望它如下

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

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

4

1 回答 1

3

使用可选

如果您事先知道谓词,则可以将每个谓词包装在 OPTIONAL 中,以获取所有主题的同一行中的所有谓词 - 即使有些谓词丢失。这是一个例子

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 来获取所有主题的所有谓词 - 即使缺少一些谓词。这是一个例子

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
于 2016-12-23T19:32:08.213 回答