我知道默认情况下fuseki为查询和更新提供different urls,允许一些优雅的管理。
现在,我希望获得更新和查询的单个URL。这种需求背后的基本原理是避免在代码库中传播两个URL。 我知道更新和查询代码should be separated,但我的请求不是混合的。只是为了避免传播两个物体而不是一个物体。
我当前的配置如下:
<#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等待更新。
另一个解决方案可能是将网址定义为localhost/dataset/
,并根据我查询或更新,在最后添加相关部分,分别给出localhost/dataset/query
和localhost/dataset/update
。< / p>
但是(1)这导致数据库需要有一个特定的url命名,并且(2)它看起来像是对triplestore的强烈要求:当我将使用另一个时,它将必须提供相同的接口,这可能是不可能的。 (不知道这个功能是否在其他三重商店中实施)
编辑:修复POST / GET错误
答案 0 :(得分:4)
405 HTTP method not allowed: SPARQL Update : use POST
看起来您正在使用GET进行SPARQL更新。
它已将操作正确路由到更新处理器(您可以使用相同的端点 - 包括删除服务部分并仅使用数据集URL)。
但是,在HTTP中,GET是可缓存的操作,在它们可能导致更改时不应使用。 GET实际上可能无法到达终端服务器,但是某些中间服务器会从Web缓存中对其进行响应。
使用POST。
如果您将查询和更新服务分开,情况也是如此。
原始背景
原始问题已被编辑。原始报告询问了这个问题:
INFO [1] 405 HTTP method not allowed: SPARQL Update : use POST (2 ms)
答案 1 :(得分:2)
回答修订后的不同问题:
共享服务的端点是数据集URL:
http://localhost:9876/sfm
更新,查询或服务是否可用由配置文件控制。
设置fuseki:serviceQuery和fuseki:serviceUpdate同样没有必要,不鼓励。