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}
}
我无法将可选标记添加到某些属性可能不存在的 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}
}