mmisw / orr-portal

ORR Frontend component
Apache License 2.0
8 stars 5 forks source link

iceOfLandOrigin ontology: RDF/XML failing to upload #76

Closed carueda closed 7 years ago

carueda commented 7 years ago

@graybeal FYI in case of any further comments.

Related with #62 (ENVO), this is the other ontology mentioned by Margaret in email thread started 7/19/16.

I just tried to register this ontology as downloaded from http://semanticportal.esipfed.org/ontologies/ICEOFLANDORIGIN

I tried two of the possible download formats: OWL and RDF/XML.

OWL

When using the file downloaded by using the OWL link (which gets the name ice-of-land-origin.owl), the upload operation at the COR completes OK. In particular, COR correctly detects the possible URI of the ontology, which is http://purl.org/wmo/seaice/iceOfLandOrigin# (with explanation: "Resource of type http://www.w3.org/2002/07/owl#Ontology"). I didn't complete the registration because this URI has already been registered.

RDF/XML

When using the file downloaded by using the RDF/XML link (which gets the name owlapi.xrdf, the exception below occurs when uploading it to the COR.

scala.MatchError: (null,PossibleOntologyInfo(List(Resource of type http://www.w3.org/2002/07/owl#Ontology),Map())) (of class scala.Tuple2)
    at org.json4s.Extraction$.internalDecomposeWithBuilder(Extraction.scala:132)
    at org.json4s.Extraction$.addField$1(Extraction.scala:83)
    at org.json4s.Extraction$.decomposeObject$1(Extraction.scala:111)
    at org.json4s.Extraction$.internalDecomposeWithBuilder(Extraction.scala:180)
    at org.json4s.Extraction$.decomposeWithBuilder(Extraction.scala:67)
    at org.json4s.Extraction$.decompose(Extraction.scala:194)
    at org.scalatra.json.JValueResult$$anonfun$org$scalatra$json$JValueResult$$renderToJson$1.applyOrElse(JValueResult.scala:45)
    at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:170)
    at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:171)
    at scala.PartialFunction$Lifted.apply(PartialFunction.scala:223)
    at scala.PartialFunction$Lifted.apply(PartialFunction.scala:219)
    at org.scalatra.ScalatraBase$class.loop$1(ScalatraBase.scala:399)
    at org.scalatra.ScalatraBase$class.renderResponseBody(ScalatraBase.scala:403)
    at org.scalatra.ScalatraServlet.renderResponseBody(ScalatraServlet.scala:49)
    at org.scalatra.ScalatraBase$class.renderResponse(ScalatraBase.scala:367)
    at org.scalatra.ScalatraServlet.renderResponse(ScalatraServlet.scala:49)
    at org.scalatra.ScalatraBase$class.executeRoutes(ScalatraBase.scala:189)
    at org.scalatra.ScalatraServlet.executeRoutes(ScalatraServlet.scala:49)
    at org.scalatra.ScalatraBase$$anonfun$handle$1.apply$mcV$sp(ScalatraBase.scala:113)
    at org.scalatra.ScalatraBase$$anonfun$handle$1.apply(ScalatraBase.scala:113)
    at org.scalatra.ScalatraBase$$anonfun$handle$1.apply(ScalatraBase.scala:113)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
    at org.scalatra.DynamicScope$class.withResponse(DynamicScope.scala:80)
    at org.scalatra.ScalatraServlet.withResponse(ScalatraServlet.scala:49)
    at org.scalatra.DynamicScope$$anonfun$withRequestResponse$1.apply(DynamicScope.scala:60)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
    at org.scalatra.DynamicScope$class.withRequest(DynamicScope.scala:71)
    at org.scalatra.ScalatraServlet.withRequest(ScalatraServlet.scala:49)
    at org.scalatra.DynamicScope$class.withRequestResponse(DynamicScope.scala:59)
    at org.scalatra.ScalatraServlet.withRequestResponse(ScalatraServlet.scala:49)
    at org.scalatra.ScalatraBase$class.handle(ScalatraBase.scala:111)
    at org.scalatra.ScalatraServlet.org$scalatra$servlet$ServletBase$$super$handle(ScalatraServlet.scala:49)
    at org.scalatra.servlet.ServletBase$class.handle(ServletBase.scala:43)
    at org.mmisw.orr.ont.app.BaseController.org$scalatra$CorsSupport$$super$handle(BaseController.scala:11)
    at org.scalatra.CorsSupport$$anonfun$handle$1.apply$mcV$sp(CORSSupport.scala:200)
    at org.scalatra.CorsSupport$$anonfun$handle$1.apply(CORSSupport.scala:190)
    at org.scalatra.CorsSupport$$anonfun$handle$1.apply(CORSSupport.scala:190)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
    at org.scalatra.DynamicScope$class.withResponse(DynamicScope.scala:80)
    at org.scalatra.ScalatraServlet.withResponse(ScalatraServlet.scala:49)
    at org.scalatra.DynamicScope$$anonfun$withRequestResponse$1.apply(DynamicScope.scala:60)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
    at org.scalatra.DynamicScope$class.withRequest(DynamicScope.scala:71)
    at org.scalatra.ScalatraServlet.withRequest(ScalatraServlet.scala:49)
    at org.scalatra.DynamicScope$class.withRequestResponse(DynamicScope.scala:59)
    at org.scalatra.ScalatraServlet.withRequestResponse(ScalatraServlet.scala:49)
    at org.scalatra.CorsSupport$class.handle(CORSSupport.scala:188)
    at org.mmisw.orr.ont.app.OntController.org$scalatra$servlet$FileUploadSupport$$super$handle(OntController.scala:23)
    at org.scalatra.servlet.FileUploadSupport$class.handle(FileUploadSupport.scala:93)
    at org.mmisw.orr.ont.app.OntController.handle(OntController.scala:23)
    at org.scalatra.ScalatraServlet.service(ScalatraServlet.scala:54)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    ...
carueda commented 7 years ago

Fixed. (The actual fix is in the orr-ont service , https://github.com/mmisw/orr-ont/commit/a8f2cf90da8073eb76849b94ea10674c47a9804e)

As indicated there, the key aspect for the fix is that, although the owlapi.xrdf file does contain an Ontology, such resource is a blank node, so no URI in this case (internally reported as null); this was not properly handled by orr-ont.

Now the upload completes OK. It would be now up to the user to indicate the appropriate URI for the ontology in the UI and continue with the registration sequence.

2017-02-04_1257