まえがき フリー百科事典は、自由に記述できるだけでなく、自由に利用できるようにする必要があります。
DBpedia はウィキペディアのデータを Linked Data 形式に変換し、マシンもデータを自由に読み取って取得できるようにします。
この記事の主な目的は、Javascript を使用して DBpedia から必要なデータを取得することです。
Linked Data についてあまり詳しくない場合は、
Linked Data の概要 - RDF を参照してください。
SPARQL SPARQL を使用せずにセマンティック Web を使用しようとすることは、SQL を使用せずにリレーショナル データベースを使用しようとするようなものです。
—— Tim Berners-Lee
SPARQL はセマンティックです。 SQL for the Web (セマンティック Web)、データ クエリ用の言語。
SPARQL エンドポイント SPARQL クエリ ターミナルは、HTTP 経由で SPARQL クエリを実行し、対応するデータを返すために使用される HTTP バインディング プロトコルです。
DBpedia の SPARQL エンドポイント アドレスは次のとおりです: http://dbpedia.org/sparql
ブラウザでこのページを開いて SPARQL クエリを実行できます (壁を回避しないとクエリが失敗することが多いため、壁を回避するのが最善です) 、よくわかりません)なぜ = =)。
ただし、この種のクエリによって返される最終結果は HTML ページであり、リクエスト ヘッダーの Accept 属性を設定することで返されるデータ型を指定できます。
たとえば、text/xml と指定すると、RDF 形式のデータが返されます。
では、SPARQL クエリ コードを入力するにはどうすればよいでしょうか?
get メソッドまたは post メソッドを通じてパラメーター クエリを使用してコードを渡すだけです。例:
クエリを実行する場合: select unique ?Concept where {[] a ?Concept} LIMIT 100
このリンクを使用してデータを取得できます:
http://dbpedia.org/ sparql?query=select unique ?Concept where {[] a ?Concept} LIMIT 100
スペースが変換される場所。
実装の詳細 •クロスドメイン
この機能は AJAX を通じて実現できますが、一部のブラウザーでは AJAX はクロスドメインに対応できませんが、明らかに必要なのは Linked Data です。ほとんどの場合、クロスドメインです。
実際、一部の古いバージョンのブラウザでは、データ形式を変更せずにフロントエンドで動的クロスドメイン非同期読み取りを実行する方法がありません。
ただし、サーバー プロキシを通じてクロスドメインの問題を解決できます。
•GET または POST
GET または POST を使用するとどうなりますか?
これは多くの考慮事項によるものと考えられますが、GET がキャッシュされる可能性を考慮して、データがキャッシュされるのを避けるために POST を使用します。
•データをどのような形式で返すか
RDF データは text/xml を使用して返せると前述しましたが、RDF は Javascript で処理するのが簡単ではないため、json を使用して返します。つまり、アプリケーション /sparql-results json を受け入れます。
実装 インターフェイスリファレンス Python の SPARQL ラッパー
(function(root, Factory) {
if(typeof define === "function"){
define("SPARQLWrapper", Factory); // AMD || CMD
}else{
root.SPARQLWrapper = Factory() //
}
}(this, function(){
'厳密な使用' function SPARQLWrapper(endpoint){
this.endpoint = エンドポイント;
this.type = "json";
SPARQLWrapper.prototype = {
コンストラクター: SPARQLWrapper、
setQuery: function(query){
this.queryPart = "query=" encodeURI(query)
}、
setType: function(type){
this.type = type.toLowerCase();
},
query: function(type, callback){
callback = callback === 未定義の type : this.setType(type) ||
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";
case "xml":
type = "text/xml";
case "html":
type = "text/html";
type = "application /sparql-results json";
break;
}
xhr.onreadystatechange = function(){
if(xhr. readyState = = 4){
var sta = xhr.status;
if(sta == 200 || sta == 304){
callback(xhr.responseText){
console && console.error("Sparql クエリ エラー: " xhr.status " " xhr.responseText);
}
window.setTimeout(function(){
xhr.onreadystatechange= new Function() ;
xhr = null;
},0);
}
}
xhr.send(this.queryPart);
}
}
return SPARQLWrapper;
}));
たとえば、次のクエリを実行する必要があります。
select unique ?Concept where {[] a ?Concept} LIMIT 100
その後、ページ
コードをコピー
コードは次のとおりです:
var sparql = new SPARQLWrapper("http://dbpedia.org/sparql");
sparql.setQuery('select unique ?Concept where {[] a ?Concept} LIMIT 100');
sparql.query(function(json){
console.log(eval('(' json ')');
});
本文>