1

Allegro Graph で連邦政府の検索を行うための抽象的なリポジトリを作成しようとしています。別のサーバーに保存されているリポジトリに接続できます。ただし、フェデレートを使用してそれらを結合しようとすると、2番目のサーバーでリポジトリが見つからないというエラーがスローされます。異なるサーバーに保存されている 2 つのリポジトリを組み合わせて、連邦政府の検索を実行できる抽象的なリポジトリにする方法はありますか?

    AGServer server = new AGServer(SERVER_URL1, USERNAME1, PASSWORD1);
    AGRepository repo1 = server.getRootCatalog().openRepository(REPO1);


    AGServer server2 = new AGServer(SERVER_URL2, USERNAME2, PASSWORD2);
    AGRepository repo2 = server2.getRootCatalog().openRepository(REPO2);

    System.out.println(repo1.getConnection().size());
    System.out.println(repo2.getConnection().size());

    AGAbstractRepository combinedRepo = server.federate(repo1, repo2);
    combinedRepo.initialize();

    combinedRepo.getConnection(); //this return an exception


    Exception in thread "main" org.openrdf.repository.RepositoryException: org.openrdf.repository.RepositoryException: Repository not found with ID: REPO2
        at com.franz.agraph.repository.AGCatalog.openRepository(AGCatalog.java:264)
...
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
    Caused by: org.openrdf.repository.RepositoryException: Repository not found with ID: REPO2
        at com.franz.agraph.repository.AGCatalog.openRepository(AGCatalog.java:260)
        ... 6 more

ティア

4

2 に答える 2

1

Sesame フレームワークは、Federation Sail(異なるサーバー/場所に存在する) 複数の Sesame リポジトリを 1 つの仮想ストアにラップするために使用できる をサポートしています。Allegrograph の特注のフェデレーション コードを使用する代わりに、それを試して使用することができます (単一のサーバー上の複数のリポジトリのみに対応しているようです)。

 // create your AG repositories the same way
 AGServer server = new AGServer(SERVER_URL1, USERNAME1, PASSWORD1);
 AGRepository repo1 = server.getRootCatalog().openRepository(REPO1);

 AGServer server2 = new AGServer(SERVER_URL2, USERNAME2, PASSWORD2);
 AGRepository repo2 = server2.getRootCatalog().openRepository(REPO2);

 // Use a Sesame Federation to combine them
 org.openrdf.sail.federation.Federation federation = new Federation();
 federation.addMember(repo1);
 federation.addMember(repo2);
 federation.setReadOnly(true); // assuming you only use it for query

 Repository combinedRepo = new SailRepository(federation);
 combinedRepo.initialize();

(免責事項: 上記のコードは頭のてっぺんから書いたもので、これを機能させるために必要な構成の詳細を見落としている可能性がありますが、要点を理解していただければ幸いです)

別の方法として、SERVICE 句を使用して、フェデレーションに対する SPARQL のサポートを利用することもできます。ただし、これには、クエリする各リポジトリが SPARQL エンドポイントとして HTTP 経由でアクセスできる必要があります。

于 2014-02-18T21:01:35.497 に答える
0

Allegro Graph の AGServer を使用して統合リポジトリを作成できました。これが役立つと思われる人のために、私が行った方法は次のとおりです。

AGVirtualRepository s = server2.virtualRepository("<http://<ip address>:10035/repositories/repo1> + <http://<ip address>:10035/repositories/repo2>");
AGRepositoryConnection combinedConn = s.getConnection();
于 2014-02-19T09:27:47.437 に答える