我正在寻找一种简单的方法来从用户从Freebase建议选择大学后从维基百科信息框获取有关大学(name,native_name,city等)的数据。但是,从freebase返回的数据集非常小,不幸的是不包括维基百科链接。
目前我正在使用“name”属性并向http://live.dbpedia.org/data/"+name+".json
发出ajax请求。这通常有效,但在进行一些测试时,结果显示名称并不总是直接映射到正确的页面。让我把我的问题分成几个,以使自己明确:
是否可以配置Freebase建议插件以便 响应包括维基百科链接?
OR是否有一个类似的插件直接查询DBpedia并且是 像Freebase的简单和用户友好?
或者,作为计划B,有一种方法可以发送请求 “live.dbpedia.org”这样它只会让我回到json之后 重定向?在维基百科API上,我可以发送一个“重定向”变量来执行此操作。但是我必须自己解析数据......
计划B的问题在于,没有任何保证freebase对象的名称会引导我进入正确的维基百科页面。即使在重定向后......
我发誓我已经阅读了很多API文档,但是一切都非常令人困惑,我选择不阅读有关RDF,SPARQL和MQL的长篇教程,因为我真的不认为解决方案应该如此复杂。我在这里问,因为我真的希望我错过了一个简单的解决方案......
更新
{
id: "/en/babes-bolyai_university",
lang: "en",
mid: "/m/08c4bf",
name: "Babeş-Bolyai University",
notable: {
id: "/education/university",
name: "College/University"
},
score: 37.733559
}
这是我在推荐小工具中选择“Babeş-Bolyai大学”后得到的结果。
解
我假设我无法配置Suggest小部件以返回更多数据,因此在获取对象的Freebase ID之后,我只发送另一个请求,这次使用查询专门询问Wikipedia ID。我不知道任何MQL,也找不到维基百科ID的Freebase字段的名称。也许我很愚蠢,但Freebase文档确实让我很困惑。在任何情况下,Tom Morris的回答和this question帮助我构建了返回我想要的查询:
https://www.googleapis.com/freebase/v1/mqlread?query={"id":"/en/babes-bolyai_university","key":{"namespace":"/wikipedia/en_title","value":null}}
结果中的字符串带有特殊unicode字符的数字代码(在我的例子中为Babe$0219-Bolyai_University
)。我已经能够用String.fromCharCode(parseInt(219, 16))
转换代码但是如果有人知道转换整个字符串的方法会有所帮助。否则,我可以使用相应的字符替换“$ dddd”模式。
感谢您的帮助!
答案 0 :(得分:0)
据我所知,没有与Freebase Suggest相当的DBpedia自动提示。
通过使用output
参数中的MQL表达式,可以使用Suggest检索Freebase中的任何内容。对于简单的事情,例如名称,别名,MQL基本上只是一个包含相关属性名称的JSON片段。
编辑:output
参数实际上似乎没有在Suggest的上下文中记录,但任何不是Suggest参数的内容都会透明地传递给Freebase Search API,因此您可以全部使用这里描述的内容:https://developers.google.com/freebase/v1/search-output您可以根据每个建议的要求获得尽可能多的信息。
如果确实需要查询DBpedia,则应使用Wikipedia / DBpedia密钥,该密钥不一定与名称相同。对于英语维基百科,关键是在命名空间/wikipedia/en
中,或者如果你想在命名空间`/ wikipedia / en_id'中使用数字维基百科ID。如果要查询其他语言维基百科,请将“en”替换为相应的语言代码。这些键有一些非ASCII字符转义,所以如果您需要取消它们,可以使用以下文档:http://wiki.freebase.com/wiki/MQL_key_escaping
答案 1 :(得分:0)
您可以更新" flyout_service_path"参数。这里有freebase建议文档(https://developers.google.com/freebase/v1/suggest)中的描述。我使用此配置来获取实体的所有密钥。
$(inputClass).suggest(
{
"key" : _FREEBASE_API_KEY_BROWSER_APP,
"flyout_service_path":"/search?filter=(all mid:${id})&output=(notable:/client/summary description type /type/object/key)&key=${key}"
}
).bind("fb-select", this.fbSelectedHandler);
在freebase响应中,我现在可以看到"输出"参数" / type / object / key"与实体的所有键(维基百科等)。
我现在的问题是我如何从输出中获取这些数据?在" fb-select"事件"数据"变量,不要携带这些领域。
请帮帮忙..