我试图在Virtuoso中加载的图中执行SPARQL插入,通过针对Virtuoso端点的HTTP请求执行插入。
对于我使用的axios请求,我已经成功地进行了一些Select查询,所以我的问题在于我需要做的更新图形的身份验证过程。
经过大量的研究,我看到Virtuoso为不同的身份验证过程启用了一些路径:
http://<cname>/sparql-auth (SQL身份验证)http://<cname>/sparql-oauth (OAuth)http://<cname>/sparql-graph-crud-auth (OAuth CRUD)https://<cname>/sparql和https://<cname>/sparql-webid (WebID协议)我想使它尽可能简单,所以我已经检查了http://<cname>/sparql-auth,并且能够成功地登录并执行插入查询。这意味着(我猜)我的用户没有任何权限问题。
但是,当我试图通过HTTP请求进行身份验证时,我无法正确地验证我的用户,我不知道如何以正确的方式指定用户名和密码。
我还发现Virtuoso在默认情况下激活了Digest身份验证方法,因此我将其更改为/sparql-auth路径上的基本身份验证,因为它是我最简单的方法。我使用Virtuoso的http://<cname>/conductor进行了此更改。
但是,我仍然无法通过HTTP请求正确地验证自己的身份,接收HTTP状态代码401 (未经授权)。
这是我巧妙地提出请求的方式:
axios.get('http://localhost:8890/sparql-auth?query=' + encodeURIComponent(pruebaInsertQuery),{
auth: { // This is provided by axios, to perform an HTTP Basic auth
username: 'myUserName',
password: 'myPassword'
},
})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.log(error);
});我已经看过了Virtuoso的每一个教程和指南,但我在SPARQL、RDF和Virtuoso世界中都是新手,我仍然迷失在一切。
提前谢谢你!!
由于下列评论而编辑的问题:
我也尝试了一个邮政请求,但没有任何改变。
我尝试过的另一种方法是使用http://myUserName:myPassword@localhost:8890/sparql-auth格式,但得到的响应完全相同。
对于是否通过axios调用和/sparql-auth路径传递完全相同的字符串,我一点也不确定。Virtuoso可能使用一些我还没有找到的编码,也无法为Virtuoso (我试图使用的身份验证类型)找到SQL身份验证的任何示例,甚至是Digest authentication方法,这是Virtuoso的默认方法。
我的Virtuoso.log中没有出现任何关于HTTP请求的内容,甚至连成功的请求也没有出现。我将对此进行更多的研究,因为这可能是因为我的配置。
谢谢你的帮助!
终于找到了获得我想要的结果的方法:
--我还没有找到我在这里说过的身份验证问题的解决方案--,但是我仍然需要做这些插入,所以我最终完全改变了我的方法,并创建了我自己的Java RESTful服务,作为我的应用程序和Virtuoso之间的中介。
我发现Virtuoso为Java提供了一些库,这些库帮助我通过批准授权连接到Virtuoso。我也不得不说,创建服务并不容易,但最终还是奏效了。
我希望这些信息能帮助人们更早地思考这个方法,因为它让我在我的项目中浪费了大量的时间。正如我已经说过的,我已经解决了通过我的应用程序执行插入的问题,但是身份验证问题仍然存在,所以可以随意添加关于这个主题的任何新评论。
发布于 2018-06-22 03:01:26
您可以使用SPARQL更新语言(SPARUL)通过任何Virtuoso实例提供的SPARQL查询服务端点执行INSERT、DELETE和UPDATE (合并DELETE和INSERT)。
当然,Virtuoso端点在默认情况下是受保护的;这就是为什么/sparql不适合您。基本摘要身份验证()的/sparql-update端点已经就位,这可以归结为对Virtuoso用户帐户的常规基于角色的访问控制(RBAC)作用域。
要启用功能强大得多的基于属性的访问控制(ABAC)功能(其作用范围为网络规模标识),您需要安装Enterprise加上虚拟认证层(VAL)模块(由虚拟应用程序分发(VAD)包提供)。
下面是关于ABAC功能的一个简单的逐步指南:

INSERT或DELETE。我希望这能帮到你?
https://stackoverflow.com/questions/50376348
复制相似问题