diff --git a/nodes/src/main/java/org/nodes/data/RDF.java b/nodes/src/main/java/org/nodes/data/RDF.java index daf7b3b..d1f4a1d 100644 --- a/nodes/src/main/java/org/nodes/data/RDF.java +++ b/nodes/src/main/java/org/nodes/data/RDF.java @@ -97,9 +97,48 @@ public static MapDTGraph readHDT(File file) * @param file * @return */ - public static MapDTGraph read(File file) - { - return read(file, RDFFormat.RDFXML); + public static DTGraph read(File file) + throws IOException + { + RDFFormat format = RDFFormat.forFileName(file.getName()); + + InputStream in = new BufferedInputStream(new FileInputStream(file)); + RDFParser parser = Rio.createParser(format); + + final DTGraph graph = new MapDTGraph(); + + parser.setRDFHandler(new RDFHandlerBase() + { + int i = 0; + @Override + public void handleStatement(Statement statement) + { + String subject = statement.getSubject().toString(); + String object = statement.getObject().toString(); + String verb = statement.getPredicate().toString(); + + if(graph.node(subject) == null) + graph.add(subject); + if(graph.node(object) == null) + graph.add(object); + + DTNode subNode = graph.node(subject); + DTNode obNode = graph.node(object); + + subNode.connect(obNode, verb); + + if(++i % 2000 == 0) + System.out.println(i + " statements read."); + } + }); + + try { + parser.parse(in, "local://"); + } catch (Exception e) + { + throw new RuntimeException("Error parsing file ("+file.getAbsolutePath()+").", e); + } + return graph; } public static MapDTGraph read(File file, RDFFormat format)