Я использую 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)