서문 무료백과사전은 자유롭게 작성되어야 할 뿐만 아니라, 자유롭게 이용 가능해야 합니다.
DBpedia는 Wikipedia 데이터를 Linked Data 형식으로 변환하므로 기계도 데이터를 자유롭게 읽고 얻을 수 있습니다.
이 글의 주요 목적은 Javascript를 사용하여 DBpedia에서 원하는 데이터를 얻는 것입니다.
Linked Data에 대해 잘 모르신다면
Linked Data 소개 - RDF를 참고하세요.
SPARQL SPARQL 없이 Semantic Web을 사용하려는 것은 SQL 없이 관계형 데이터베이스를 사용하려는 것과 같습니다.
—— Tim Berners-Lee
SPARQL은 Semantic입니다. 데이터 쿼리를 위한 언어인 웹용 SQL(Semantic Web)입니다.
SPARQL 엔드포인트 SPARQL 쿼리 터미널은 HTTP를 통해 SPARQL 쿼리를 수행하고 해당 데이터를 반환하는 데 사용되는 HTTP 바인딩 프로토콜입니다.
DBpedia의 SPARQL 엔드포인트 주소는 http://dbpedia.org/sparql
브라우저를 통해 이 페이지를 열고 SPARQL 쿼리를 수행할 수 있습니다. (벽을 우회하지 않고 쿼리가 실패하는 경우가 많기 때문에 벽을 우회하는 것이 가장 좋습니다.) , 잘 이해가 안 돼요) 왜 = =).
그러나 이러한 종류의 쿼리에 의해 반환되는 최종 결과는 우리가 원하는 것이 아닌 HTML 페이지입니다. 요청 헤더의 Accept 속성을 설정하여 반환 데이터 유형을 지정할 수 있습니다.
예를 들어 text/xml로 지정하면 RDF 형식의 데이터가 반환됩니다.
그럼 SPARQL 쿼리 코드는 어떻게 입력하나요?
코드를 전달하려면 get 또는 post 메소드를 통해 매개변수 쿼리를 사용하세요. 예:
쿼리하려는 경우: select independent ?Concept where {[] a ?Concept} LIMIT 100
다음 링크를 사용하여 데이터를 가져올 수 있습니다:
http://dbpedia.org/ sparql?query=select independent ?Concept 여기서 {[] 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 Wrapper
코드 복사 코드는 다음과 같습니다. 다음과 같습니다:
(function(root, Factory) {
if(typeof 정의 === "function"){
define("SPARQLWrapper", Factory); // AMD || CMD
}else{
root.SPARQLWrapper = Factory() // <script> <br>} <br>}(this, function(){ <br>'엄격한 사용' <br>function SPARQLWrapper(endpoint){ <br>this.endpoint = 엔드포인트; <br>this.queryPart = ""; <br>this.type = "json" <br>} <br>SPARQLWrapper.prototype = { <br> 생성자: SPARQLWrapper, <br>setQuery: function(query){ <br>this.queryPart = "query=" encodeURI(query); <br>}, <br>setType: function(type){ <br> this.type = type.toLowerCase(); <br>}, <br>query: function(type, callback){ <br>callback = callback === 정의되지 않음 ? type : this.setType(type) || <br>var xhr = new XMLHttpRequest(); <br>xhr.open('POST', this.endpoint, true) <br>xhr.setRequestHeader('Content-type', 'application/x-www-form) -urlencoded '); <br>switch(this.type){ <br>case "json": <br>type = "application/sparql-results json"; <br>break; <br>type = "text/xml"; <br>break; <br>case "html": <br>type = "text/html" <br>default: <br>type = "application /sparql-results json"; <br>break; <br>} <br>xhr.setRequestHeader("Accept", type) <br>xhr.onreadystatechange = function(){ <br>if(xhr. ReadyState = = 4){ <br>var sta = xhr.status; <br>if(sta == 200 || sta == 304){ <br>callback(xhr.responseText) <br>}else{ <br> console && console.error("Sparql 쿼리 오류: " xhr.status " " xhr.responseText) <br>} <br>window.setTimeout(function(){ <br>xhr.onreadystatechange= new Function() ; <br>xhr = null; <br>},0); <br>} <br>} <br>xhr.send(this.queryPart) <br>} <br>return SPARQLWrapper; <br>})); <br><br> <br>예를 들어 다음과 같이 쿼리해야 합니다. <br>select independent ?Concept where {[] a ?Concept} LIMIT 100 </div>그런 다음 페이지 is: <br><br><br><br><div class="codetitle">코드 복사<span><a style="CURSOR: pointer" data="81600" class="copybut" id="copybut81600" onclick="doCopy('code81600')"><u> 코드는 다음과 같습니다.</u><div class="codebody" id="code81600"> <br><!DOCTYPE html> <br><html xmlns="http://www.w3.org/1999/xhtml"> <br><머리> <br><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <br><script src="SPARQLWrapper.js" type="text/javascript"></script>
<본문>
<스크립트>
var sparql = new SPARQLWrapper("http://dbpedia.org/sparql");
sparql.setQuery('고유한 ?Concept 선택, 여기서 {[] a ?Concept} LIMIT 100');
sparql.query(function(json){
console.log(eval('(' json ')');
});
본문>