3

Fuseki サーバーにロードされているフクロウ ファイルに Java コードを介してデータを挿入しようとしています。更新クエリはエラー メッセージを表示しません。しかし、フクロウファイルは更新されません。私はjenaライブラリを使用しており、Javaコードを使用して実装しています。私のコードで間違っているのは何ですか?

    public boolean addLecturerTriples(String fName, String lName,
    String id, String module) {
    try{
    ArrayList<String> subject = new ArrayList<String>();
    ArrayList<String> predicate = new ArrayList<String>();
    ArrayList<String> object = new ArrayList<String>();

    subject.add("<http://people.brunel.ac.uk/~csstnns/university.owl#"+fName+">");
    predicate.add("<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>");
    object.add("<http://people.brunel.ac.uk/~csstnns/university.owl#Lecturer>");

    for(int i = 0; i < subject.size(); i++){
        String qry = "INSERT DATA"+
                "{"+
                subject.get(i)+"\n"+
                predicate.get(i)+"\n"+
                object.get(i)+"\n"+
                "}";

        UpdateRequest update  = UpdateFactory.create(qry);
        UpdateProcessor qexec = UpdateExecutionFactory.createRemote(update, "http://localhost:3030/ds/update");
        qexec.execute();
    }
    }catch(Exception e){
        return false;
    }
    return true;
}
4

1 に答える 1

1

Fuseki の構成と OWL ファイルを Fuseki にロードする方法の詳細を含めた、最小限の完全な例を提供していただけると助かります。

ただし、特定の構成を使用しておらず、Fuseki を次のように起動していると仮定します。

java -jar fuseki-server-VER.jar --update --loc /path/to/db /ds

ここで行ったことは、更新を有効にして Fuseki を起動し、その場所/path/to/dbをディスク上の TDB データベースの場所として使用/dsし、データセットの URL を使用することです。

ブラウザを開いてクリックスルーControl Panel > /dsし、ファイルのアップロード機能を使用して OWL ファイルをアップロードします。ファイルをアップロードすると、ファイルは Fuseki に読み込まれ、データセットにコピーされます。この例では、データセットは にあるディスク上の TDB データベースです/path/to/db

Fuseki はファイルからデータセットにデータをコピーしただけなので、元のファイルへの参照は保持されないことを理解することが重要です。

次に、SPARQL Update フォームを使用してデータを追加します (または、この場合は Java コードを介してこれを行います)。更新はデータセットに適用されます。繰り返しますが、この例では、元のファイルへの参照/path/to/dbないディスク上の TDB データベースです。したがって、元のファイルは変更されません。

SPARQL Update を使用して元のファイルを更新する

Fuseki が必須でない場合は、ファイルをローカル メモリにロードして、代わりに更新を実行することができます。

Model m = ModelFactory.createDefaultModel();
m.read("example.owl", "RDF/XML");

// Prepare your update...

// Create an UpdateExecution on the local model
UpdateProcessor processor = UpdateExecutionFactory.create(update, GraphStoreFactory.create(m));
processor.execute();

// Save the updated model 
updated.write(new FileOutputStream("example.owl"), "RDF/XML");

ただし、Fuseki を使用したい場合、または Fuseki を使い続けなければならない場合は、Fuseki から変更されたグラフを取得し、ファイルに書き戻すことで、元のファイルを更新できます。

DatasetAccessor accessor = DatasetAccessorFactory.createHTTP("http://localhost:3030/ds/data");

// Download the updated model
Model updated = accessor.getModel();

// Save the updated model over the original file
updated.write(new FileOutputStream("example.owl"), "RDF/XML");

getModel("http://graph")この例では、オーバーロードを使用して関連する名前付きグラフをロードしない場合、OWL ファイルがデフォルト グラフにロードされていることを前提としています。

于 2014-07-23T13:03:16.060 に答える