1

私は Jena/TDB の初心者です。私がしたいのは、tdbスクリプトまたはJava APIを使用して、サンプルrdf、N3などのファイルからデータをロードすることだけです。tbdloaderCygwin でデータをロードするために使用しようとしています (tdb-0.9.0、Windows XP で IBM Java 1.6)。以下は私が実行したコマンドです:

$ export TDBROOT=/cygdrive/d/Project/Store_DB/jena-tdb-0.9.0-incubating
$ export PATH=$TDBROOT/bin:$PATH

Cygwin の tdbloader で言及されているように、 tdbloader スクリプトで Java のクラスパスも変更しました: java.lang.NoClassDefFoundError :

exec java $JVM_ARGS $SOCKS -cp "PATH_OF_JAR_FILES" "tdb.$TDB_CMD" $TDB_SPEC "$@"

そのため、実行する$ tdbloader --helpとヘルプが正しく表示されます。しかし、私が走るとき

$ tdbloader --loc /cygdrive/d/Project/Store_DB/data1

また

$ tdbloader --loc /cygdrive/d/Project/Store_DB/data1 test.rdf

次の例外が発生しています:

        com.hp.hpl.jena.tdb.base.file.FileException: Failed to open: d:\cygdrive\d\Project\Store_DB\data1\node2id.idn (mode=rw)
        at com.hp.hpl.jena.tdb.base.file.ChannelManager.open$(ChannelManager.java:83)
        at com.hp.hpl.jena.tdb.base.file.ChannelManager.openref$(ChannelManager.java:58)
        at com.hp.hpl.jena.tdb.base.file.ChannelManager.acquire(ChannelManager.java:47)
        at com.hp.hpl.jena.tdb.base.file.FileBase.<init>(FileBase.java:57)
        at com.hp.hpl.jena.tdb.base.file.FileBase.<init>(FileBase.java:46)
        at com.hp.hpl.jena.tdb.base.file.FileBase.create(FileBase.java:41)
        at com.hp.hpl.jena.tdb.base.file.BlockAccessBase.<init>(BlockAccessBase.java:46)
        at com.hp.hpl.jena.tdb.base.block.BlockMgrFactory.createStdFile(BlockMgrFactory.java:98)
        at com.hp.hpl.jena.tdb.base.block.BlockMgrFactory.createFile(BlockMgrFactory.java:82)
        at com.hp.hpl.jena.tdb.base.block.BlockMgrFactory.create(BlockMgrFactory.java:58)
        at com.hp.hpl.jena.tdb.setup.Builder$BlockMgrBuilderStd.buildBlockMgr(Builder.java:196)
        at com.hp.hpl.jena.tdb.setup.Builder$RangeIndexBuilderStd.createBPTree(Builder.java:165)
        at com.hp.hpl.jena.tdb.setup.Builder$RangeIndexBuilderStd.buildRangeIndex(Builder.java:134)
        at com.hp.hpl.jena.tdb.setup.Builder$IndexBuilderStd.buildIndex(Builder.java:112)
        at com.hp.hpl.jena.tdb.setup.Builder$NodeTableBuilderStd.buildNodeTable(Builder.java:85)
        at com.hp.hpl.jena.tdb.setup.DatasetBuilderStd$NodeTableBuilderRecorder.buildNodeTable(DatasetBuilderStd.java:389)
        at com.hp.hpl.jena.tdb.setup.DatasetBuilderStd.makeNodeTable(DatasetBuilderStd.java:300)
        at com.hp.hpl.jena.tdb.setup.DatasetBuilderStd._build(DatasetBuilderStd.java:167)
        at com.hp.hpl.jena.tdb.setup.DatasetBuilderStd.build(DatasetBuilderStd.java:157)
        at com.hp.hpl.jena.tdb.setup.DatasetBuilderStd.build(DatasetBuilderStd.java:70)
        at com.hp.hpl.jena.tdb.StoreConnection.make(StoreConnection.java:132)
        at com.hp.hpl.jena.tdb.transaction.DatasetGraphTransaction.<init>(DatasetGraphTransaction.java:46)
        at com.hp.hpl.jena.tdb.sys.TDBMakerTxn._create(TDBMakerTxn.java:50)
        at com.hp.hpl.jena.tdb.sys.TDBMakerTxn.createDatasetGraph(TDBMakerTxn.java:38)
        at com.hp.hpl.jena.tdb.TDBFactory._createDatasetGraph(TDBFactory.java:166)
        at com.hp.hpl.jena.tdb.TDBFactory.createDatasetGraph(TDBFactory.java:74)
        at com.hp.hpl.jena.tdb.TDBFactory.createDataset(TDBFactory.java:53)
        at tdb.cmdline.ModTDBDataset.createDataset(ModTDBDataset.java:95)
        at arq.cmdline.ModDataset.getDataset(ModDataset.java:34)
        at tdb.cmdline.CmdTDB.getDataset(CmdTDB.java:137)
        at tdb.cmdline.CmdTDB.getDatasetGraph(CmdTDB.java:126)
        at tdb.cmdline.CmdTDB.getDatasetGraphTDB(CmdTDB.java:131)
        at tdb.tdbloader.loadQuads(tdbloader.java:163)
        at tdb.tdbloader.exec(tdbloader.java:122)
        at arq.cmdline.CmdMain.mainMethod(CmdMain.java:97)
        at arq.cmdline.CmdMain.mainRun(CmdMain.java:59)
        at arq.cmdline.CmdMain.mainRun(CmdMain.java:46)
        at tdb.tdbloader.main(tdbloader.java:53)
Caused by: java.io.FileNotFoundException: d:\cygdrive\d\Project\Store_DB\data1\node2id.idn (The system cannot find the path specified.)
        at java.io.RandomAccessFile.open(Native Method)
        at java.io.RandomAccessFile.<init>(RandomAccessFile.java:222)
        at java.io.RandomAccessFile.<init>(RandomAccessFile.java:107)
        at com.hp.hpl.jena.tdb.base.file.ChannelManager.open$(ChannelManager.java:80)
        ... 37 more

node2id.idnファイルが何であるかわかりません。なぜそれが必要なのですか?

4

1 に答える 1

1

このファイルnode2id.idnは、TDB の内部インデックス ファイルの 1 つです。自分で作成または管理する必要があるものではありません。私はtdbloader自分でcygwinを試してみましたが、うまくいきました。2 つの基本的な可能性を考えることができます。

  • ディスクがいっぱいです
  • TDB インデックスが破損しています

これが空の TDB にロードする最初のファイルである場合、2 番目の可能性はほとんどありません。空でない TDB にロードしている場合は、TDB イメージを削除してからやり直してください。TDB 自体は同時書き込みを管理しないことに注意してください。単一の TDB イメージに複数のプロセスが書き込みを行っている場合は、アプリケーション レベルでロックを処理するか、TDB のトランザクションを使用する必要があります。

もちろん、最後の可能性は、ディスクが不安定であるということです。コードを別のマシンで試してみることをお勧めします。

これらの提案のどれも役に立たない場合は、完全な最小限のテスト ケースを Jena ユーザー リストに送信してください。

于 2012-06-13T14:27:13.313 に答える