1

RDF として OWL オントロジー ファイルがあり、データを TDB に保存し、推論を使用したいと考えています。実際、これは今のところ単純に聞こえます:)

しかし、ここに私が混乱している点があります:

TDB を作成し、いくつかのステートメントを SPARQL 経由で保存しました。次に、モデルと OWL Reasoner を介して TDB をロードしようとしました。

OntModelSpec ontModelSpec = OntModelSpec.OWL_MEM;
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
ontModelSpec.setReasoner(reasoner);



Model schemaModel = FileManager.get().loadModel("D:/Users/jim/Desktop/ontology/schema.rdf");
OntModel schema = ModelFactory.createOntologyModel( ontModelSpec,  schemaModel);

Location location = new Location("D:/Users/jim/Desktop/jena-fuseki-0.2.5/DB");
Dataset dataset = TDBFactory.createDataset(location);
Model model = dataset.getDefaultModel();

OntModel ontModel = ModelFactory.createOntologyModel(ontModelSpec, model);

API 経由で新しいリソースを作成すると、TDB に保存されません。そして、SPARQL を介して追加されたステートメントを確認できませんか?! SPAQRL ステートメントには、SPARQL で追加したエントリのみが表示されます

QueryExecution qExec = QueryExecutionFactory.create(
     StrUtils.strjoinNL("SELECT ?s ?p ?prop",
                "WHERE {?s ?p ?prop}"),
                dataset) ;
ResultSet rs = qExec.execSelect() ;
try {
ResultSetFormatter.out(rs) ;
} finally { qExec.close() ; System.out.println("closed connection");} 

これは、API で追加されたリソースのみを返します

System.out.print("インスタンス: " + ontModel.getResource(NS + "TestItem"));

そして、これを呼び出すと:

ExtendedIterator<Statement> iter = ontModel.listStatements();

次の例外が発生します。

誰かがその行動を説明できますか? または、OntModel を使用してスキーマと日付を TDB で正しい方法で分離する方法を教えてください。

4

1 に答える 1

0

部分的な答え:

 org.openjena.atlas.lib.InternalErrorException: Invalid id node for subject (null node): ([0000000000000067], [0000000000000093], [00000000000000C8])

トランザクションなしで TDB を使用しています - 終了する前に TDB.sync を追加して、変更をディスクにフラッシュしてみてください。

于 2013-03-26T16:54:47.297 に答える