我正在尝试在Virtuoso中加载的Graph中执行SPARQL插入,通过针对Virtuoso端点的HTTP请求执行此操作。
对于我正在使用axios的HTTP请求,我已经成功完成了一些SPARQL 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
,我已经能够登录并成功执行Insert查询。这意味着(我猜)我的用户没有任何权限问题。
但是当我尝试通过HTTP请求时,我无法正确验证我的用户,我不知道如何以正确的方式指定用户名和密码。
我还发现Virtuoso默认激活了摘要式身份验证方法,因此我将其更改为/sparql-auth
路径上的基本身份验证因为这对我来说是最简单的方法。我使用Virtuoso的http://<cname>/conductor
进行了此更改。
然而,我无法通过HTTP Get请求正确验证自己,收到 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身份验证的例子(我试图使用的身份验证类型),甚至没有摘要式身份验证方法,这是Virtuoso的默认方法。
我的Virtuoso.log中没有关于HTTP请求的内容,甚至没有成功的内容。由于我的配置,我会对此进行更多研究。
感谢您的帮助!
终于找到了获得我想要的结果的方法:
我无法找到我在此处说明的身份验证问题的解决方案,但我仍然需要执行这些插入操作,因此我终于完全改变了我的方法并创建了我自己的 Java RESTful服务作为我的应用程序和 Virtuoso 之间的中介。
我发现 Virtuoso 为 Java 提供了一些库,这些库帮助我使用适当的授权连接到 Virtuoso 。我还必须说创建服务并不容易,但它终于奏效了。
我希望这些信息可以帮助别人更早地思考这种方法,因为它在我的项目中浪费了很多时间。正如我所说的,我已经解决了自己在应用程序中进行插入的问题,但是身份验证问题仍然存在,所以请随意添加关于此主题的任何新评论。
答案 0 :(得分:3)
您可以使用SPARQL更新语言(SPARUL)通过任何Virtuoso实例提供的SPARQL查询服务终结点来执行INSERT,DELETE和UPDATE(结合DELETE和INSERT)。
自然,默认情况下,Virtuoso端点受保护;这就是/sparql
对您不起作用的原因。 /sparql-update
端点用于基本的摘要式身份验证,归结为适用于Virtuoso SQL用户帐户的常规Role-based Access Controls (RBAC)。
要启用功能更强大的Attribute-based Access Controls (ABAC)功能(适用于Web规模的身份),您需要安装企业版以及Virtuoso Authentication Layer (VAL)模块(由Virtuoso Application Distribution (VAD)软件包提供) )。
以下是有关ABAC功能的简单分步指南:
使用Conductor UI的系统管理员→程序包标签来确认已启用VAL。
返回到SPARQL端点,并尝试执行针对命名图的INSERT
或DELETE
。
我希望这会有所帮助吗?