开发者

JENA: initializing a HSQLDB RDF datastore

开发者 https://www.devze.com 2023-01-25 22:53 出处:网络
I\'m trying to initialize a RDF datastore using Jena and HSQLDB. From http://jena.sourceforge.net/DB/hsql-howto.html I wrote the following code:

I'm trying to initialize a RDF datastore using Jena and HSQLDB. From http://jena.sourceforge.net/DB/hsql-howto.html I wrote the following code:

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();
            }
        }

    }

but when the program was executed, I got the following exception:

 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 Sou开发者_如何学Gorce)
    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

How can I fix this problem ?

Many thanks,

Pierre


The information on Jena indicates they used HSQLDB version 1.8.x or older. You can try HSQLDB 1.8.1.3 which is the latest in the 1.8.x series.


You are strongly recommended to use SDB rather than RDB in Jena these days. Switch to SDB.

As for what is wrong here, at a guess I'd say something about the HSQL syntax is wrong. Maybe HSQL has changed since RDB was written? Could you check to see the actual problem statement?

0

精彩评论

暂无评论...
验证码 换一张
取 消