Как сохранить данные JENA в транзакциях? - PullRequest
0 голосов
/ 20 января 2019

Я использую jena вместе с fuseki в качестве моего сервера sparql и использую python для выполнения HTTP-запроса к конечной точке sparql для вставки / обновления.Мне нужен совет о том, как сделать процесс «транзакционным» (я искал, но не полностью понял эту концепцию).

Конфигурации для службы fuseki приведены ниже, в которых указан набор данных в каталоге tdb /.Сервис работает нормально некоторое время.Затем однажды я обнаружил логи в своем проекте Python, которые показывают, что запрос конечной точки fuseki не удался.В то же время служба Fuseki сообщает

org.apache.jena.dboe.DBOpEnvException: неизвестный тип блока для 0

для всех видов запросов.Результаты моего веб-поиска позволяют предположить, что причиной может быть то, что «Возможная причина заключается в том, что вы использовали нетранзакционный метод в прошлом и не сбросили изменения на диск один раз, или приложение упало».

Соответствующие веб-страницы:

http://mail -archives.apache.org / mod_mbox / jena-users / 201504.mbox / <5541034B.3000304@gmail.com>

http://mail-archives.apache.org/mod_mbox/jena-users/201603.mbox/%3C56F4412C.8010002@apache.org%3E

# Service Configuration

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

<#serviceKgService>   a           fuseki:Service ;
fuseki:name                       "my_project" ;
fuseki:dataset                    <#dataset> ;
fuseki:serviceQuery               "query" , "sparql" ;
fuseki:serviceReadGraphStore      "get" ;
fuseki:serviceReadWriteGraphStore "data" ;
fuseki:serviceUpdate              "update" ;
fuseki:serviceUpload              "upload" .

<#dataset> rdf:type ja:RDFDataset ;
ja:defaultGraph <#model_inf> .

<#model_inf> a ja:InfModel ;
ja:baseModel <#tdbGraph> ;
ja:reasoner [
ja:reasonerURL <http://jena.hpl.hp.com/2003/GenericRuleReasoner> ; 
ja:rulesFrom <file:my_rules.ttl> ;
].

<#tdbGraph> rdf:type tdb2:GraphTDB ;
tdb2:dataset <#tdbDataset> .

<#tdbDataset> rdf:type tdb2:DatasetTDB ;
tdb2:location "tdb" .

[] rdf:type fuseki:Server ;

# Rules
@prefix : <http://kg.example.com/kg_root#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

[transitiveRule: (?p :subLevelOf ?m), (?m :subLevelOf ?q) -> (?p :subLevelOf ?q)]


# Last Queries: I did some replacement, but the key points
# are 1. the first object value is a length-2 chineses string
# 2. the seconds object value is a length-50 english string
select distinct ?x where {
?x <http://kg.example.com/prop/direct/example_prop1> '示例'.
?x <http://kg.example.com/prop/direct/example_prop2> 'xxxxxxxx.xxx.xxxxxx.xxxxxxxxxxxxx_xxxxxxxx_xxxx_xx'.
}

# Error

[2019-01-20 15:51:17] Fuseki     WARN  [5] RC = 500 : No known block type for 0
org.apache.jena.dboe.DBOpEnvException: No known block type for 0
at
org.apache.jena.dboe.base.block.BlockType.extract(BlockType.java:66)
...