2011-04-20 5 views
3

몇 가지 분석을하기 위해 정 그래프에 RDF 데이터를로드하고 있습니다. 내가 링크 지정하기위한 지원 클래스를 생성 DirectedGraph g = new DirectedSparseGraph<String,GraphLink>();정 그래프의 RDF 데이터 표현하기

: 다음

public class GraphLink { 
    String uri; 
    Float weight; 
} 

내가 이런 식으로 채 웁니다 :

for each rdf triple <s,p,o>{ 
    g.addVertex(s) 
    g.addVertex(o) 

    GraphLink link = new GraphLink() 
    link.uri = pred 
    link.weight = some weight; 
    g.addEdge(link, s, o) 
} 

인가 그래서 내가 가진 새로운 그래프를 만들 이것이 효과적인 방법인가 아니면 더 좋은 방법이 있는가? 가장자리의 표현은 매우 직관적이지만, 내가 할 경우 :

g.addEdge(p, s, o) 

나는 중복 가장자리의 예외를 얻을.

힌트가 있습니까?

UPDATE :이 코드는 잘 작동하는 것 같다 :

DirectedGraph<RDFNode,Statement> g = new DirectedSparseGraph<RDFNode,Statement>() 
// list all statements 
// TODO: pagination for very large graphs. 
assert m.size() < 10000000,"graph is too large." 
m.listStatements().each{ stm-> 
    RDFNode sub = stm.getSubject() 
    RDFNode obj = stm.getObject() 
    g.addVertex(sub) 
    if (includeLiterals || !obj.isLiteral()){ 
     g.addVertex(obj) 
     g.addEdge(stm, sub, obj, EdgeType.DIRECTED) 
    } 
} 

Mulone

답변

4

이 전혀 원하는하지 않을 수 있습니다,하지만 당신은 같은 예나의 모델을 제시 JenaJung을 시도 할 수 정 그래프. README 파일에서

:

Model model = FileManager.get().loadModel("http://example.com/data.rdf"); 
Graph<RDFNode, Statement> g = new JenaJungGraph(model); 

Layout<RDFNode, Statement> layout = new FRLayout(g); 
layout.setSize(new Dimension(300, 300)); 
BasicVisualizationServer<RDFNode, Statement> viz = 
    new BasicVisualizationServer<RDFNode, Statement>(layout); 
+0

매우 유용합니다, 감사합니다! – Mulone