INCATools / ontology-development-kit

Bootstrap an OBO Library ontology
http://incatools.github.io/ontology-development-kit/
BSD 3-Clause "New" or "Revised" License
223 stars 54 forks source link

Specifying IAO as a dependency triggers some Null Pointer Exceptions and then the target build fails. #96

Closed marijane closed 6 years ago

marijane commented 6 years ago

I am running ODK 1.1.4 on OS X 10.11.16 with Docker CE 18.06.0-ce-mac-70.

See the attached terminal capture for details. ODK-IAO-failure.txt

Auxiliary issue: I specified the -vvv flag on the command line. I still got truncated stack traces and the message to use the -vvv flag.

marijane commented 6 years ago

I decided to use the -f flag to work around this issue, and now I'm seeing some of the same ROBOT errors in the Travis CI log: https://travis-ci.org/data2health/credit-ontology/jobs/425038956

matentzn commented 6 years ago

@cmungall Is this related to https://github.com/ontodev/robot/issues/289

or

https://github.com/owlcollab/owltools/issues/260

matentzn commented 6 years ago

You can reproduce this quite simply running your example, instead of:

./seed-via-docker.sh   -d po ro pato -u cmungall -t "Triffid Behavior ontology" triffo

add IAO:

./seed-via-docker.sh   -d po ro pato iao -u cmungall -t "Triffid Behavior ontology" triffo
cmungall commented 6 years ago

Correct, the robot ticket is a manifestation of the same error.

One approach would be to simply abandon making obo files as default in odk. Many communities don't use these. Yet I'd be loathe to do this. The bioinformatics community served by OBO makes heavy use of these. And errors in making the obo file are often manifestations of underlying structural issues in ontologies that need to be fixed

Note I get a different error for ./seed-via-docker.sh -d po ro pato iao -u cmungall -t "Triffid Behavior ontology" triffo

robot convert -i triffo.owl -f obo -o triffo.obo.tmp && mv triffo.obo.tmp triffo.obo
2018-09-06 18:28:39,516 ERROR org.obolibrary.obo2owl.OWLAPIObo2Owl - error executing obo id to IRI
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2203)
        at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
        at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
        at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)
        at org.obolibrary.obo2owl.OWLAPIObo2Owl.oboIdToIRI(OWLAPIObo2Owl.java:1664)
        at org.obolibrary.oboformat.writer.OBOFormatWriter$OWLOntologyNameProvider.getName(OBOFormatWriter.java:1182)
        at org.semanticweb.owlapi.oboformat.OBOFormatRenderer$1.getName(OBOFormatRenderer.java:74)
        at org.obolibrary.oboformat.writer.OBOFormatWriter.write(OBOFormatWriter.java:325)
        at org.obolibrary.oboformat.writer.OBOFormatWriter.write(OBOFormatWriter.java:203)
        at org.semanticweb.owlapi.oboformat.OBOFormatRenderer.render(OBOFormatRenderer.java:88)
        at org.semanticweb.owlapi.oboformat.OBOFormatStorer.storeOntology(OBOFormatStorer.java:42)
        at org.semanticweb.owlapi.util.AbstractOWLStorer.store(AbstractOWLStorer.java:99)
        at org.semanticweb.owlapi.util.AbstractOWLStorer.storeOntology(AbstractOWLStorer.java:64)
        at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.saveOntology(OWLOntologyManagerImpl.java:1302)
        at org.obolibrary.robot.IOHelper.saveOntology(IOHelper.java:559)
        at org.obolibrary.robot.IOHelper.saveOntology(IOHelper.java:500)
        at org.obolibrary.robot.ConvertCommand.execute(ConvertCommand.java:167)
        at org.obolibrary.robot.CommandManager.executeCommand(CommandManager.java:246)
        at org.obolibrary.robot.CommandManager.execute(CommandManager.java:190)
        at org.obolibrary.robot.CommandManager.main(CommandManager.java:139)
        at org.obolibrary.robot.CommandLineInterface.main(CommandLineInterface.java:53)
Caused by: java.lang.NullPointerException
        at org.obolibrary.obo2owl.OWLAPIObo2Owl.translateShorthandIdToExpandedId(OWLAPIObo2Owl.java:1766)
        at org.obolibrary.obo2owl.OWLAPIObo2Owl.oboIdToIRI_load(OWLAPIObo2Owl.java:1705)
        at org.obolibrary.obo2owl.OWLAPIObo2Owl$1.load(OWLAPIObo2Owl.java:81)
        at org.obolibrary.obo2owl.OWLAPIObo2Owl$1.load(OWLAPIObo2Owl.java:77)
        at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527)
        at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319)
        at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282)
        at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
        ... 20 more
Use the -vvv option to show the stack trace.
Use the --help option to see usage information.
Makefile:50: recipe for target 'triffo.obo' failed
make: *** [triffo.obo] Error 1
rm imports/iao_terms_combined.txt imports/pato_terms_combined.txt imports/po_terms_combined.txt imports/ro_terms_combined.txt
ERROR RUNNING: cd src/ontology && make prepare_release
Exiting. Run with '-f' to force execution and ignore errors at ./seed-my-ontology-repo.pl line 330.
cmungall commented 6 years ago

A subset of these are fixed by making the obo writing be less script use --check false in the conversion command in the makefile

marijane commented 6 years ago

One of the side effects of using the -f flag here is that the iao_imports file was missing a bunch of annotations, which we've added back manually.

As a relative ODK novice, what would I need to do in my repo to get my ontology to build? I notice Chris mentioned above that this is related to building the OBO version, is there an option for me to turn that off?

matentzn commented 6 years ago

Hey! I have this issue here as high priority, but I won't get to it before next week. Is it an option to remove IAO from the imports for now, import IAO manually into your edit file and remove it again when we have fixed this? In order to remove it, you can simply delete the IAO entry in the Makefile (IMPORT variable), or, if you start from scratch, just leave it out? Is that an option?

marijane commented 6 years ago

Possibly? I'll have to take a look because I'm not very familiar with how the ODK is structured, but this does seem like something I can figure out. Looking forward to the fix!

matentzn commented 6 years ago

For now, we will go for the solution that simply avoids checking whether an ontology, for example an import, corresponds to valid OBO. In order to really tighten things up, it would be good if ROBOT would allow a flag like --check warning, instead of --check false, so we could get at least a print in the logfile that tells us that a source ontology does not confirm to the OBO format @rtauber . :) So if you check out the latest ODK, creating a new ontology with IAO, or any other import for that matter, should now work.

cmungall commented 6 years ago

Note that the "side-effect" of the OBOFormat writer linting your OWL (e.g. to check cardinality of various annotation assertions) should now be largely subsumed by the awesome robot report mechanism. This is also more flexible, so unlike the OBOWriter you aren't locked in to having max cardinality for rdfs:comment.

marijane commented 6 years ago

So I have two projects created with the last release, and we've already made modifications to them. I don't want to lose that work. Is there a way to implement this fix in our repositories, or do I need to save a copy of my -edit.owl files and recreate the repository with the latest ODK?

marijane commented 6 years ago

OK, so I cloned the ODK repo and used it to create a new version of one of my ontologies with IAO imported. That worked, so I think this bug has been fixed.

Then I created and checked out a new branch in my old repo, called "latest-odk". I copied and committed the files from the newly generated repo to that branch, except for the changes in the -edit.owl and -idranges.owl files that I wanted to keep. So I think I have a branch that contains both the work I want to save and the files/structure of the latest ODK. I want to successfully build in that branch before I merge into master, and I'm hitting some problems there. Time for a new ticket.

matentzn commented 6 years ago

I will close this in favour of the other now open tickets. Please re-open if necessary.