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

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


我希望它如下

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


这似乎有些奇怪,因为在大多数情况下,我们需要以其他方式导出,但是在这里,我想将此数据提供给数据挖掘软件。

最佳答案

可选使用

如果您事先知道谓词,则可以将每个谓词包装在OPTIONAL中,以使所有主题的所有谓词都位于同一行中-即使某些谓词缺失。这是一个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

08-25 14:15