2017-02-07 8 views
1

Я определяю файл ассемблера с именем dataset2.ttl. Содержание этого файла:Не удалось загрузить файлы черепах с помощью файла ассемблера jena

@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 код для создания datase является:

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» не было прочитано в модели. В чем проблема моего кода?

+0

Какие сообщения вы видите в консоли «initial tdb failed» или «Default Model:»? –

+0

В консоли отображается: «Модель по умолчанию:». – WuZhu

ответ

1

Вы также

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

и

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

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

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

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

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

+0

Спасибо за ваш ответ! – WuZhu

0

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

попробуйте изменить строку следующим образом:

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

+0

Я изменил его как ваш. Однако результат все тот же. – WuZhu

+0

Я обновил файл data1.ttl. Пожалуйста, смотрите. Благодаря! – WuZhu

+0

Я бы также попробовал изменить путь к файлу, попробовать URL или относительный путь и посмотреть, работает ли это, например

0
<#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, причем не каждый раз, когда используется ассемблер.

+0

Спасибо за ваш ответ. Есть ли способ загрузить данные в TDB (а не в память) с помощью файла ассемблера? – WuZhu

+0

Не могли бы вы привести пример, согласно которому загруженные данные соответствуют описанию в файле ассемблера. – WuZhu

+0

Ожидается, что данные уже загружены. Постоянная база данных не загружается каждый раз. Либо используйте график памяти, либо загрузите его, либо сначала загрузите базу данных. – AndyS