亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Javascript實現關聯數據(Linked Data)查詢及注意細節

2019-11-20 22:59:18
字體:
來源:轉載
供稿:網友
前言
自由百科全書不僅僅應當可以自由編寫,而更應該可以自由獲得。
DBpedia對Wikipedia的數據變成Linked Data形式,使得機器也能讀懂并自由獲得這些數據。
本文的主要目的是利用Javascript從DBpedia中獲取我們想要的數據。
對Linked Data不太了解的請參考:關聯數據入門――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(語義網)的SQL,用于數據查詢的語言。

SPARQL Endpoint
SPARQL查詢終端,是一種HTTP綁定協議,用于通過HTTP進行SPARQL查詢,并返回相應數據。
DBpedia的SPARQL Endpoint地址是:http://dbpedia.org/sparql
大家可以通過瀏覽器打開這個頁面,進行SPARQL查詢(最好翻墻,沒翻墻查詢經常失敗,不太明白為什么= =)。
不過這種查詢最終返回結果是HTML頁面,并不是我們想要的,我們可以通過設置Request Header的Accept屬性來指定返回數據類型。
例如如果指定為:text/xml,那么返回的便是RDF格式數據。
那么我們如何輸入SPARQL查詢代碼呢?
只需通過get或者post方法用參數query,將代碼傳過去。例如:
如果想查詢:select distinct ?Concept where {[] a ?Concept} LIMIT 100
則可利用該鏈接得到數據:
http://dbpedia.org/sparql?query=select%20distinct%20?Concept%20where%20{[]%20a%20?Concept}%20LIMIT%20100
其中空格被轉成%20。

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

實現
接口參考Python的SPARQL Wrapper
復制代碼 代碼如下:

(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
則該頁面為:
復制代碼 代碼如下:

<!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>

小例子:下載
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩在线视频一区二区| 55夜色66夜色国产精品视频| 国产精品一区二区久久久| 亚洲成人a级网| 97av在线视频| 国产精品劲爆视频| 亚洲欧美另类国产| 亚洲国产第一页| 国产z一区二区三区| 亚洲成人黄色在线观看| 18一19gay欧美视频网站| 日韩成人av一区| 不用播放器成人网| 久久免费视频网| 精品自拍视频在线观看| 精品久久久久久| 国产成人久久久精品一区| 91wwwcom在线观看| 国产乱肥老妇国产一区二| 欧美日韩精品中文字幕| 久久国产色av| 亚洲精品一区中文字幕乱码| 成人亲热视频网站| 国产亚洲美女久久| 最近中文字幕日韩精品| 国产精品久久久久久av| 欲色天天网综合久久| 黄色成人av在线| 亚洲一区二区在线播放| 久久这里只有精品99| 午夜精品国产精品大乳美女| 日韩一区视频在线| 日韩成人高清在线| 最近免费中文字幕视频2019| 国产精品第10页| 国产欧美精品va在线观看| 亚洲成人久久网| 日本成熟性欧美| 国产性猛交xxxx免费看久久| 国产一区二区日韩| 日韩av男人的天堂| 777午夜精品福利在线观看| 国产一区二区三区高清在线观看| 国产91色在线|免| 国产精品久久在线观看| 欧美亚洲另类视频| 色偷偷综合社区| 国产精品99导航| 国产精品视频公开费视频| 在线播放日韩专区| 性色av香蕉一区二区| 欧美在线视频观看免费网站| 性日韩欧美在线视频| 日韩精品中文字幕在线播放| 91精品国产91久久久久久| 成人黄色在线观看| 久久久精品国产| 亚洲爱爱爱爱爱| 欧美在线视频免费观看| 中文字幕精品久久| 国产欧美亚洲精品| www.久久撸.com| 亚洲97在线观看| 欧美精品精品精品精品免费| 在线观看精品国产视频| 久久免费视频观看| 久久五月天色综合| 97不卡在线视频| 亚洲影视九九影院在线观看| 国产va免费精品高清在线| 中文字幕免费国产精品| 这里只有视频精品| 国产自摸综合网| 日韩少妇与小伙激情| 日韩精品视频在线观看网址| 日韩av第一页| 亚洲欧美日韩网| 一区二区欧美日韩视频| 亚洲va欧美va国产综合剧情| 久久99热精品这里久久精品| 国产精品久久久久av| 欧美大片在线免费观看| 国产精品美女在线观看| 在线看福利67194| 日韩黄色高清视频| 久久伊人91精品综合网站| 国产精品电影网| 欧美猛少妇色xxxxx| 中文字幕久精品免费视频| 91黑丝高跟在线| 成人激情视频在线播放| 精品成人国产在线观看男人呻吟| 中国人与牲禽动交精品| 国产精品久久久久久久天堂| 97久久精品人搡人人玩| 国产精品久久久久久亚洲调教| 国产99久久精品一区二区永久免费| 国产日韩在线看片| 96精品久久久久中文字幕| 欧美日韩亚洲精品一区二区三区| 久久精品国产一区| 午夜精品一区二区三区在线视频| 欧美精品videofree1080p| 日韩禁在线播放| 伊人青青综合网站| 欧美中文字幕在线视频| 亚洲热线99精品视频| 九九热精品视频国产| 国产成人久久久| 亚洲成人久久网| 亚洲精品99久久久久| 日韩精品免费看| 日韩av免费在线看| 欧美日韩免费看| 国产剧情日韩欧美| 欧美激情乱人伦一区| 亚洲韩国欧洲国产日产av| 欧美成人三级视频网站| 国产精品视频一区二区高潮| 国产不卡在线观看| 亚洲欧美国产高清va在线播| 国产精品精品国产| 一区二区三区 在线观看视| 成人黄色片网站| 欧美激情国产高清| 久久精品国产成人| 精品久久国产精品| 66m—66摸成人免费视频| 亚洲在线免费视频| 57pao成人永久免费视频| 亚洲精品资源美女情侣酒店| 美日韩在线视频| 国产精品视频一区国模私拍| 久久国产精品久久久久久久久久| 亚洲电影免费观看高清完整版| 羞羞色国产精品| www.国产精品一二区| 欧美日韩国产中文精品字幕自在自线| 国产一区二区三区四区福利| 久久久午夜视频| 久久久中精品2020中文| 伦伦影院午夜日韩欧美限制| 欧美日韩国产中文精品字幕自在自线| 国产精品com| 91国产美女在线观看| 日韩中文字幕在线| 不卡伊人av在线播放| 亚洲最大av网| 久久香蕉国产线看观看av| 欧美精品生活片| 日韩在线中文字| 国产欧美精品xxxx另类| 777午夜精品福利在线观看| 久久国产精品亚洲| 中文字幕亚洲无线码在线一区| 亚洲综合在线中文字幕| 国产精品视频白浆免费视频| 欧美最顶级的aⅴ艳星| 欧美激情视频播放| 久久精品久久久久电影| 色偷偷88888欧美精品久久久| 久久久久成人网| 欧美日韩在线第一页| 91影院在线免费观看视频|