zoukankan      html  css  js  c++  java
  • 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>

    遗留问题

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

    例子

    http://pan.baidu.com/share/link?shareid=293219&uk=855675565

  • 相关阅读:
    ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍) 【转】
    一个建议,看看大家的意见。
    发现不错的文章,推!
    有个小问题,大家一起研究。
    逼不得已,这个我确实不会,昨办?
    MSN Message6.2 的小BUG
    在IE7浏览器中切换成以资源管理器方式
    手机罗盘(指南针)校准方法
    G13/ Wildfire S/A510e link2SD教程,干净清洁的安装程序到内存卡
    HTC G13电池怎么鉴别真伪
  • 原文地址:https://www.cnblogs.com/justany/p/2947774.html
Copyright © 2011-2022 走看看