Search code examples
ontologyprotegegraphdb

GraphDB Workbench fails to load .owl ontology file from Protégé


I created an ontology with Protege, which is saved as an .owl file.

When I try to load it to GraphDB (8.9.0) through Workbench Import -> RDF -> Upload RDF files (The supported RDF formats are .ttl .rdf .rj .n3 .nt .nq .trig .trix .brf .owl .jsonld, as well as their .gz versions and .zip archives) I'm getting the error:

RDF Parse Error: Content is not allowed in prolog. [line 1, column 1].

The full log:

01:00:37.877 [import-task-Accounting-1] ERROR o.e.r.rio.helpers.ParseErrorLogger - [Rio fatal] Content is not allowed in prolog. (1, 1)
01:00:37.879 [import-task-Accounting-1] ERROR c.o.f.impex.FileImportRunnableTask - RDF Parse Error 
org.eclipse.rdf4j.rio.RDFParseException: Content is not allowed in prolog. [line 1, column 1]
    at org.eclipse.rdf4j.rio.helpers.RDFParserHelper.reportFatalError(RDFParserHelper.java:442)
    at org.eclipse.rdf4j.rio.helpers.AbstractRDFParser.reportFatalError(AbstractRDFParser.java:783)
    at org.eclipse.rdf4j.rio.rdfxml.RDFXMLParser.reportFatalError(RDFXMLParser.java:1176)
    at org.eclipse.rdf4j.rio.rdfxml.RDFXMLParser.fatalError(RDFXMLParser.java:1315)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:180)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1472)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:994)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:841)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
    at org.eclipse.rdf4j.rio.rdfxml.RDFXMLParser.parse(RDFXMLParser.java:265)
    at org.eclipse.rdf4j.rio.rdfxml.RDFXMLParser.parse(RDFXMLParser.java:207)
    at org.eclipse.rdf4j.repository.util.RDFLoader.loadInputStreamOrReader(RDFLoader.java:286)
    at org.eclipse.rdf4j.repository.util.RDFLoader.load(RDFLoader.java:197)
    at org.eclipse.rdf4j.repository.base.AbstractRepositoryConnection.add(AbstractRepositoryConnection.java:329)
    at com.ontotext.trree.monitorRepository.MonitorRepositoryConnection.add(MonitorRepositoryConnection.java:177)
    at com.ontotext.trree.parallel.ParallelRDFLoader.add(ParallelRDFLoader.java:125)
    at com.ontotext.trree.parallel.ParallelRDFLoader.add(ParallelRDFLoader.java:54)
    at com.ontotext.forest.impex.ParallelAwareImporter.lambda$add$5(ParallelAwareImporter.java:107)
    at com.ontotext.forest.impex.ParallelAwareImporter.wrapInBeginCommit(ParallelAwareImporter.java:128)
    at com.ontotext.forest.impex.ParallelAwareImporter.add(ParallelAwareImporter.java:89)
    at com.ontotext.forest.impex.FileImportRunnableTask.load(FileImportRunnableTask.java:36)
    at com.ontotext.forest.impex.ImportRunnableTask.run(ImportRunnableTask.java:82)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
    ... 29 common frames omitted

Any help/advice/hint will be much appreciated.


Solution

  • The issue is that GraphDB assumes that .owl files are written in XML, hence tries to parse them as such. However, as mentioned in the OWL Conformance (2.2 Tool Conformance):

    A conformant OWL 2 tool may also accept ontology documents using other serializations, for example Turtle ...

    In fact an OWL ontology definition can have 5 different valid formats: functional-style, RDF/XML, OWL/XML, Turtle and Manchester syntax. Protégé decided to use Turtle syntax for its .owl files, so GraphDB gets an error when trying to parse them as XML.

    Workaround: Just change the file extension from .owl to .ttl and GraphDB will happily load it.