Представление данных RDF в графе JUNG

Я загружаю данные RDF в граф JUNG, чтобы провести некоторый анализ. Итак, я создаю новый график с:

DirectedGraph g = new DirectedSparseGraph<String,GraphLink>();

Я создал класс поддержки для указания ссылки:

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 )

Я получаю исключение дублированного края.

Какие-нибудь намеки?

ОБНОВЛЕНИЕ: похоже, этот код работает хорошо:

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


person Mulone    schedule 20.04.2011    source источник


Ответы (1)


Возможно, это совсем не то, что вам нужно, но вы можете попробовать 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);
person user205512    schedule 20.04.2011