001package org.dllearner.scripts;
002
003import org.dllearner.utilities.owl.OWLAxiomCBDGenerator;
004import org.semanticweb.owlapi.apibinding.OWLManager;
005import org.semanticweb.owlapi.formats.RDFXMLDocumentFormat;
006import org.semanticweb.owlapi.model.*;
007import org.slf4j.Logger;
008import org.slf4j.LoggerFactory;
009
010import java.io.File;
011import java.io.FileOutputStream;
012import java.util.ArrayList;
013import java.util.Arrays;
014import java.util.List;
015import java.util.Set;
016
017public class ReactomeCBD {
018    private static final Logger logger = LoggerFactory.getLogger(ReactomeCBD.class);
019    private static String dumpFilePath = "/tmp/tr.owl";
020    private static String cbdFilePath = "/tmp/tr_cbd.owl";
021    private static int cbdDepth = 30;
022    private static List<String> exampleUris = new ArrayList<>(Arrays.asList(
023            // positive
024            "http://www.reactome.org/biopax/48887#BiochemicalReaction670",
025            "http://www.reactome.org/biopax/48887#BiochemicalReaction1968",
026            "http://www.reactome.org/biopax/48887#BiochemicalReaction1331",
027            "http://www.reactome.org/biopax/48887#BiochemicalReaction3743",
028            "http://www.reactome.org/biopax/48887#BiochemicalReaction3244",
029            // negative
030            "http://www.reactome.org/biopax/48887#BiochemicalReaction2588",
031            "http://www.reactome.org/biopax/48887#BiochemicalReaction4826",
032            "http://www.reactome.org/biopax/48887#Degradation10",
033            "http://www.reactome.org/biopax/48887#BiochemicalReaction2187",
034            "http://www.reactome.org/biopax/48887#BiochemicalReaction1273"
035    ));
036
037    public static void main (String[] args) throws Exception {
038        OWLOntologyManager man = OWLManager.createOWLOntologyManager();
039        OWLDataFactory factory = man.getOWLDataFactory();
040        logger.info("Loading ontology...");
041        OWLOntology ontology = man.loadOntologyFromOntologyDocument(new File(dumpFilePath));
042        logger.info("Done");
043        OWLAxiomCBDGenerator cbdGenartor = new OWLAxiomCBDGenerator(ontology);
044        cbdGenartor.setFetchCompleteRelatedTBox(true);
045
046        OWLOntology cbdOnt = man.createOntology();
047
048        for (String uri : exampleUris) {
049            logger.info("Creating cbd for " + uri + "...");
050            Set<OWLAxiom> cbdAxioms = cbdGenartor.getCBD(factory.getOWLNamedIndividual(IRI.create(uri)), cbdDepth);
051            logger.info("  Done. Adding {} axioms to main CBD dataset...", cbdAxioms.size());
052            man.addAxioms(cbdOnt, cbdAxioms);
053            logger.info("  Also done");
054        }
055
056        man.saveOntology(cbdOnt, new RDFXMLDocumentFormat(), new FileOutputStream(new File(cbdFilePath)));
057    }
058}