上一篇文章 中,我们了解了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