Нет значений в переменных при запросе хранилища кунжута?

Я хочу использовать файл .nt в качестве репозитория SESAME и запрашивать его (также называемый режимом локальной федерации). Программа написана следующим образом.

import java.io.File;
import java.util.List;
import org.openrdf.OpenRDFException;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.model.Value;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.query.BindingSet;
import org.openrdf.query.QueryLanguage;
import org.openrdf.repository.Repository;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.sail.nativerdf.NativeStore;

public class QuerySesameLocal {

public static void main(String[] args) {

    try
    {

        File dataDir = new File("/home/aidb/out0.nt");
        Repository repo = new SailRepository(new NativeStore(dataDir));
        repo.initialize();

               RepositoryConnection con = repo.getConnection();
               try {
                  String queryString = "SELECT ?x ?y WHERE { ?x ?p ?y } ";
                  TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString);

                  TupleQueryResult result = tupleQuery.evaluate();
                  try {

                      if(result.hasNext())
                      {
                          System.out.println("result present");
                      }

                      System.out.println("checkpoint 1");
                        BindingSet bindingSet = result.next();
                        Value valueOfX = bindingSet.getValue("x");
                        Value valueOfY = bindingSet.getValue("y");

                        System.out.println(valueOfX.toString());
                          System.out.println("checkpoint 2");

                        // do something interesting with the values here...
                  }
                  finally {
                      result.close();
                  }
               }
               finally {
                  con.close();
               }
            }
            catch (OpenRDFException e) {
               // handle exception
            }


}

}

Эта программа вообще не возвращает никаких результатов. Я пытался понять ошибку, но не мог понять. Кто-нибудь может подсказать, что не так с программой?


person harry potter    schedule 04.01.2014    source источник
comment
Замените // handle exception на throw new RuntimeException(e);, затем снова запустите программу и прочитайте/вставьте полную трассировку стека исключения, если таковая имеется. Игнорирование исключений — лучший способ не знать, что происходит. Также научитесь пользоваться отладчиком. Это не так сложно.   -  person JB Nizet    schedule 04.01.2014
comment
@harry potter кстати, я заметил, что вы задали ряд вопросов по SO и получили несколько ответов, но еще не проголосовали/не приняли ни один из них. Я бы посоветовал вам сделать это (не только по этому вопросу здесь, но и по любому из ваших старых). Взгляните на это: что мне делать, когда кто-то ответит?   -  person Jeen Broekstra    schedule 04.01.2014


Ответы (1)


Вы не можете просто инициализировать Sesame Native Store с помощью файла .nt (или любого другого файла rdf), как это.

Аргумент dataDir конструктора NativeStore — это каталог, в котором собственное хранилище будет создавать свои индексы и хранить добавленные данные — кстати, оно хранит эти данные в своем собственном внутреннем формате, а не в виде файлов .nt. Поэтому вы должны передать ему каталог, а не файл (на самом деле я немного удивлен, что вы не получаете ошибку при выполнении этого кода).

После того, как репозиторий создан и инициализирован, вы должны добавить в него файл. Вы делаете это, открывая RepositoryConnection и используя один из его add методов для передачи ему файла. См. документацию пользователя Sesame, особенно раздел как добавить данные в репозиторий.

person Jeen Broekstra    schedule 04.01.2014
comment
Как уже упоминалось, я инициализировал репозиторий, получил соединение, а затем передал ему файл .nt. Это работало нормально. Большое спасибо! - person harry potter; 06.01.2014