Open amarbanerjee23 opened 4 years ago
Again, a minimal example would help. Some observations.
Please provide a minimal example and some context like what reasoner you are using.
Thanks a lot for your reply.
The error is being generated for when I create a complex/nested Rule using boolean OR and AND. The error shows up whenever I have such Rule created in the sadl file. The actual example with the exact Rule description is :
Rule FM2_RC2 :
if
(average(HK_2D1016, HK_2D1017)
-average(avg_over_last_5_mins(HK_2D1016),avg_over_last_5_mins(HK_2D1017)) < 5)
or
(average(HK_2D0299, HK_2D0299)
-average(avg_over_last_5_mins(HK_2D0299),avg_over_last_5_mins(HK_2D0299)) < 5)
and
(average(HK_2T0007, avg_over_last_5_mins(HK_2T0007)
and
average(HK_2T0008, avg_over_last_5_mins(HK_2T0008)))>5
)
and
( HK_2D0153 - avg_over_last_5_mins(HK_2D0153)>10
or
HK_2D0180 - avg_over_last_5_mins(HK_2D0180)>10
)
then FM2 has root_cause RC2.
This is like
IF ( (cond1 OR cond2) AND (cond3 AND cond4) AND (con5 OR cond6) ) THEN .......
The problem seems to be in the OR condition, the error stack is given below:-
com.ge.research.sadl.reasoner.TranslationException: Unexpected error: the object of the triple is not a node of known type ('com.ge.research.sadl.model.gp.JunctionNode)
at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.checkTripleRange(JenaBasedSadlModelProcessor.java:6361)
at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.validateTripleTypes(JenaBasedSadlModelProcessor.java:6055)
at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processSubjHasProp(JenaBasedSadlModelProcessor.java:8156)
at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:7985)
at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4195)
at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processBinaryExpressionByParts(JenaBasedSadlModelProcessor.java:5037)
at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4638)
at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4176)
at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processStatement(JenaBasedSadlModelProcessor.java:4057)
at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processModelElement(JenaBasedSadlModelProcessor.java:1358)
at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.onValidate(JenaBasedSadlModelProcessor.java:1285)
at com.ge.research.sadl.validation.ResourceValidator.doValidate(ResourceValidator.java:75)
at com.ge.research.sadl.validation.ResourceValidator.validate(ResourceValidator.java:71)
Encountered unhandled OR in rule 'FM2_RC2'
The functions are defined externally and used in the rule description. I hope this description is useful. I looked at the code, and seems that the JunctionNode type objects are not handled and are thrown as an Exception. Request your expert advice and help to understand this better.
Cheers, Amar
This may be an error which has been fixed in the current code base. When I take your rule and create some supporting class and instance definitions, I get this:
Encountered unhandled OR in rule 'FM2_RC2'
which comes out of the JenaTranslatorPlugin and is expected as Jena rules do not support disjunction.
We are about to create a new release. Please check to see if this is reproducible with the new release, which will be available this week.
Update.
The usecase can be simplified to
AnyClass is a class.
val describes AnyClass with a single value of type integer.
Rule example: if (val>10 or val>1000) and (val<0) then val=9.
Interestingly, the error now is just
Encountered unhandled OR in rule 'example'
The same example, if I replace all the ORs by ANDs, then there is no error. However, if the rule has any OR, the error is generated. Hope this helps.
Cheers, Amar
Thanks, sorry, I posted the above msg while I guess you were reverting to the initial one. I am waiting for the new release and excited to use it. :)
Hi Andrew, the above error is still there in a different form in the new release.
AnyClass is a class.
{X,Y,Z} are instances of AnyClass.
OtherClass is a class described by anyclass with values of type AnyClass.
SomeClass is a class described by someclass with values of type AnyClass.
SomeClass1 is a SomeClass.
Rule example: if OtherClass has anyclass (X and Y) then SomeClass1 has someclass X.
The error is :
Unexpected error: the object of the triple is not a node of known type ('com.ge.research.sadl.model.gp.JunctionNode)
Any guidance on this ? (b.t.w. The new release is very good, especially the "their exists" statements, which helps a lot )
Thanks and Cheers, Amar
Hi, Any leads on if it is possible to have multiple boolean operations?
Cheers, Amar
Sorry Amar, I have been out-of-office. I will look at this in more detail when I get caught up. But for a quick response, if this is the ontology
AnyClass is a class.
{X,Y,Z} are instances of AnyClass.
OtherClass is a class described by anyclass with values of type AnyClass.
SomeClass is a class described by someclass with values of type AnyClass.
SomeClass1 is a SomeClass.
then the rule would need to be modified in two ways: 1) the direct class reference (OtherClass) isn't valid. A variable is needed and can be explicit, as in (a) below, or implicit using indefinite and definite articles, as in (b) below 2) the conjunction is expected to be between triples, not just object values (error checking needs to be added for this issue apparently).
(a) Rule example: if oc is an OtherClass and oc has anyclass X and oc has anyclass Y then SomeClass1 has someclass X.
(b)Rule example: if an OtherClass has anyclass X and the OtherClass has anyclass Y then SomeClass1 has someclass X.
For the second (b) to work definite and indefinite articles must be turned on in preferences.
After a little thought, supporting the form you used,
... <subj> has <prop> (<obj1> and <obj2>) ...
wouldn't be too difficult. So maybe we'll do that instead of issuing a better error message.
Thanks, Andrew. That would be really nice. Even I feel that supporting the form ... <subj> has <prop> (<obj1> and <obj2>) ...
should be a good option, as it also extends the expressiveness of the language. Please let us know if your team makes any changes in the source to include this change.
Cheers, Amar
Hi Andrew,
Sorry I am bugging you again on this. But has there been any modification to support the form ... <subj> has <prop> (<obj1> and <obj2>) ?
Hi Amar, No, I'm sorry. I haven't had a chance to work on this. It is unlikely that I will get to it until after Nov 1. It's a nice improvement but not a high priority. There is a workaround that fits the current grammar, just make the conjunction between triples for now.
Hey guys,
I am trying to build an OWL ontology from an sadl file which has the following rules
External avg_over_last_5_mins(decimal s-data) returns decimal: "". External average(decimal s-data1, decimal s-data2) returns decimal:"".
I get the following exception while during building
com.ge.research.sadl.reasoner.TranslationException: Unexpected error: the object of the triple is not a node of known type ('com.ge.research.sadl.model.gp.JunctionNode) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.checkTripleRange(JenaBasedSadlModelProcessor.java:6361) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.validateTripleTypes(JenaBasedSadlModelProcessor.java:6055) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processSubjHasProp(JenaBasedSadlModelProcessor.java:8156) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:7985) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4195) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processBinaryExpressionByParts(JenaBasedSadlModelProcessor.java:5037) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4638) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4176) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processStatement(JenaBasedSadlModelProcessor.java:4057) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processModelElement(JenaBasedSadlModelProcessor.java:1358) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.onValidate(JenaBasedSadlModelProcessor.java:1285) at com.ge.research.sadl.validation.ResourceValidator.doValidate(ResourceValidator.java:75) at com.ge.research.sadl.validation.ResourceValidator.validate(ResourceValidator.java:71) at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:91) at com.ge.research.sadl.validation.ResourceValidator.lambda$0(ResourceValidator.java:55) at org.eclipse.xtext.util.OnChangeEvictingCache.get(OnChangeEvictingCache.java:77) at com.ge.research.sadl.validation.ResourceValidator.validate(ResourceValidator.java:57) at org.eclipse.xtext.ui.editor.validation.ValidationJob$1.exec(ValidationJob.java:92) at org.eclipse.xtext.ui.editor.validation.ValidationJob$1.exec(ValidationJob.java:1) at org.eclipse.xtext.util.concurrent.CancelableUnitOfWork.exec(CancelableUnitOfWork.java:27) at org.eclipse.xtext.util.concurrent.WrappingCancelableUnitOfWork.exec(WrappingCancelableUnitOfWork.java:58) at org.eclipse.xtext.util.concurrent.CancelableUnitOfWork.exec(CancelableUnitOfWork.java:27) at org.eclipse.xtext.resource.OutdatedStateManager.exec(OutdatedStateManager.java:70) at org.eclipse.xtext.ui.editor.model.XtextDocument$XtextDocumentLocker.internalReadOnly(XtextDocument.java:525) at org.eclipse.xtext.ui.editor.model.XtextDocument$XtextDocumentLocker.readOnly(XtextDocument.java:497) at org.eclipse.xtext.ui.editor.model.XtextDocument.readOnly(XtextDocument.java:136) at org.eclipse.xtext.util.concurrent.IReadAccess.tryReadOnly(IReadAccess.java:50) at org.eclipse.xtext.ui.editor.validation.ValidationJob.createIssues(ValidationJob.java:87) at org.eclipse.xtext.ui.editor.validation.ValidationJob.run(ValidationJob.java:68) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) com.ge.research.sadl.reasoner.TranslationException: Unexpected error: the object of the triple is not a node of known type ('com.ge.research.sadl.model.gp.JunctionNode) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.checkTripleRange(JenaBasedSadlModelProcessor.java:6361) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.validateTripleTypes(JenaBasedSadlModelProcessor.java:6055) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processSubjHasProp(JenaBasedSadlModelProcessor.java:8156) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:7985) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4195) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processBinaryExpressionByParts(JenaBasedSadlModelProcessor.java:5037) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4638) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4176) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processStatement(JenaBasedSadlModelProcessor.java:4057) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processModelElement(JenaBasedSadlModelProcessor.java:1358) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.onValidate(JenaBasedSadlModelProcessor.java:1285) at com.ge.research.sadl.validation.ResourceValidator.doValidate(ResourceValidator.java:75) at com.ge.research.sadl.validation.ResourceValidator.validate(ResourceValidator.java:71) at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:91) at com.ge.research.sadl.validation.ResourceValidator.lambda$0(ResourceValidator.java:55) at org.eclipse.xtext.util.OnChangeEvictingCache.get(OnChangeEvictingCache.java:77) at com.ge.research.sadl.validation.ResourceValidator.validate(ResourceValidator.java:57) at org.eclipse.xtext.ui.editor.validation.ValidationJob$1.exec(ValidationJob.java:92) at org.eclipse.xtext.ui.editor.validation.ValidationJob$1.exec(ValidationJob.java:1) at org.eclipse.xtext.util.concurrent.CancelableUnitOfWork.exec(CancelableUnitOfWork.java:27) at org.eclipse.xtext.util.concurrent.WrappingCancelableUnitOfWork.exec(WrappingCancelableUnitOfWork.java:58) at org.eclipse.xtext.util.concurrent.CancelableUnitOfWork.exec(CancelableUnitOfWork.java:27) at org.eclipse.xtext.resource.OutdatedStateManager.exec(OutdatedStateManager.java:70) at org.eclipse.xtext.ui.editor.model.XtextDocument$XtextDocumentLocker.internalReadOnly(XtextDocument.java:525) at org.eclipse.xtext.ui.editor.model.XtextDocument$XtextDocumentLocker.readOnly(XtextDocument.java:497) at org.eclipse.xtext.ui.editor.model.XtextDocument.readOnly(XtextDocument.java:136) at org.eclipse.xtext.util.concurrent.IReadAccess.tryReadOnly(IReadAccess.java:50) at org.eclipse.xtext.ui.editor.validation.ValidationJob.createIssues(ValidationJob.java:87) at org.eclipse.xtext.ui.editor.validation.ValidationJob.run(ValidationJob.java:68) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) com.ge.research.sadl.reasoner.TranslationException: Unexpected error: the object of the triple is not a node of known type ('com.ge.research.sadl.model.gp.JunctionNode) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.checkTripleRange(JenaBasedSadlModelProcessor.java:6361) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.validateTripleTypes(JenaBasedSadlModelProcessor.java:6055) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processSubjHasProp(JenaBasedSadlModelProcessor.java:8156) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:7985) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4195) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processBinaryExpressionByParts(JenaBasedSadlModelProcessor.java:5037) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4638) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4176) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processStatement(JenaBasedSadlModelProcessor.java:4057) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processModelElement(JenaBasedSadlModelProcessor.java:1358) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.onValidate(JenaBasedSadlModelProcessor.java:1285) at com.ge.research.sadl.validation.ResourceValidator.doValidate(ResourceValidator.java:75) at com.ge.research.sadl.validation.ResourceValidator.validate(ResourceValidator.java:71) at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:91) at com.ge.research.sadl.validation.ResourceValidator.lambda$0(ResourceValidator.java:55) at org.eclipse.xtext.util.OnChangeEvictingCache.get(OnChangeEvictingCache.java:77) at com.ge.research.sadl.validation.ResourceValidator.validate(ResourceValidator.java:57) at org.eclipse.xtext.ui.validation.DefaultResourceUIValidatorExtension.addMarkers(DefaultResourceUIValidatorExtension.java:61) at org.eclipse.xtext.ui.validation.DefaultResourceUIValidatorExtension.updateValidationMarkers(DefaultResourceUIValidatorExtension.java:47) at org.eclipse.xtext.builder.builderState.MarkerUpdaterImpl.processDelta(MarkerUpdaterImpl.java:94) at org.eclipse.xtext.builder.builderState.MarkerUpdaterImpl.updateMarkers(MarkerUpdaterImpl.java:64) at org.eclipse.xtext.builder.builderState.AbstractBuilderState.updateMarkers(AbstractBuilderState.java:119) at org.eclipse.xtext.builder.clustering.ClusteringBuilderState.doUpdate(ClusteringBuilderState.java:285) at org.eclipse.xtext.builder.builderState.AbstractBuilderState.update(AbstractBuilderState.java:153) at org.eclipse.xtext.builder.impl.XtextBuilder.doBuild(XtextBuilder.java:388) at org.eclipse.xtext.builder.impl.XtextBuilder.addInfosFromTaskAndBuild(XtextBuilder.java:322) at org.eclipse.xtext.builder.impl.XtextBuilder.incrementalBuild(XtextBuilder.java:303) at org.eclipse.xtext.builder.impl.XtextBuilder.build(XtextBuilder.java:208) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:833) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:220) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:263) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:316) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:319) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:371) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:392) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:154) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:244) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) com.ge.research.sadl.reasoner.TranslationException: Unexpected error: the object of the triple is not a node of known type ('com.ge.research.sadl.model.gp.JunctionNode) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.checkTripleRange(JenaBasedSadlModelProcessor.java:6361) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.validateTripleTypes(JenaBasedSadlModelProcessor.java:6055) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processSubjHasProp(JenaBasedSadlModelProcessor.java:8156) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:7985) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4195) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processBinaryExpressionByParts(JenaBasedSadlModelProcessor.java:5037) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4638) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processExpression(JenaBasedSadlModelProcessor.java:4176) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processStatement(JenaBasedSadlModelProcessor.java:4057) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.processModelElement(JenaBasedSadlModelProcessor.java:1358) at com.ge.research.sadl.jena.JenaBasedSadlModelProcessor.onValidate(JenaBasedSadlModelProcessor.java:1285) at com.ge.research.sadl.validation.ResourceValidator.doValidate(ResourceValidator.java:75) at com.ge.research.sadl.validation.ResourceValidator.validate(ResourceValidator.java:71) at org.eclipse.xtext.validation.ResourceValidatorImpl.validate(ResourceValidatorImpl.java:91) at com.ge.research.sadl.validation.ResourceValidator.lambda$0(ResourceValidator.java:55) at org.eclipse.xtext.util.OnChangeEvictingCache.get(OnChangeEvictingCache.java:77) at com.ge.research.sadl.validation.ResourceValidator.validate(ResourceValidator.java:57) at org.eclipse.xtext.ui.validation.DefaultResourceUIValidatorExtension.addMarkers(DefaultResourceUIValidatorExtension.java:61) at org.eclipse.xtext.ui.validation.DefaultResourceUIValidatorExtension.updateValidationMarkers(DefaultResourceUIValidatorExtension.java:47) at org.eclipse.xtext.builder.builderState.MarkerUpdaterImpl.processDelta(MarkerUpdaterImpl.java:94) at org.eclipse.xtext.builder.builderState.MarkerUpdaterImpl.updateMarkers(MarkerUpdaterImpl.java:64) at org.eclipse.xtext.builder.builderState.AbstractBuilderState.updateMarkers(AbstractBuilderState.java:119) at org.eclipse.xtext.builder.clustering.ClusteringBuilderState.doUpdate(ClusteringBuilderState.java:285) at org.eclipse.xtext.builder.builderState.AbstractBuilderState.update(AbstractBuilderState.java:153) at org.eclipse.xtext.builder.impl.XtextBuilder.doBuild(XtextBuilder.java:388) at org.eclipse.xtext.builder.impl.XtextBuilder.addInfosFromTaskAndBuild(XtextBuilder.java:322) at org.eclipse.xtext.builder.impl.XtextBuilder.incrementalBuild(XtextBuilder.java:303) at org.eclipse.xtext.builder.impl.XtextBuilder.build(XtextBuilder.java:208) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:833) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:220) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:263) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:316) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:319) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:371) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:392) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:154) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:244) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) Encountered unhandled OR in rule 'FM2_RC2' Encountered unhandled OR in rule 'FM2_RC2'
I guess, the builder is not able to handle the boolean OR and AND statements. It would be great if you could help with that.
Cheers, Amar