通过标题搜索维基数据SPARQL中的项目,忽略特殊字符,就像常规搜索一样

问题描述 投票:0回答:1

我想通过标题查找一部电影,无论 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-黑暗英雄

请检查查询这里

sparql wikidata
1个回答
0
投票

如果您想要更灵活的搜索,可以使用

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,以便其他子查询可以引用它。

© www.soinside.com 2019 - 2024. All rights reserved.