2014-03-31 33 views
3

我想从Javascript中的Dbdepdia中获得土木工程的英文文章Abtract。这是我尝试过的,但失败了。如何用JavaScript查询Dbpedia

<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
<style type="text/css"> 

</style> 
</head> 
    <script type="text/javascript"> 
    var url = "http://dbpedia.org/sparql"; 
    var query = "\ 
    PREFIX dbpedia2: <http://dbpedia.org/resource/>\ 
    PREFIX Abs: <http://dbpedia.org/ontology/>\ 
    SELECT ?abstract\ 
    WHERE {\ 
      ?s dbpedia2:Civil_engineeringe\"@en;\ Abs:abstract ?abstract\ 
    }"; 

这个我如何编码的URL,把它传递给ajaxx

var queryUrl = encodeURI(url+"?query="+query+"&format=json"); 
    $.ajax({ 
     dataType: "jsonp", 
     url: queryUrl, 
     success: function(_data) { 
      var results = _data.results.bindings; 
      for (var i in results) { 
       var res = results[i].abstract.value; 
       alert(res); 
      } 
     } 
    }); 
</script> 
    <body></body> 

</html> 
+0

确实[JavaScript控制台在Web浏览器(http://webmasters.stackexchange.com/questions/8525/how-to-open-the-javascript -console-in-different-browsers)显示任何未解决的错误? – summea

+0

它显示空白页 – user3335188

+0

而且您确定SPARQL是有效的,是吗? – summea

回答

0

编码看起来不错,但你的原始SPARQL/JavaScript不看行不行给我。

var query = "\ 
PREFIX dbpedia2: <http://dbpedia.org/resource/>\ 
PREFIX Abs: <http://dbpedia.org/ontology/>\ 
SELECT ?abstract\ 
WHERE {\ 
     ?s dbpedia2:Civil_engineeringe\"@en;\ Abs:abstract ?abstract\ 
}"; 

不会导致有效的JavaScript字符串有后“?抽象\”的空间,这意味着你要逃离一个空格字符。看看这个与多行JavaScript字符串有关的问题:Creating multiline strings in JavaScript

此外,SPARQL查询此刻是错误的。尝试建立它并首先测试它here并看看the spec

5

我对多行字符串使用了不同的方法,我直接将它用于写入DBPedia的SPARQL查询。

var query = [ 
"PREFIX dbpedia2: <http://dbpedia.org/resource/>", 
"PREFIX Abs: <http://dbpedia.org/ontology/>", 
"SELECT ?abstract", 
"WHERE {", 
    "?s dbpedia2:Civil_engineeringe\"@en;", 
    "Abs:abstract ?abstract", 
"}" 
].join(" "); 

我这样做是因为如果出现编码问题,我可以调整行分隔符,并且它还允许我在必要时轻松地注释行。

现在,一旦我需要运行查询,我编码查询本身并将其追加到URL。

要小心如何包装整个查询字符串,因为它可能会将键,值和等号作为转义字符进行编码。

我做这种方式:

var queryUrl = url+"?query="+ encodeURIComponent(query) +"&format=json";