Javascript查询DBpedia小应用 
上一篇文章中,我们了解了SPARQL、SPARQL Endpoint,并简单做了一个SPARQLWrapper.js,来从DBpedia中查询了一些数据。 
本文则尝试利用SPARQLWrapper.js来读取DBpedia的数据,并显示出来。 
目标 
通过输入一个英文单词,然后返回WIKI中相关的信息。 
那么主要要解决的问题就是怎样的SPARQL语句能够查询到我们需要的东西。 
先看一段简单的SPARQL查询语句 
复制代码 代码如下:
 
PREFIX : <#> 
SELECT ?instrument 
WHERE { 
:andrew :playsInstrument ?instrument . 
} 
首先定义一个域名空间#。
然后选择这样子的instrument变量,他满足:
主语是#andrew,谓语是#playsInstrument,宾语是该instrument。
bif:contains()
bif:contains()是contains()函数的变种函数,顾名思义是判断是否包含的函数。
利用这个我们能查询到我们需要的数据了。
复制代码 代码如下:
 
prefix foaf: <> 
select distinct ?url ?alma ?comment 
where { 
?s foaf:name ?sname . 
?sname bif:contains 'China'. 
?s foaf:depiction ?url . 
?s dbpedia-owl:wikiPageExternalLink ?alma . 
?s rdfs:comment ?comment . 
} 
limit 10 
这段SPARQL语句是查询包含China的名字的词条,然后将其图片的url、homepage的url,以及简介返回回来。
下面让我们把整个程序写完。
完整代码
复制代码 代码如下:
 
<html> 
<head> 
<meta charset="utf-8"> 
<title>SPARQL DEMO</title> 
<script src="https://www.jb51.net/SPARQLWrapper.js"></script> 
<script> 
var $ = function(id){ 
return document.getElementById(id); 
}, 
sparql = new SPARQLWrapper("http://dbpedia.org/sparql"), 
results = []; 
function getInfo(name){ 
name = name.replace(/\s/g, "_"); 
var command = "prefix foaf: <> " 
+ "select distinct ?url ?alma ?comment " 
+ "where { " 
+ "?s foaf:name ?sname . " 
+ "?sname bif:contains '" + name + "'. " 
+ "?s foaf:depiction ?url . " 
+ "?s dbpedia-owl:wikiPageExternalLink ?alma . " 
+ "?s rdfs:comment ?comment . " 
+ "} " 
+ "limit 10"; 
sparql.setQuery(command); 
sparql.query(function(json){ 
showInfo((eval("(" + json + ")")).results.bindings); 
}); 
} 
function showInfo(results){ 
var text = ""; 
if(results.length !== 0){ 
for(var i = 0; i < results.length; i++){ 
text += "<img src = '" + results[i].url.value + "' /><br />"; 
text += "homepage:" + "<a href = '" + results[i].alma.value + "' >" + results[i].alma.value + "</a><br />"; 
text += "<p>" + results[i].comment.value + "</p><br /><br /><br />"; 
$("result").innerHTML = text; 
} 
}else{ 
$("result").innerHTML = "没有任何相关信息!"; 
} 
} 
</script> 
</head> 
<body> 
<p>目前只支持英文查询。</p> 
<input type="text"/> 
<input type="button" value="Wiki Search" /> 
<div></p> 
</body> 
</html> 
遗留问题
不太清楚中文怎么查询,如有知道的朋友,麻烦告知一下,谢谢。
例子
