Skip to content

Instantly share code, notes, and snippets.

@jprudent
Created November 30, 2015 17:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jprudent/f456cfe2a70524e4ff09 to your computer and use it in GitHub Desktop.
Save jprudent/f456cfe2a70524e4ff09 to your computer and use it in GitHub Desktop.
Extract model
package com.vidal.pmsi.data;
import java.util.HashSet;
import java.util.Set;
import org.apache.jena.riot.RDFDataMgr;
import org.apache.jena.riot.RDFFormat;
import org.junit.Test;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
import com.hp.hpl.jena.util.iterator.Filter;
public class LearnJenaTest {
@Test
public void should_Name() {
Model model = loadModel();
ExtendedIterator<Statement> a01Iterator = a01It(model);
Set<Resource> interesting = new HashSet<>(); //
while (a01Iterator.hasNext()) {
Statement a01 = a01Iterator.next();
interesting.add(a01.getSubject()); //
interesting.addAll(findBroaders(model, a01.getSubject()));
}
exportFile(model,interesting);
}
private void exportFile(Model model, Set<Resource> interesting) {
Model output = ModelFactory.createDefaultModel();
interesting.stream()
.map(resource -> model.listStatements(resource, null, (String)null))
.forEach(output::add);
RDFDataMgr.write(System.out, output, RDFFormat.RDFXML_PRETTY);
}
private Set<Resource> findBroaders(Model model, Resource a01) {
ExtendedIterator<Statement> broaders = broaders(model, a01);
Set<Resource> interesting = new HashSet<>();
while(broaders.hasNext()) {
Resource broader = model.getResource(broaders.next().getResource().getURI());
System.out.println("Broader of : " + broader);
interesting.add(broader);
interesting.addAll(findBroaders(model, broader));
}
return interesting;
}
private ExtendedIterator<Statement> broaders(Model model, Resource a01) {
return model.listStatements(a01, model.getProperty("http://www.w3.org/2004/02/skos/core#broader"), (String) null);
}
private ExtendedIterator<Statement> a01It(Model model) {
return model
.listStatements(null, model.getProperty("http://graphe.vidal.net/cim10/code"), (String) null)
.filterKeep(new Filter<Statement>() {
@Override
public boolean accept(Statement o) {
return o.getString().startsWith("A01");
}
});
}
private Model loadModel() {
return RDFDataMgr.loadModel("CIM10Full_RDFEVN.rdf");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment