Two possible approaches:
Create data structures that represent the semantic
relationships and assert them into working memory.
class SemanticNode {
int code;
SemanticNode parent;
public boolean isA(SemanticNode node) {
if(code == node.code) {
return true;
} else {
if(parent == null) {
return false;
} else {
return parent.isA(node);
}
}
}
}
Sample rule:
when
Diagnosis( $diagCode : code )
$node : SemanticNode( code == $diagCode )
$otherNode : SemanticNode()
eval( $node.isA($otherNode) )
then
..do stuff...
end
This rule will match once on each ancestor of $node,
though. It would execute faster if you had direct
pointers to each ancestor instead of just a parent
link.
--- Shahim Essaid <sessaid(a)essaid.com> wrote:
Here is a very simplistic example:
I have a rule that wants to check for "cough"
(concept ID 11111) symptom
in the working memory and the working memory has a
"whooping cough"
concept (ID 22222) object.
The working memory object will be Concept(ID=22222)
and the rule will
use Concpet(ID=11111).
A simple numerical comparison will fail but the
concept id 22222 is a
11111 and this IS_A relationship is in the
terminology's semantic net.
This means that the rule should be activated in this
condition.
Based on this simple example, what is the best way
to include the
terminology's knowledge and the terminology's
matching algorithm into
the rule engine?
Thanks,
Shahim
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users