robot: robot outputs invalid turtle syntax

This may be a problem in OWL API, but just tracking here for now. Run these commands on the latest MONDO release:

curl -L -O 'http://purl.obolibrary.org/obo/mondo/releases/2023-07-03/mondo.owl'
riot --validate mondo.owl
# outputs some warnings about URN format in SWRL variables, but not fatal
robot convert -i mondo.owl -o mondo.ttl
riot --validate mondo.ttl
# 15:17:40 ERROR riot            :: [line: 212732, col: 100] Unrecognized (expected an RDF Term): [SEMICOLON]

The problem section of the file looks like this:

###  http://purl.obolibrary.org/obo/MONDO_0000290
obo:MONDO_0000290 rdf:type owl:Class ;
                  owl:equivalentClass [ owl:intersectionOf ( obo:MONDO_0005550
                                                             _:genid24281 rdf:type owl:Restriction ;
                                                                          owl:onProperty obo:RO_0014001 ;
                                                                          owl:someValuesFrom obo:NCBITaxon_5763
                                                           ) ;
                                      rdf:type owl:Class
                                      ] ;
rdfs:subClassOf obo:MONDO_0002428 ,
                obo:MONDO_0020067 ,
                _:genid24281 ;
obo:IAO_0000115 "A infectious disease involving the Naegleria fowleri." ;
terms:conformsTo <http://purl.obolibrary.org/obo/mondo/patterns/infectious_disease_by_agent.yaml> ;
oboInOwl:hasDbXref "DOID:0050242" ,
                   "GARD:0009554" ,
                   "MESH:C535275" ,
                   "SCTID:721816008" ,
                   "UMLS:C0300934" ,
                   "UMLS:C4303098" ;
oboInOwl:hasExactSynonym "Naegleria fowleri infection" ;
oboInOwl:hasRelatedSynonym "infections, Naegleria fowleri" ;
oboInOwl:id "MONDO:0000290" ;
oboInOwl:inSubset mondo:mondo_rare ,
                  mondo:rare ;
rdfs:label "primary amebic meningoencephalitis" ;
skos:exactMatch <http://identifiers.org/mesh/C535275> ,
                <http://identifiers.org/snomedct/721816008> ,
                <http://linkedlifedata.com/resource/umls/id/C0300934> ,
                <http://linkedlifedata.com/resource/umls/id/C4303098> ,
                obo:DOID_0050242 .

_:genid24281 rdf:type owl:Restriction ;
              owl:onProperty obo:RO_0014001 ;
              owl:someValuesFrom obo:NCBITaxon_5763 .

In the intersection list you would expect the existential restriction to be enclosed in [ ], but instead there is a blank node ID _:genid24281 followed by invalid inline properties. The blank node ID is reused twice below, which it should not be (OWL is supposed to use fresh blank nodes for reference to a class expression). That’s fine in turtle, but might suggest the source of the error.

Based on the type of expression, it’s possible this is somehow related to robot relax.

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 22 (22 by maintainers)

Most upvoted comments

I’ll need to wrap my head around what’s happening here. Fresh blank node id or reuse of previous id is something that can be controlled now (option was introduced a while ago to reuse existing id), but it’s been a long time since I looked at that.

“Blank nodes, or, why is OWL not used everywhere yet?”