2011-12-28 5 views
2

Я пытаюсь выполнить запрос на Java с помощью Jena с использованием TDB. Так что в основном я получил n3 имя файла song.n3 и используя этот файл, я хочу использовать его с TDB. Поэтому я создал каталог, который создается в моей папке Java1 (папка проекта Netbeans), а затем у меня есть источник фактического файла n3. После запуска этого кода у меня появляется ошибка «java.lang.NoClassDefFoundError». В основном отладка кода приводит к ошибке, вызванной линией: Dataset dataset = TDBFactory.createDataset (directory) ;. Я не слишком уверен, почему эта ошибка вызвана, может быть, это потому, что мой каталог пуст без модели.TDB Jena Querying

public static void main(String[] args) throws IOException { 
    String directory = "./tdb"; 
    Dataset dataset = TDBFactory.createDataset(directory); 
    Model tdb = dataset.getDefaultModel(); 
    String source = "C:\\Users\\Name\\Documents\\NetBeansProjects\\Java1\\src\\song.n3"; 
    FileManager.get().readModel(tdb, source, "N3"); 
    String queryString = "PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT * WHERE { ?x owl:sameas ?y }"; 

    Query query = QueryFactory.create(queryString); 

    QueryExecution qe = QueryExecutionFactory.create(query, tdb); 
    ResultSet results = qe.execSelect(); 

    ResultSetFormatter.out(System.out, results, query); 

    qe.close(); 
} 
} 

ответ

3

Это должно быть проблема с CLASSPATH, когда я использую TDB У меня есть следующий скрипт для загрузки библиотеки Jena-БРТ в моем пути к классам ..

#!/bin/bash 
CP="." 
for i in ./TDB-0.8.9/lib/*.jar ; do 
    CP=$CP:./TDB-0.8.9/lib/$i 
done 
export CLASSPATH=$CP 

Это bash, но очень легко для перевода в сценарий Windows. В нижней строке убедитесь, что все банки в каталоге /lib/ находятся в CLASSPATH. В любом случае, это поможет вам дать полный java.lang.NoClassDefFoundError, где показан класс, который не найден, что даст вам подсказку о том, чего он не хватает. Вероятно, некоторые из файлов журнала, которые не отправляются в дистрибутив jena.

Также следите за тем, что owl:sameas предикат. SPARQL и RDF чувствительны к регистру, а правильный предикат - owl:sameAs.

+1

Это было бы намного проще сделать: 'for i in ./TDB-0.8.9/lib/*.jar; do' - нет необходимости в fork суб-оболочки для запуска 'ls'. Конечно, в Java 7 вы можете иметь подстановочные знаки в CLASSPATH, поэтому вам даже не нужно это делать. –

+0

Верно, спасибо Яну. Я не понимаю, почему я это сделал, некоторые странные копии и вставки из другого места. Измененный! –

 Смежные вопросы

  • Нет связанных вопросов^_^