最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript實現(xiàn)關(guān)聯(lián)數(shù)據(jù)(Linked Data)查詢及注意細(xì)節(jié)

 更新時間:2013年02月22日 10:41:18   投稿:whsnow  
DBpedia對Wikipedia的數(shù)據(jù)變成Linked Data形式,使得機器也能讀懂并自由獲得這些數(shù)據(jù);本文的主要目的是利用Javascript從DBpedia中獲取我們想要的數(shù)據(jù),感興趣的朋友可以參考下,希望可以幫助到你

前言
自由百科全書不僅僅應(yīng)當(dāng)可以自由編寫,而更應(yīng)該可以自由獲得。
DBpedia對Wikipedia的數(shù)據(jù)變成Linked Data形式,使得機器也能讀懂并自由獲得這些數(shù)據(jù)。
本文的主要目的是利用Javascript從DBpedia中獲取我們想要的數(shù)據(jù)。
對Linked Data不太了解的請參考:關(guān)聯(lián)數(shù)據(jù)入門——RDF。

SPARQL
Trying to use the Semantic Web without SPARQL is like trying to use a relational database without SQL.
—— Tim Berners-Lee
SPARQL是Semantic Web(語義網(wǎng))的SQL,用于數(shù)據(jù)查詢的語言。

SPARQL Endpoint
SPARQL查詢終端,是一種HTTP綁定協(xié)議,用于通過HTTP進行SPARQL查詢,并返回相應(yīng)數(shù)據(jù)。
DBpedia的SPARQL Endpoint地址是:http://dbpedia.org/sparql
大家可以通過瀏覽器打開這個頁面,進行SPARQL查詢
不過這種查詢最終返回結(jié)果是HTML頁面,并不是我們想要的,我們可以通過設(shè)置Request Header的Accept屬性來指定返回數(shù)據(jù)類型。
例如如果指定為:text/xml,那么返回的便是RDF格式數(shù)據(jù)。
那么我們?nèi)绾屋斎隨PARQL查詢代碼呢?
只需通過get或者post方法用參數(shù)query,將代碼傳過去。例如:
如果想查詢:select distinct ?Concept where {[] a ?Concept} LIMIT 100
則可利用該鏈接得到數(shù)據(jù):
http://dbpedia.org/sparql?query=select%20distinct%20?Concept%20where%20{[]%20a%20?Concept}%20LIMIT%20100
其中空格被轉(zhuǎn)成%20。

實現(xiàn)細(xì)節(jié)
•跨域
我們可以通過AJAX實現(xiàn)這一功能,但是AJAX在部分瀏覽器中無法跨域,然而很顯然我們想要的Linked Data幾乎都是跨域的。
實際上,在一些較老版本的瀏覽器,我們沒有不改變其數(shù)據(jù)形式的方法在前端進行動態(tài)跨域異步讀取。
不過我們可以通過服務(wù)器代理的方法來解決跨域問題。
•GET or POST
使用GET還POST呢?
這個可能出于很多方面考慮,但是考慮到GET可能被緩存,所以我們使用POST來避免數(shù)據(jù)被緩存。
•以什么形式返回數(shù)據(jù)
前面我們說到用text/xml可以返回RDF數(shù)據(jù),但是RDF在Javascript中并不好處理,所以我們使用json方式返回,也就是需要將Accept設(shè)置成application/sparql-results+json。

實現(xiàn)
接口參考Python的SPARQL Wrapper

復(fù)制代碼 代碼如下:

(function(root, factory) {
if(typeof define === "function"){
define("SPARQLWrapper", factory); // AMD || CMD
}else{
root.SPARQLWrapper = factory(); // <script>
}
}(this, function(){
'use strict'
function SPARQLWrapper(endpoint){
this.endpoint = endpoint;
this.queryPart = "";
this.type = "json";
}
SPARQLWrapper.prototype = {
constructor: SPARQLWrapper,
setQuery: function(query){
this.queryPart = "query=" + encodeURI(query);
},
setType: function(type){
this.type = type.toLowerCase();
},
query: function(type, callback){
callback = callback === undefined ? type : this.setType(type) || callback;
var xhr = new XMLHttpRequest();
xhr.open('POST', this.endpoint, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
switch(this.type){
case "json":
type = "application/sparql-results+json";
break;
case "xml":
type = "text/xml";
break;
case "html":
type = "text/html";
break;
default:
type = "application/sparql-results+json";
break;
}
xhr.setRequestHeader("Accept", type);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
var sta = xhr.status;
if(sta == 200 || sta == 304){
callback(xhr.responseText);
}else{
console && console.error("Sparql query error: " + xhr.status + " " + xhr.responseText);
}
window.setTimeout(function(){
xhr.onreadystatechange= new Function();
xhr = null;
},0);
}
}
xhr.send(this.queryPart);
}
}
return SPARQLWrapper;
}));

使用方法,例如需要查詢:
select distinct ?Concept where {[] a ?Concept} LIMIT 100
則該頁面為:
復(fù)制代碼 代碼如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<script src="SPARQLWrapper.js" type="text/javascript"></script>
</head>
<body>
<script>
var sparql = new SPARQLWrapper("http://dbpedia.org/sparql");
sparql.setQuery('select distinct ?Concept where {[] a ?Concept} LIMIT 100');
sparql.query(function(json){
console.log(eval('(' + json + ')');
});
</script>
</body>
</html>

小例子:下載

相關(guān)文章

  • 解決超出JS的安全整數(shù)的限制范圍問題

    解決超出JS的安全整數(shù)的限制范圍問題

    這篇文章主要介紹了解決超出JS的安全整數(shù)的限制范圍問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • JSON 對象未定義錯誤的解決方法

    JSON 對象未定義錯誤的解決方法

    下面小編就為大家?guī)硪黄狫SON 對象未定義錯誤的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • JavaScript高級編程之Array的用法總結(jié)

    JavaScript高級編程之Array的用法總結(jié)

    這篇文章主要為大家介紹了JavaScript中Array常見用法的總結(jié),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-11-11
  • await/async無法捕獲與處理錯誤信息的解決方案分享

    await/async無法捕獲與處理錯誤信息的解決方案分享

    async await 中添加錯誤處理個人認(rèn)為是有必要的,下面這篇文章主要給大家介紹了關(guān)于await/async無法捕獲與處理錯誤信息的解決方案,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • js簡單網(wǎng)速測試方法完整實例

    js簡單網(wǎng)速測試方法完整實例

    這篇文章主要介紹了js簡單網(wǎng)速測試方法,以完整實例形式分析了JavaScript基于網(wǎng)頁圖片下載進行測試網(wǎng)速的實現(xiàn)技巧,需要的朋友可以參考下
    2015-12-12
  • 黑帽seo劫持程序,js劫持搜索引擎代碼

    黑帽seo劫持程序,js劫持搜索引擎代碼

    今天在瀏覽網(wǎng)頁時無意中發(fā)現(xiàn)了這段JS劫持搜索引擎代碼。劫持搜索引擎正常搜索過來的流量,這是黑帽seo常用的劫持方法。特意解密出來供大家了解其劫持原理。感興趣的朋友一起學(xué)習(xí)學(xué)習(xí)吧
    2015-09-09
  • BootStrap Validator使用注意事項(必看篇)

    BootStrap Validator使用注意事項(必看篇)

    針對bootstrap2和bootstrap3有不同的版本,在使用bootstrap validator時需要了解其注意事項,下面小編把我遇到的注意事項分享給大家,供大家參考
    2016-09-09
  • jQuery檢測輸入的字符串包含的中英文的數(shù)量

    jQuery檢測輸入的字符串包含的中英文的數(shù)量

    這篇文章主要介紹了jQuery檢測輸入的字符串包含的中英文的數(shù)量的實現(xiàn)方法,非常的實用,這里推薦給小伙伴,有需要的朋友可以參考下。
    2015-04-04
  • 微信小程序彈窗禁止頁面滾動的實現(xiàn)代碼

    微信小程序彈窗禁止頁面滾動的實現(xiàn)代碼

    這篇文章主要介紹了微信小程序彈窗禁止頁面滾動的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • js仿小米手機上下滑動效果

    js仿小米手機上下滑動效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript仿小米手機上下滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評論

乐清市| 普兰县| 大宁县| 东方市| 禄劝| 开远市| 伊通| 南安市| 瑞昌市| 长海县| 浠水县| 西畴县| 互助| 南汇区| 得荣县| 吴旗县| 昭苏县| 潼关县| 集贤县| 新巴尔虎右旗| 依兰县| 辽宁省| 页游| 利津县| 蛟河市| 固安县| 边坝县| 合川市| 大田县| 凤山县| 秦安县| 宜春市| 宝兴县| 阿图什市| 马尔康县| 昆明市| 静海县| 乳源| 体育| 泸西县| 南汇区|