dbpedia,可选标签麻烦

Dbpedia, optional tag trouble

我无法将可选标记添加到某些属性可能不存在的 return 行。例如在下面的查询中我 return 一些关于 MMA 战士 Lyoto Machida http://goo.gl/cWFk9N

的信息
SELECT ?surname ?givenName ?nick ?height ?born ?nationality ?birthplace

where {
  <http://dbpedia.org/resource/Lyoto_Machida>   
 foaf:surname ?surname ;
 foaf:givenName ?givenName ;
 dbp:otherNames ?nick ;
 dbo:height ?height ;
 dbp:birthDate ?born ;
 dbp:nationality ?nationality ; 
 dbp:birthPlace ?birthplace  
}

现在,如果我想使用相同的查询,除了 MMA 选手 Luke Rockhold,我将得不到任何结果。这是因为他没有列出的国籍或其他姓名。所以我尝试在所有属性周围使用可选标签,但这仍然不起作用。

SELECT ?surname ?givenName ?nick ?height ?born ?nationality ?birthplace

where {
  <http://dbpedia.org/resource/Luke_Rockhold>   
 OPTIONAL {foaf:surname ?surname ;}
 OPTIONAL {foaf:givenName ?givenName ;}
 OPTIONAL {dbp:otherNames ?nick ;}
 OPTIONAL {dbo:height ?height ;}
 OPTIONAL {dbp:birthDate ?born ;}
 OPTIONAL {dbp:nationality ?nationality ; }
 OPTIONAL {dbp:birthPlace ?birthplace  }
}

我的语法或逻辑有错误吗?我对使用 sparql 和 dbpedia 很陌生,非常感谢任何帮助

你不能像这样用 OPTIONAL 拆分单个模式。 OPTIONAL 外部和内部的部分必须是它们自己的有效模式。一种方法是使用 BIND:

SELECT ?surname ?givenName ?nick ?height ?born ?nationality ?birthplace
WHERE {
 BIND(:Luke_Rockhold AS ?x)
 OPTIONAL {?x foaf:surname ?surname}
 OPTIONAL {?x foaf:givenName ?givenName}
 OPTIONAL {?x dbp:otherNames ?nick}
 OPTIONAL {?x dbo:height ?height}
 OPTIONAL {?x dbp:birthDate ?born}
 OPTIONAL {?x dbp:nationality ?nationality}
 OPTIONAL {?x dbp:birthPlace ?birthplace}
}