我想通过标题查找一部电影,无论 wiki 中是否有特殊字符。
例如我正在搜索“Guyver Dark Hero”电影。
维基百科将其命名为“Guyver:黑暗英雄”。
当我使用此查询时,它找不到任何东西:
SELECT * WHERE {
SERVICE wikibase:mwapi {
bd:serviceParam wikibase:api "EntitySearch" .
bd:serviceParam wikibase:endpoint "www.wikidata.org" .
bd:serviceParam mwapi:search "Guyver Dark Hero" .
bd:serviceParam mwapi:language "en" .
?item wikibase:apiOutputItem mwapi:item .
}
{
?item wdt:P31 wd:Q11424;
rdfs:label ?itemLabel.
}
}
LIMIT 1
但是如果我搜索“Guyver:黑暗英雄”,就会找到该项目。
我怎样才能只搜索任何应该匹配的文本?
喜欢的人:
盖弗黑暗英雄
盖弗 - 黑暗英雄
Guyver-黑暗英雄
请检查查询这里。
如果您想要更灵活的搜索,可以使用
Search
服务代替 EntitySearch
(请参阅MWAPI § 支持的服务):
SELECT * WHERE {
SERVICE wikibase:mwapi {
bd:serviceParam wikibase:api "Search" .
bd:serviceParam wikibase:endpoint "www.wikidata.org" .
bd:serviceParam mwapi:srsearch "Guyver Dark Hero" .
bd:serviceParam mwapi:language "en" .
?itemId wikibase:apiOutput mwapi:title .
}
BIND(URI(CONCAT(STR(wd:),?itemId)) AS ?item)
{
?item wdt:P31 wd:Q11424;
rdfs:label ?itemLabel.
}
}
LIMIT 1
该服务的输出是一个页面标题(在 Wikidata 上只是一个项目 ID),我将其转换为 URI,以便其他子查询可以引用它。