上一篇文章 中,我们了解了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
>
遗留问题
不太清楚中文怎么查询,如有知道的朋友,麻烦告知一下,谢谢。
例子
http://pan.baidu.com/share/link?shareid=293219&uk=855675565

