10

给定一个像Wikipedia: Stack Overflow这样的 Wikipedia 页面,通常会有信息框(主要位于页面顶部的右侧)。示例截图:

维基百科上的 Stackoverflow 信息框

  1. DBPedia 将所有这些属性列为 RDF 三元组。您可以在DBPedia 上查看示例:Stack Overflow。在那里,您会看到具有有趣dbpprop:wikiPageUsesTemplate价值的属性。dbpedia:Template:Infobox_website我想知道哪些维基百科页面使用了这个模板。我该如何做到这一点并列出所有使用 Infobox_website 模板的页面?最好使用 SPARQL 查询,但我愿意接受其他简单的解决方案。

  2. 接下来是所有信息框模板的列表。Wikipedia: Category Infobox Templates显示了所需的 Wikipedia 类别的层次结构 - 这看起来就像我正在寻找的。但我希望所有这些都是机器可读的格式,在一页上。也许DBPedia在这里也是正确的?在DBPedia:类别 Infox 模板DBPedia:INFOBOX ,我发现的信息很少。但这些看起来很有希望。如何使用 SPARQL 查找所有信息框类型,以便我可以为每个类型重复执行第 1 步?

您可以使用它来测试 SPARQL 查询:http ://dbpedia.org/snorql/

更新 1

我似乎已经解决了问题 1:SPARQL: list all pages with Infobox_website

更新 2

此外,这似乎是问题编号 2 的查询:SPARQL: list all Infoboxes

4

3 回答 3

8

好的,因为我似乎找到了解决方案(很可能不是最好的),所以我想分享它们。

1) 此 SPARQL 查询可用于查找包含特定信息框类型的所有页面:

选择 * WHERE { ?page dbpedia2:wikiPageUsesTemplate <http://dbpedia.org/resource/Template:Infobox_website> 。?page dbpedia2:name ?name 。}

SNORQL 的链接


2) 此 SPARQL 查询可用于查找所有 Infobox 类型:

SELECT DISTINCT ?template WHERE { ?page dbpedia2:wikiPageUsesTemplate ?template 。过滤器(正则表达式(?模板,“信息框”))。} ORDER BY ? 模板

SNORQL 的链接

于 2011-11-04T05:04:30.110 回答
2

以前的答案似乎已经停止工作。不过,只需稍作改动即可让它们在http://live.dbpedia.org/sparql的新 dbpedia 查询端点上工作。

要获取所有页面和他们使用此查询的模板的列表,请执行以下操作:

SELECT * WHERE {  ?page  dbpprop:wikiPageUsesTemplate ?template . }

查看结果(限 100 个)

如果您正在寻找特定模板:

SELECT * WHERE {  
   ?page  
   dbpprop:wikiPageUsesTemplate 
   <http://dbpedia.org/resource/Template:Infobox_website> . 
}

查看结果

对于我的用例,我对 Wikipedia URL 而不是 DBPedia 页面感兴趣,所以我使用这个查询:

SELECT ?wikipedia_url WHERE {  
   ?page  
   dbpprop:wikiPageUsesTemplate 
   <http://dbpedia.org/resource/Template:Infobox_website> . 
   ?page foaf:isPrimaryTopicOf ?wikipedia_url .
}

查看结果

我还curl用来将结果提取到脚本中:

$ curl -s "http://live.dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=SELECT+%3Fwikipedia_url+WHERE+%7B+%0D%0A%09+%3Fpage+%0D%0A%09+dbpprop%3AwikiPageUsesTemplate+%0D%0A%09+%3Chttp%3A%2F%2Fdbpedia.org%2Fresource%2FTemplate%3AInfobox_website%3E+.+%0D%0A+%3Fpage+foaf%3AisPrimaryTopicOf+%3Fwikipedia_url+.%0D%0A%0D%0A%09%7D&format=text%2Ftab-separated-values" \
| tr -d \" | grep -v "^wikipedia_url$" | head
http://en.wikipedia.org/wiki/U.S._News_&_World_Report
http://en.wikipedia.org/wiki/FriendFinder
http://en.wikipedia.org/wiki/Debkafile
http://en.wikipedia.org/wiki/GTPlanet
http://en.wikipedia.org/wiki/Lithuanian_Wikipedia
http://en.wikipedia.org/wiki/Connexions
http://en.wikipedia.org/wiki/Hypno5ive
http://en.wikipedia.org/wiki/Scoop_(website)
http://en.wikipedia.org/wiki/Bhoomi_(software)
http://en.wikipedia.org/wiki/Brainwashed_(website)

我不确定这是否给出了完整的结果集,因为它返回 1698 个结果,而wmflabs.org似乎建议应该有 4439 个。


对于您问题的第二部分,只需对上一个查询进行少量更改即可获取所有模板的列表:

SELECT DISTINCT ?template WHERE { 
    ?page  
    dbpprop:wikiPageUsesTemplate  
    ?template . 
    FILTER (regex(?template, "Infobox")) . 
} ORDER BY ?template

查看结果

于 2015-08-13T16:50:18.627 回答
1

您还可以使用 MediaWiki API 的嵌入查询来返回包含给定模板的所有页面的列表。你会想要使用一个库来访问 API,你更喜欢哪种语言?对于 Ruby,我建议MediaWiki::Gateway

于 2011-11-04T00:03:05.280 回答