Javascript查询DBpedia小应用实例学习

  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>

  遗留问题

  不太清楚中文怎么查询,如有知道的朋友,麻烦告知一下,谢谢。

  例子