搜索
首页web前端js教程Javascript实现关联数据(Linked Data)查询及注意细节_javascript技巧

前言
自由百科全书不仅仅应当可以自由编写,而更应该可以自由获得。
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> <BR>} <BR>}(this, function(){ <BR>'use strict' <BR>function SPARQLWrapper(endpoint){ <BR>this.endpoint = endpoint; <BR>this.queryPart = ""; <BR>this.type = "json"; <BR>} <BR>SPARQLWrapper.prototype = { <BR>constructor: 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 === undefined ? type : this.setType(type) || callback; <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>case "xml": <BR>type = "text/xml"; <BR>break; <BR>case "html": <BR>type = "text/html"; <BR>break; <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 query error: " + 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>} <BR>return SPARQLWrapper; <BR>})); <BR></script>

使用方法,例如需要查询:
select distinct ?Concept where {[] a ?Concept} LIMIT 100
则该页面为:
复制代码 代码如下:








<script> <BR>var sparql = new SPARQLWrapper("http://dbpedia.org/sparql"); <BR>sparql.setQuery('select distinct ?Concept where {[] a ?Concept} LIMIT 100'); <BR>sparql.query(function(json){ <BR>console.log(eval('(' + json + ')'); <BR>}); <BR></script>



声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
data文件夹里面是什么数据data文件夹里面是什么数据May 05, 2023 pm 04:30 PM

data文件夹里面是系统及程序的数据,比如软件的设置和安装包等,Data文件夹中各个文件夹则代表的是不同类型的数据存放文件夹,无论Data文件指的是文件名Data还是扩展名data,都是系统或程序自定义的数据文件,Data是数据保存的备份类文件,一般可以用meidaplayer、记事本或word打开。

mysql load data乱码怎么办mysql load data乱码怎么办Feb 16, 2023 am 10:37 AM

mysql load data乱码的解决办法:1、找到出现乱码的SQL语句;2、修改语句为“LOAD DATA LOCAL INFILE "employee.txt" INTO TABLE EMPLOYEE character set utf8;”即可。

xdata和data有哪些区别xdata和data有哪些区别Dec 11, 2023 am 11:30 AM

区别有:1、xdata通常指的是自变量,data则是指整个数据集;2、xdata主要用于建立数据分析模型,data则是用于进行数据分析和统计;3、xdata通常用于回归分析、方差分析、预测建模,data则可以使用各种统计方法进行分析;4、xdata通常需要进行数据预处理,data则可以包含完整的原始数据。

AI project failure rates top 80% — study cites poor problem recognition and a focus on latest tech trends among major problemsAI project failure rates top 80% — study cites poor problem recognition and a focus on latest tech trends among major problemsAug 31, 2024 am 12:59 AM

Everyone and their aunt seem to be hopping aboard the AI train in search of inflated profit margins and marketing hype — just look at AMD's recent Ryzen rebrand as a prime example of this AI hype. A recent study conducted by RAND has found that this

MySQL 狂写错误日志MySQL 狂写错误日志Feb 18, 2024 pm 05:00 PM

一台核心业务数据库,版本为MySQL8.34社区服务器版。从上线以来,这个数据库服务器的错误日志增增加非常迅猛(如下图所示),每24小时能增加到10多个G的容量。因为有故障报警,也还没有影响到业务的正常访问,有关人员不让重启MySQL服务。鉴于这个情况,我只好设置一个自动计划任务,在每晚的夜间定点清理这些日志。具体的操作时候在系统命令行,执行“crontab-e”,添加如下的文本行:0001***echo>/data/mysql8/data/mysql_db/mysql.log保存并退出编辑模式

vue组件中data不能是函数吗vue组件中data不能是函数吗Dec 19, 2022 pm 05:22 PM

不是,vue组件中data必须是一个函数。vue中组件是用来复用的,为了防止data复用,将其定义为函数。vue组件中的data数据都应该是相互隔离,互不影响的,组件每复用一次,data数据就应该被复制一次,之后,当某一处复用的地方组件内data数据被改变时,其他复用地方组件的data数据不受影响,就需要通过data函数返回一个对象作为组件的状态。

More returns than sales: The Humane Ai Pin is becoming a commercial disasterMore returns than sales: The Humane Ai Pin is becoming a commercial disasterAug 08, 2024 pm 01:14 PM

Shortly after the launch of the Humane Ai Pin, scathing reviews revealed that the AI gadget was anything but ready for the market, as most of the originally advertised features either didn't work properly or were simply missing, the battery life was

Hackers can now reconstruct screen content from HDMI\'s electromagnetic radiationHackers can now reconstruct screen content from HDMI\'s electromagnetic radiationJul 30, 2024 am 10:01 AM

A concerning vulnerability has been revealed in modern computer systems, as per a new study. Federico Larroca at the University of the Republic in Montevideo, Uruguay, and his colleagues have developed an AI model that can reconstruct digital signals

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用