public static void main(String[] args) throws Exception {
    String catalog = args[0];
    String file = args[1];
    final ParserWrapper pw = new ParserWrapper();
    pw.addIRIMapper(new CatalogXmlIRIMapper(catalog));
    final OWLOntology ontology = pw.parse(file);
    final OWLGraphWrapper g = new OWLGraphWrapper(ontology);
    OWLObjectProperty part_of = g.getOWLObjectPropertyByIdentifier("part_of");
    OWLObjectProperty has_part = g.getOWLObjectPropertyByIdentifier("has_part");
    OWLObjectProperty regulates = g.getOWLObjectPropertyByIdentifier("regulates");
    OWLObjectProperty negatively_regulates =
        g.getOWLObjectPropertyByIdentifier("negatively_regulates");
    OWLObjectProperty positively_regulates =
        g.getOWLObjectPropertyByIdentifier("positively_regulates");
    final OWLClassFilter filter =
        new OWLClassFilter() {

          @Override
          public boolean use(OWLClass cls) {
            String id = g.getIdentifier(cls.getIRI());
            return id.startsWith("GO:");
          }
        };
    Set<OWLObjectProperty> props = Sets.newHashSet(part_of);
    Map<OWLClass, Set<OWLObjectSomeValuesFrom>> expressions =
        getExpressions(ontology, props, filter);
    List<OWLClass> classes = new ArrayList<OWLClass>(expressions.keySet());
    Collections.sort(classes);
    OWLPrettyPrinter pp = new OWLPrettyPrinter(g);
    int count = 0;
    for (OWLClass cls : classes) {
      Set<OWLObjectSomeValuesFrom> svfs = expressions.get(cls);
      for (OWLObjectSomeValuesFrom svf : svfs) {
        StringBuilder sb = new StringBuilder();
        sb.append(pp.render(cls)).append("\t");
        sb.append(pp.render(svf.getProperty())).append("\t");
        sb.append(pp.render(svf.getFiller()));
        System.out.println(sb);
        count += 1;
      }
    }
    System.out.println("Count: " + count);
  }