我知道默认情况下 fuseki 为查询和更新提供不同的 url ,允许一些优雅的管理。
现在,我想获得一个用于更新和查询的 URL。这种需求背后的基本原理是避免在代码库中传播两个 url。我知道更新和查询代码应该分开,但我的要求并没有混合。这只是为了避免传播两个对象而不是一个。
我当前的配置如下所示:
<#service1> rdf:type fuseki:Service ;
fuseki:name "dataset" ; # http://host:port/dataset
fuseki:serviceQuery "endpoint" ; # SPARQL query service
fuseki:serviceUpdate "endpoint" ; # SPARQL update service
fuseki:dataset <#dataset> ;
.
理论上,接口存在于/endpoint
,但只接受更新。查询时:
prefix sfm: <sfm/>
SELECT DISTINCT ?value
WHERE {
sfm:config sfm:component ?value.
}
服务器报告许多行,如下所示:
INFO [4] POST http://localhost:9876/sfm/endpoint
INFO [4] POST /sfm :: 'endpoint' :: [application/x-www-form-urlencoded] ?
INFO [4] 400 SPARQL Update: No 'update=' parameter (0 ms)
我在文档中找不到任何指定查询和更新服务不能的内容在同一个地方的东西,所以我认为这是可能的,我只是错过了一些东西。然而,日志的最后一行是明确的:fuseki 等待更新。
另一种解决方案可能是将 url 定义为localhost/dataset/
,并根据我是查询还是更新,在末尾添加相关部分,分别给出localhost/dataset/query
和localhost/dataset/update
。
但是(1)这导致数据库需要有一个特定的 url 命名,并且(2)它看起来对三重存储有一个强烈的要求:当我使用另一个时,它必须提供相同的接口,这可能是不可能。(不知道这个功能在其他三联店有没有实现)
编辑:修复 POST/GET 错误