Open davidshumway opened 2 years ago
I suspect the underlying issue here is tool-agnostic. Your input graphs do not seem to be conformant with OWL 2 DL, and you may be running into an issue where a tool has a prerequisite for processing data that it be OWL 2 DL.
I've been informed that the OWL 2 Mapping to RDF document has a strict requirement of pattern-matching for encountered RDF patterns. (I was kindly informed of this by one of the document authors.) The tables throughout Section 3 need to be followed exactly, and if anything is "left over" after being processed by the patterns in those tables, then the document is not in OWL 2 DL but instead in OWL 2 FULL. I've seen Protege balk at OWL 2 FULL documents in various manners. (For instance, typo-ing owl:AnnotatedTarget
instead of owl:annotatedTarget
gives a particularly cryptic message at load-time.) In the face of OWL 2 FULL being arbitrary RDF, it's understandable for a tool to just give up on some load operations.
With your example input, particular the excerpted triple ns5:IDO_0000407 owl:equivalentClass [ ] .
, you are presenting an OWL 2 FULL graph (arbitrary RDF), not DL. Explanation, referring to the linked mapping document:
ns5:IDO_0000407 a owl:Class .
).ns5:IDO_0000407 owl:equivalentClass [ ] .
almost pattern matches row 8 in Table 16. The issue is CE(y)
can only equal ε
(undefined), because that empty blank node cannot declare itself a class-expression. It's just empty. Thus, the prerequisite (the left column) will not be met.So, once the OWL engine has done all it can by strict matching from Section 3, ns5:IDO_0000407 owl:equivalentClass [ ] .
will be a leftover triple in the graph. The very last line of text before Section 4, "At the end of this process, the graph G must be empty," and the process not consuming the whole graph, means this input is not an OWL 2 DL conformant graph.
If you delete the triples with those empty blank nodes, you'll be a step closer to OWL 2 DL conformance, and Protege might give you a different load-time behavior.
When serializing as either N3 or TTL, empty
owl:equivalentClass [ ]
andrdfs:subClassOf [ ]
statements cause Protégé to fail to load the respective files. Is this an issue with the rdflib serializer, with Protégé, or perhaps with the graph which is being exported (e.g. syntax issues or the way the triples were added to the graph)?equivalentClass
as a property:There are a number of
subClassOf
relationships. However, I'm guessing these ones are the culprits(?):