2016-09-29 14 views
2

エンティティのドキュメントストアとしてMarklogicを使用しているアプリケーションを開発しています。セマンティクスを使用してエンティティ間の関係を確立する予定です。Java APIを使用してmarklogicでトリプルを作成

例:会社はエンティティであり、「ABC Corporation」は会社エンティティのインスタンスです。同様に、トラックはエンティティであり、「Volvo 101」はトラックエンティティのインスタンスです。

ユーザーがUIでビジネスエンティティのインスタンスを作成するときに、次のようにトリプルを作成してこれらの関係を定義します。

しかし、私たちがGraphManager.merge()を使うときは、このメソッドはsubject、predicate、objectが同じであるたびにグラフに新しいトリプルを追加するので問題に直面しています。既存のトリプルは上書きされません。

また、write/writeAsメソッドを試しても、同じ動作が表示されます。

また、Marklogicによって提供されたゴマとjena apiを見ましたが、適切なドキュメントが見つかりませんでした。セマンティクスの操作をたくさん行い、トリプルを動的に構築しようとしているのであれば、セマンティクスに使うのにもっと良いAPIですか? Marklogic-java-apiまたはゴマまたはjena?

コードスニペット:

String subjectURI = "http://example.org/entityinstance/ABCCorporation"; 
String predicateURI = "http://example.org/relation/instanceof"; 
String objectURI = "http://example.org/entity/company"; 
String graphURI = "http://example.org/graph/Relation"; 

public void createTriple(String subjectURI, String predicateURI, 
     String objectURI, String graphURI) 

{ 
    DatabaseClient client = markLogicConnectionHelper.getMLConnection(); 

    String tripleStore = "<" + subjectURI + ">" + " " + " <" + predicateURI 
      + ">" + " " + "<" + objectURI + ">" + "."; 

    GraphManager graphManager = client.newGraphManager(); 
    graphManager.setDefaultMimetype(RDFMimeTypes.NTRIPLES); 

    graphManager.merge(graphURI, new StringHandle(tripleStore)); 

} 

答えて

3

あなたはトリプルを構築したい場合、あなたは、JavaのためのRDFのAPIを使用したいと思うでしょう。 jenaとゴマはそのようなAPIの2つです。ごまはrdf4jに変身しました。

これらのAPIはどちらも、トリプルとグラフを作成し操作するための優れた方法を提供します。 marklogic-jenaを使用している場合、Jenaの永続性メカニズムを使用してMarkLogicにこれらのグラフを保存できます。

DatabaseClient client = DatabaseClientFactory.newClient(...); 
JenaDatabaseClient c = new JenaDatabaseClient(client); 
MarkLogicDatasetGraph dsg = new MarkLogicDatasetGraph(c); 

dsg.add(NodeFactory.createURI("http://..."), 
    NodeFactory.createURI("http://example.org/..."), 
    NodeFactory.createURI("http://..."), 
    NodeFactory.createLiteral("10", XSDinteger)); 

あなたは、このメソッドは迅速になりたい場合は、しかし、私はあなたがmarklogic・イエナ1.0.2または3.0.2の次期リリースの使用をお勧めします。

あなたが言及しているmergeGraphメソッドは、トリプルを追加します。 replaceGraphを使用してトリプルを置き換えることができます。トリプルストアについての注意点は、グラフのキー/バリューストアのような点です。グラフ名を使用して、セットとして更新するトリプルセットを決定します。 jena JavaDocsでは、一度にグラフ全体を操作できることがわかります。

関連する問題