Не удалось загрузить файлы черепахи с помощью файла ассемблера jena

Я определяю файл ассемблера с именем dataset2.ttl. Содержимое этого файла:

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

[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .
tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .
tdb:GraphTDB    rdfs:subClassOf  ja:Model .
<#dataset> rdf:type         tdb:DatasetTDB ;
   tdb:location "DB" ;
   tdb:unionDefaultGraph true ;
   .

<#data1> rdf:type tdb:GraphTDB ;
    tdb:dataset <#dataset> ;
    tdb:graphName <http://example.org/data1> ;
    ja:content [ja:externalContent <file:///C:/Users/data/data1.ttl>;];
    .

Связанный код jena для создания базы данных:

public class TDB {

public static void main(String[] args) {
    Dataset ds = null;
    try {
        ds = TDBFactory.assembleDataset("Dataset2.ttl");

        if(ds == null) {

            System.out.println("initial tdb failed");
        } else {
            System.out.println("Default Model:");

            Model model = ds.getDefaultModel();

            ds.begin(ReadWrite.WRITE);
            model.write(System.out, "TURTLE");
        }
    } finally {
        if(ds != null) {
            ds.close();
        }
    }
}

Содержимое data1.ttl:

@prefix : <http://example.org/> .
@prefix foaf:   <http://xmlns.com/foaf/0.1/> .

:alice
a           foaf:Person ;
foaf:name   "Alice" ;
foaf:mbox   <mailto:[email protected]> ;
foaf:knows  :bob ;
foaf:knows  :charlie ;
foaf:knows  :snoopy ;
.

:bob
foaf:name   "Bob" ;
foaf:knows  :charlie ;
.

:charlie
foaf:name   "Charlie" ;
foaf:knows  :alice ;
.

Набор данных был создан с использованием этого кода. Однако содержимое файла «data1.ttl» не было прочитано в модель. В чем проблема моего кода?


person WuZhu    schedule 07.02.2017    source источник
comment
Какие сообщения вы видите в консоли Initial tdb failed или Default Model:?   -  person Omar Elabd    schedule 07.02.2017
comment
В консоли отображается: Модель по умолчанию:.   -  person WuZhu    schedule 07.02.2017


Ответы (3)


У вас также есть

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

а также

ds = TDBFactory.assembleDataset("Dataset2.ttl");

поэтому вы просите Йену собрать набор данных. Этот набор данных будет <#dataset> (найти по типу). Это не связано с графом, который вы определяете, поэтому он игнорируется; вы можете удалить эту часть. Сборка набора данных — это способ сделать это.

У вас есть tdb:unionDefaultGraph true, поэтому график по умолчанию для запроса представляет собой комбинацию всех именованных графиков в наборе данных.

Выберите один с model.getNamedModel.

Если вы используете SPARQL, используйте ключевое слово GRAPH.

person AndyS    schedule 11.02.2017
comment
Спасибо за Ваш ответ! - person WuZhu; 13.02.2017

Я бы попробовал проверить ваш файл ttl в Интернете, чтобы убедиться, что они оба dataset2.ttl и data.ttl действительны. Я заметил, что вы, кажется, добавляете дополнительную точку с запятой в конце, когда она не нужна (она должна заканчиваться только точкой).

попробуйте изменить строку на эту:

ja:content [ja:externalContent <file:///C:/Users/data/data1.ttl>] .

person Omar Elabd    schedule 07.02.2017
comment
Я изменил его как ваш. Однако результат все равно тот же. - person WuZhu; 07.02.2017
comment
Я обновил файл data1.ttl. Пожалуйста, посмотрите. Спасибо! - person WuZhu; 07.02.2017
comment
Я также попытался бы изменить путь к файлу, попробовать URL-адрес или относительный путь и посмотреть, работает ли это, например, ‹file:data/data1.ttl› - person Omar Elabd; 07.02.2017

<#data1> rdf:type tdb:GraphTDB ;
    tdb:dataset <#dataset> ;
    tdb:graphName <http://example.org/data1> ;
    ja:content [ja:externalContent <file:///C:/Users/data/data1.ttl>;];
.

Обратите внимание на tdb:GraphTDB, что означает присоединение к графику в базе данных. Он не загружает данные с ja:content.

В качестве постоянного хранилища ожидается, что данные уже загружены, например, tdbloader, а не каждый раз, когда используется ассемблер.

person AndyS    schedule 07.02.2017
comment
Спасибо за Ваш ответ. Есть ли способ загрузить данные в TDB (не в память) с помощью файла ассемблера? - person WuZhu; 08.02.2017
comment
Не могли бы вы привести пример того, что загруженные данные соответствуют описанию в файле ассемблера. - person WuZhu; 08.02.2017
comment
Ожидается, что данные уже загружены. Постоянная база данных не предназначена для загрузки каждый раз. Либо используйте график памяти и загрузите его, либо сначала загрузите базу данных. - person AndyS; 08.02.2017
comment
Спасибо за Ваш ответ. В настоящее время файл загружен в график памяти. Затем я использую набор данных для хранения этих именованных графиков. Однако, когда я запрашиваю их с помощью именованного графа SPARQL, результат содержит всю информацию из набора данных, не ограниченную конкретным именованным графом. - person WuZhu; 09.02.2017