使用可选
如果您事先知道谓词,则可以将每个谓词包装在 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