Fuseki на OpenShift: может ОБНОВИТЬ, но не ВЫБРАТЬ

Я установил сервер Jena Fuseki на OpenShift.

Файл конфигурации --config services.ttl показан ниже.

Я наблюдаю следующее:

Если я выполняю обновление SPARQL из панели управления, я получаю Update Succeeded, и некоторые файлы TDB действительно изменяются на сервере (в ./app-root/data/DB/).

Однако, когда я снова выполняю запрос SPARQL, такой как SELECT ?s ?p ?o WHERE { ?s ?p ?o. }, в панели управления, я получаю нулевые операторы. То же самое верно и для этого запроса GET:

http://<obfuscated>.rhcloud.com/ds/query?query=SELECT+%3Fs+%3Fp+%3Fo+WHERE+{+%3Fs+%3Fp+%3Fo.+}&output=text&stylesheet=

Файл журнала в OpenShift содержит следующие записи:

INFO  [24] GET http://<obfuscated>.rhcloud.com/ds/query?query=SELECT+%3Fs+%3Fp+%3Fo+WHERE+{+%3Fs+%3Fp+%3Fo.+}+&output=text&stylesheet=
INFO  [24] Query = SELECT ?s ?p ?o WHERE { ?s ?p ?o. } 
INFO  [24] exec/select
INFO  [24] 200 OK (2 ms) 

Таким образом, создается впечатление, что операторы RDF можно записывать в TDB, но нельзя извлекать. Если я попробую то же самое с локальной установкой Fuseki, проблема не проявится.

Что еще я могу сделать, чтобы диагностировать и решить эту проблему с Fuseki в OpenShift?

ОБНОВЛЕНИЕ По-видимому, проблема не проявляется, если я ВСТАВЛЯЮ операторы в именованный ГРАФ (не в граф по умолчанию).

@prefix : <#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .

[] rdf:type fuseki:Server ;
  fuseki:services (
  <#service>
 ) .

[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .
tdb:GraphTDB rdfs:subClassOf ja:Model .

<#service> a fuseki:Service ;
  fuseki:name "ds" ;
  fuseki:serviceQuery "sparql" ;
  fuseki:serviceQuery "query" ;
  fuseki:serviceUpdate "update" ;
  fuseki:serviceUpload "upload" ;
  fuseki:serviceReadWriteGraphStore "data" ;
  fuseki:dataset <#dataset> ;
.

<#dataset> a tdb:DatasetTDB ;
  tdb:location "../data/DB" ;
  tdb:unionDefaultGraph true ;
.

person Drux    schedule 02.01.2015    source источник


Ответы (1)


Виновником оказался tdb:unionDefaultGraph true. Из документации:

Ассемблер может указать, что графом по умолчанию для запроса является объединение именованных графов. Это делается путем добавления tdb:unionDefaultGraph.

Поскольку здесь не упоминается граф по умолчанию как часть объединения, я предполагаю, что в этой конфигурации нет графа по умолчанию, кроме объединения именованного графа, и, следовательно, обновления, которые не называют граф, игнорируются.

Описанная проблема исчезает при альтернативной конфигурации tdb:unionDefaultGraph false.

person Drux    schedule 02.01.2015