Как использовать OpenLlet OWL2 (или любой другой) с Jena TDB?

Я уже нашел способ сделать вывод о содержимом тройного хранилища с помощью Openllet Demoer и Jena TDB, но он не кажется оптимальным. Вот мое решение:

Reasoner reasoner = PelletReasonerFactory.theInstance().create();
InfModel infModel = ModelFactory
                        .createInfModel(reasoner, dataset.getNamedModel(KD.URI));

/*
 * To extract the model, a transaction must be open in READ mode.
 */

dataset.begin(ReadWrite.READ);

ModelExtractor me = new ModelExtractor(infModel);

dataset.end();

/*
 * To replace a currently existing named model within the dataset, a transaction must be open in WRITE mode.
 */

dataset.begin(ReadWrite.WRITE);
dataset.replaceNamedModel(KD.URI, me.extractModel());
dataset.commit();
dataset.end();

Это работает, но я хочу узнать о более элегантном способе, чем замена названной модели в наборе данных. В идеальном сценарии я также хотел бы, чтобы вывод был непрерывным (после того, как тройка вставлена ​​в график, данные выводятся автоматически на месте), но я не знаю, возможно ли это.

1 ответ

Решение

Для непрерывного процесса вывода вам необходимо настроить конфигурацию Fuseki.

Вот краткий пример моей конфигурации для постоянной базы данных TDB с рассуждением Openllet.

@prefix :      <http://base/#> . @prefix tdb:  
<http://jena.hpl.hp.com/2008/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#> .

:service_tdb_all  a                   fuseki:Service ;
        rdfs:label                    "LABEL_OF_YOUR_SERVICE" ;
        fuseki:dataset                :dataset ;
        fuseki:name                   "NAME_OF_YOUR_SERVICE" ;
        fuseki:serviceQuery           "query" , "sparql" ;
        fuseki:serviceReadGraphStore  "get" ;
        fuseki:serviceReadWriteGraphStore
                "data" ;
        fuseki:serviceUpdate          "update" ;
        fuseki:serviceUpload          "upload" .

:dataset a ja:RDFDataset ;
  ja:defaultGraph <#modeInf>; .

<#modeInf> a ja:InfModel;
  ja:baseModel <#tdbGraph>;
  ja:reasoner   [
    ja:reasonerClass    "openllet.jena.PelletReasonerFactory" ]
  .  

<#tdbGraph> rdf:type tdb:GraphTDB ;
  tdb:dataset :tdb_dataset_readwrite  .

:tdb_dataset_readwrite  a            
  tdb:DatasetTDB ;  tdb:location 
  "PATH_TO_YOUR_TDB"
  .
Другие вопросы по тегам