protegeproject / swrlapi

Java API for working with the SWRL rule and SQWRL query languages
Other
99 stars 40 forks source link

Error calling infer() method: No prefix name: _: #41

Closed nmerkle closed 5 years ago

nmerkle commented 6 years ago

Hi,

I use the SWRLAPI and as soon as I call the ruleEngine.infer() method I get the following error.

Error: Prefix not registered for prefix name: : org.semanticweb.owlapi.model.OWLRuntimeException: Prefix not registered for prefix name: : at org.semanticweb.owlapi.util.DefaultPrefixManager.getIRI(DefaultPrefixManager.java:204) at org.swrlapi.factory.DefaultIRIResolver.prefixedName2IRI(DefaultIRIResolver.java:91) at org.swrlapi.bridge.extractors.TargetRuleEngineExtractorBase.prefixedName2IRI(TargetRuleEngineExtractorBase.java:60) at org.swrlapi.drools.factory.DefaultDroolsOWLEntityExtractor.extract(DefaultDroolsOWLEntityExtractor.java:44) at org.swrlapi.drools.owl.individuals.I.extract(I.java:49) at org.swrlapi.drools.factory.DefaultDroolsOWLAxiomExtractor.extract(DefaultDroolsOWLAxiomExtractor.java:195) at org.swrlapi.drools.owl.axioms.SIA.extract(SIA.java:48) at org.swrlapi.drools.owl.axioms.SIA.extract(SIA.java:21) at org.swrlapi.drools.core.DroolsSWRLRuleEngine.writeInferredOWLAxiomsToBridge(DroolsSWRLRuleEngine.java:358) at org.swrlapi.drools.core.DroolsSWRLRuleEngine.runRuleEngine(DroolsSWRLRuleEngine.java:223) at org.swrlapi.factory.DefaultSWRLRuleAndQueryEngine.run(DefaultSWRLRuleAndQueryEngine.java:90) at org.swrlapi.factory.DefaultSWRLRuleAndQueryEngine.infer(DefaultSWRLRuleAndQueryEngine.java:110) at de.fzi.ipe.wim.vCare.simulator.SPARQLManager.reasonState(SPARQLManager.java:707) at de.fzi.ipe.wim.vCare.simulator.WebsocketServer.onMessage(WebsocketServer.java:308) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.eclipse.jetty.websocket.common.events.annotated.CallableMethod.call(CallableMethod.java:70) at org.eclipse.jetty.websocket.common.events.annotated.OptionalSessionCallableMethod.call(OptionalSessionCallableMethod.java:72) at org.eclipse.jetty.websocket.common.events.JettyAnnotatedEventDriver.onTextMessage(JettyAnnotatedEventDriver.java:225) at org.eclipse.jetty.websocket.common.message.SimpleTextMessage.messageComplete(SimpleTextMessage.java:69) at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.appendMessage(AbstractEventDriver.java:64) at org.eclipse.jetty.websocket.common.events.JettyAnnotatedEventDriver.onTextFrame(JettyAnnotatedEventDriver.java:217) at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.incomingFrame(AbstractEventDriver.java:160) at org.eclipse.jetty.websocket.common.WebSocketSession.incomingFrame(WebSocketSession.java:309) at org.eclipse.jetty.websocket.common.extensions.ExtensionStack.incomingFrame(ExtensionStack.java:214) at org.eclipse.jetty.websocket.common.Parser.notifyFrame(Parser.java:220) at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:258) at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:628) at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:476) at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) at java.lang.Thread.run(Thread.java:748)

It seems for me that the prefix _: i s not defined, however, I checked my ontology and there is no such prefix used in the whole ontology file, but when I debug, I see the following reference _:genid.. I don't know where this prefix comes from. Is it maybe automatically generated by the SWRLAPI? How can I fix this problem?

Best, nmerkle

agleoni commented 6 years ago

Hi, I'm stuck here too... have you managed to solve the problem?

Thanks in advance, Anna Giulia

nmerkle commented 6 years ago

Hi,

I let it be to use the SWRLAPI, because I had also other issues with it regarding performance and memory consumption. However, I think the problem was that the prefix of the base uri was not set/declared (correctly). Try out to set the following prefix with your own base uri at the beginning of your ontology file: @prefix : <http://YOUR-Ontology-Base-URI> . Maybe this helps. I remember that I had also this issue, because my ontology file contained generated node ids (_:genid) which seem to be blank node ids... But if you set all required prefixes in your ontology file then it should work. Another workaround was to filter out these node ids, because they were dispensable and not required for the SWRL reasoning.

Best, Nicole