Jena TDB2 Assembler загружает данные из файла

Привет, ребята, я пытаюсь загрузить данные с помощью ассемблера TDB2.

@prefix cq:        <http://www.example.co.uk/hya>
@prefix tdb:       <http://jena.apache.org/2016/tdb#> .
@prefix rdf:       <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:      <http://www.w3.org/2000/01/rdf-schema#> .
@prefix ja:        <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix text:      <http://jena.apache.org/text#>
@prefix lm:        <http://jena.hpl.hp.com/2004/08/location-mapping#>
@prefix dc:        <http://purl.org/dc/elements/1.1/>
 
[] ja:loadClass "org.apache.jena.tdb2.TDB2" .
tdb:DatasetTDB2  rdfs:subClassOf  ja:RDFDataset .
tdb:GraphTDB2    rdfs:subClassOf  ja:Model .

<#dataset> rdf:type         tdb:DatasetTDB2 ;
   tdb:location "DB" ;
   tdb:unionDefaultGraph true ;
   .

<#data1> rdf:type tdb:GraphTDB ;
    tdb:dataset <#dataset> ;
    tdb:graphName <http://www.example.co.uk/hya/qdata> ;
    ja:content [ja:externalContent <file:////Volumes/data/project/src/test/resources/metadata.ttl>;];
    .  

который не работает, когда я пытаюсь собрать набор данных

Dataset dataset = TDB2Factory.assembleDataset("/Volumes/data/project/src/main/resources/tdb/tdb-assembler.ttl");
        if(dataset ==null) {
            log.debug("failed");
        }else {
            

          1. Model model = dataset.getUnionModel();
          2. Model model = dataset.getNamedModel("<dataset>");
          3. Model model = dataset.getDefaultModel();

            dataset.begin(ReadWrite.WRITE);
            model.write(System.out, Lang.TTL.getName());
        }

Я безуспешно пытался напечатать модель 3 разными способами.

Может ли кто-нибудь предложить лучший способ решения этой проблемы, и если есть какая-либо справочная документация по TDB2.

В идеале мне нравится настраивать его позже со следующими

:indexed-dataset
    rdf:type     text:TextDataset ;
    text:dataset   <#dataset> ;
    text:index     <#indexLuceneText> ;
    .

# Text index description
<#indexLuceneText> a text:TextIndexLucene ;
    text:directory <file:TDB/LUCENE> ;
    text:entityMap <#entMap> ;
    text:storeValues true ; 
    text:analyzer [ a text:StandardAnalyzer ] ;
    text:queryAnalyzer [ a text:KeywordAnalyzer ] ;
    text:queryParser text:AnalyzingQueryParser ;
    text:multilingualSupport true ;
 .

<#entMap> a text:EntityMap ;

по схеме на ассемблере

каждая модель может иметь некоторый контент, указанный объектом Content.

ja:content a rdf:Property
    ; rdfs:label "Assembler.content"
    ; rdfs:comment
        """specifies that the subject Loadable is to be loaded with
        all the contents specified by the object Content.
        """
    ; rdfs:domain ja:Loadable
    ; rdfs:range ja:Content
    .

person Zafar Ali    schedule 09.12.2020    source источник


Ответы (1)


Постоянные базы данных (TDB1, TDB2) не обрабатывают ja:content, потому что это директива для загрузки данных каждый раз в модель памяти.

Вместо этого загрузите данные с помощью загрузчика TDB заранее.

Для текстового idnex загрузите индекс с помощью команды textindexer.

https://jena.apache.org/documentation/query/text-query.html

person AndyS    schedule 09.12.2020
comment
Вы меня запутали, для чего это тогда ja:content [ja:externalContent ‹file:////Volumes/data/project/src/test/resources/metadata.ttl›;]; Извините, если я туплю. Я думаю, что я понял это неправильно. Пожалуйста, поправьте меня или укажите на документацию, которая объясняет это для людей. - person Zafar Ali; 10.12.2020
comment
ja:content применяется к моделям в памяти, а не к постоянным базам данных. Загружаемые файлы — это то, что загружается при каждом запуске. - person AndyS; 10.12.2020