Dbpedia,可选标签麻烦

时间:2016-02-14 13:12:13

标签: sparql wikipedia dbpedia

我无法让可选标记返回某些属性可能不存在的行。例如,在以下查询中,我返回有关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的新手,非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

您不能将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}
}