Я загружаю данные 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