2010-11-18 4 views
2

Я пытаюсь инициализировать RDF хранилищу, используя Jena и HSQLDB. Из http://jena.sourceforge.net/DB/hsql-howto.html я написал следующий код:JENA: инициализация HSQLDB RDF хранилищу

import com.hp.hpl.jena.db.DBConnection; 
import com.hp.hpl.jena.db.IDBConnection; 
import com.hp.hpl.jena.db.impl.Driver_HSQL; 
import com.hp.hpl.jena.rdf.model.Model; 
import com.hp.hpl.jena.rdf.model.ModelFactory; 
import com.hp.hpl.jena.rdf.model.ModelMaker; 

public class Test 
    { 
    /** */ 
    private String idbDriver="org.hsqldb.jdbcDriver"; 
    private String idbUrl="jdbc:hsqldb:file:/home/me/DATASTORE.HSQLDB"; 
    private String idbUser="sa"; 
    private String idbPassword=""; 

    /** RDF Model */ 
    private Model model=ModelFactory.createDefaultModel(); 
    /** IDB connection */ 
    private IDBConnection idbConnection=null; 

    public Test() 
     { 

     } 

    public void open() throws Exception 
     { 
     close(); 
     Class.forName(idbDriver); 
     this.idbConnection = new DBConnection(idbUrl, idbUser, idbPassword, "HSQL"); 
     ModelMaker maker = ModelFactory.createModelRDBMaker(this.idbConnection) ; 
     this.model=maker.createDefaultModel(); 
     } 

    public void close()throws Exception 
     { 
     this.model=null; 
     if(this.idbConnection!=null) 
      { 
      // http://jena.sourceforge.net/DB/hsql-howto.html 
      Driver_HSQL.class.cast(this.idbConnection.getDriver()).shutdown(); 
      this.idbConnection.close(); 
      this.idbConnection=null; 
      } 
     } 

    public Model getModel() 
     { 
     return model; 
     } 

    public static void main(String[] args) 
     { 
     try { 
      Test app=new Test(); 
      app.open(); 
      app.close(); 
      } 
     catch (Exception e) 
      { 
      e.printStackTrace(); 
      } 
     } 

    } 

, но когда программа была выполнена, я получил следующее исключение:

INFO [main] (?:?) - open start 
INFO [main] (?:?) - open end 
INFO [main] (?:?) - DataFileCache.close(true) : start 
INFO [main] (?:?) - DataFileCache.close() : save data 
INFO [main] (?:?) - DataFileCache.close() : close 
INFO [main] (?:?) - open start 
INFO [main] (?:?) - open end 
WARN [main] (DriverRDB.java:430) - Problem formatting database 
java.sql.SQLException: unexpected token: PRIMARY : line: 3 
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) 
    at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source) 
    at com.hp.hpl.jena.db.impl.SQLCache.runSQLGroup(SQLCache.java:562) 
    at com.hp.hpl.jena.db.impl.DriverRDB.formatAndConstructSystemSpecializedGraph(DriverRDB.java:427) 
    at com.hp.hpl.jena.db.impl.DriverRDB.getSystemSpecializedGraph(DriverRDB.java:305) 
    at com.hp.hpl.jena.db.impl.DriverRDB.getDefaultModelProperties(DriverRDB.java:834) 
    at com.hp.hpl.jena.db.DBConnection.getDefaultModelProperties(DBConnection.java:164) 
    at com.hp.hpl.jena.db.impl.GraphRDBMaker.consGraph(GraphRDBMaker.java:111) 
    at com.hp.hpl.jena.db.impl.GraphRDBMaker.getGraph(GraphRDBMaker.java:52) 
    at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createDefaultModel(ModelMakerImpl.java:58) 
    at Test.open(Test.java:34) 
    at Test.main(Test.java:58) 
Caused by: org.hsqldb.HsqlException: unexpected token: PRIMARY : line: 3 
    at org.hsqldb.error.Error.parseError(Unknown Source) 
    at org.hsqldb.ParserBase.unexpectedToken(Unknown Source) 
    at org.hsqldb.ParserDDL.compileCreateTableBody(Unknown Source) 
    at org.hsqldb.ParserDDL.compileCreateTable(Unknown Source) 
    at org.hsqldb.ParserDDL.compileCreate(Unknown Source) 
    at org.hsqldb.ParserCommand.compilePart(Unknown Source) 
    at org.hsqldb.ParserCommand.compileStatements(Unknown Source) 
    at org.hsqldb.Session.executeDirectStatement(Unknown Source) 
    at org.hsqldb.Session.execute(Unknown Source) 
    ... 12 more 
com.hp.hpl.jena.shared.JenaException: The database appears to be unformatted or corrupted and 
an attempt to automatically format the database has failed 

    at com.hp.hpl.jena.db.impl.DriverRDB.getSystemSpecializedGraph(DriverRDB.java:311) 
    at com.hp.hpl.jena.db.impl.DriverRDB.getDefaultModelProperties(DriverRDB.java:834) 
    at com.hp.hpl.jena.db.DBConnection.getDefaultModelProperties(DBConnection.java:164) 
    at com.hp.hpl.jena.db.impl.GraphRDBMaker.consGraph(GraphRDBMaker.java:111) 
    at com.hp.hpl.jena.db.impl.GraphRDBMaker.getGraph(GraphRDBMaker.java:52) 
    at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createDefaultModel(ModelMakerImpl.java:58) 
    at Test.open(Test.java:34) 
    at Test.main(Test.java:58) 
Caused by: com.hp.hpl.jena.db.RDFRDBException: java.sql.SQLException: unexpected token: PRIMARY : line: 3 
    at com.hp.hpl.jena.db.impl.DriverRDB.formatAndConstructSystemSpecializedGraph(DriverRDB.java:477) 
    at com.hp.hpl.jena.db.impl.DriverRDB.getSystemSpecializedGraph(DriverRDB.java:305) 
    ... 7 more 

Как я могу исправить эту проблему?

Большое спасибо,

Pierre

ответ

3

Информация о Jena указывает, что они использовали HSQLDB версии 1.8.x или старше. Вы можете попробовать HSQLDB 1.8.1.3, который является последним в серии 1.8.x.

+0

моя версия была hsqldb-2.0.1-rc2 – Pierre

+0

Я просмотрел их код, который показывает правильную поддержку HSQLDB 1.8.0.x. Поэтому вы должны получить результаты с 1.8.1.3, который совместим с использованием 1.8.0.10. – fredt

2

Вы сильно рекомендуется использовать SDB, а не RDB в Йене в эти дни. Переключитесь на SDB.

Что касается того, что здесь не так, предположим, я бы сказал, что что-то о синтаксисе HSQL неверно. Может быть, HSQL изменился после написания RDB? Не могли бы вы проверить фактическое заявление о проблеме?