SemanticApplicationDesignLanguage / sadl

Semantic Application Design Language (SADL) Open Source Code
http://semanticapplicationdesignlanguage.github.io/sadl/
Eclipse Public License 1.0
30 stars 12 forks source link

Execption while generating building OWL files for Rules #501

Open amarbanerjee23 opened 4 years ago

amarbanerjee23 commented 4 years ago

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:"".

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.

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

crapo commented 4 years ago

Again, a minimal example would help. Some observations.

  1. You're defining an external equation "average" but there is already a built-in "average" if you're using the JenaReasonerPlugin. If you are, then there should probably be a check and an error generated for an ambiguous reference.
  2. Unfortunately, there is not a complete closure between defining an equation and using it in a rule. The two capabilities were developed for different purposes. In this case the two equations you define are external equations, so how would they be called? Where would be the actual implementation?
  3. Without the use case, I can't tell how the arguments, e.g. "HK_2D106" are defined, but the signature of the equation says that they are decimal. As one can't name decimal values in OWL I'm a little puzzled about their definition.

Please provide a minimal example and some context like what reasoner you are using.

amarbanerjee23 commented 4 years ago

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

crapo commented 4 years ago

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.

amarbanerjee23 commented 4 years ago

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

amarbanerjee23 commented 4 years ago

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. :)

amarbanerjee23 commented 4 years ago

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

amarbanerjee23 commented 4 years ago

Hi, Any leads on if it is possible to have multiple boolean operations?

Cheers, Amar

crapo commented 4 years ago

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.

crapo commented 4 years ago

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.

amarbanerjee23 commented 4 years ago

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

amarbanerjee23 commented 4 years ago

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>) ?

GEGlobalResearch commented 4 years ago

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.