Javascript查詢DBpedia小應用
上一篇文章中,我們了解了SPARQL、SPARQL Endpoint,並簡單做了一個SPARQLWrapper.js,來從DBpedia中查詢了一些數據。
本文則嘗試利用SPARQLWrapper.js來讀取DBpedia的數據,並顯示出來。
目標
通過輸入一個英文單詞,然後返回WIKI中相關的信息。
那麼主要要解決的問題就是怎樣的SPARQL語句能夠查詢到我們需要的東西。
先看一段簡單的SPARQL查詢語句
復制代碼 代碼如下:
PREFIX : <http://aabs.purl.org/music#>
SELECT ?instrument
WHERE {
:andrew :playsInstrument ?instrument .
}
首先定義一個域名空間http://aabs.purl.org/music#。
然後選擇這樣子的instrument變量,他滿足:
主語是http://aabs.purl.org/music#andrew,謂語是http://aabs.purl.org/music#playsInstrument,賓語是該instrument。
bif:contains()
bif:contains()是contains()函數的變種函數,顧名思義是判斷是否包含的函數。
利用這個我們能查詢到我們需要的數據了。
復制代碼 代碼如下:
prefix foaf: <http://xmlns.com/foaf/0.1/>
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="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: <http://xmlns.com/foaf/0.1/> "
+ "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" id="name"/>
<input type="button" onclick="getInfo(document.getElementById('name').value);" value="Wiki Search" />
<div id="result"></p>
</body>
</html>
遺留問題
不太清楚中文怎麼查詢,如有知道的朋友,麻煩告知一下,謝謝。
例子