Manuel jszlog

Introduction

Jszlog est un moteur d’interprétation de règles fait pour être le plus simple possible, afin que les étudiants puissent comprendre et expérimenter facilement les concepts de règles, de logique, et de système dirigé par les données.

Le fonctionnement est le suivant :

  • Une spécification est écrite et copiée-collée dans le champ réservé à la spécification des règles (ce champ est surplombé du texte “Entrez quelque chose d’intéressant ici”)
  • On clique sur le bouton “Analyser” et le moteur génère sous le bouton les champs nécessaires à l’entrée des données, ainsi que le texte des règles.

Le raisonnement ne se fait que sur des faits logiques (hypokaliémie détectée, patient anémié, etc.) sans quantificateur. On parle d’une logique d’ordre zéro. Ici on triche un peu en autorisant des variables, mais ces variables ne font pas partie des définition des règles, elles permettent juste une inférence simple pour avoir un peu plus de possibilités d’écriture, mais ce n’est pas une logique de prédicats (cf. Wikipedia calcul des propositions / calcul des prédicats ). On ne fait pas non plus de calculs sur l’implication dans ce moteur.

Spécification des règles

La spécification est simple et comprend 3 parties : données, logique et actions. Voici un exemple de spécification minimale qui est valide mais qui ne fait rien :

DATA:
LOGIC:
ACTIONS:

Comme on peut le voir, chaque nom de section doit être suivi immédiatement de deux points (“:”).

Section DATA

La section DATA définit ce qui servira pour la saisie des données. Le format est :

  • Le nom de la variable qui contiendra la donnée, immédiatement suivie de deux points (“:”).
  • Le type de la donnée :
    • BOOL pour les variables booléennes qui peuvent être vraies ou fausses (TRUE / FALSE)
    • NUM pour les variables numériques
    • DATE pour les dates
    • TIME pour les heures (et minutes)
    • TEXT pour les variables qui vont contenir du texte
    • Pour les variables qui proposent un choix fermé, ‘{‘ suivi des textes des options, puis ‘}’. Par exemple si on peut choisir entre A, B et C : {‘A’,’B’,’C’}. Remarquez ici que le texte est entouré de simples cotes.
  • Un point. C’est important, le point marque la fin de la déclaration. Attention cependant car si la déclaration de variable finit par un nombre, l’ajout d’un point fera croire à l’interpréteur qu’il s’agit d’un nombre décimal à virgule ! Il faut donc dans ce cas ajouter un espace entre le dernier chiffre et le point !

Un type de donnée important est le type de données CALC. Les données de type CALC ne sont pas saisies, mais calculées. Après CALC on met un signe égal (‘=’) puis une expression qui sera évalueée. Elles peuvent utiliser pour exécuter leur calcul d’autres variables, et les règles logiques qui sont définies dans LOGIC. Les expressions peuvent utiliser *, /, -, +, les parenthèses (, ), et des fonctions telles que LOG, SIN, etc… Pour une liste détaillée de ce que l’on peut utiliser dans une expression, se référer au manuel de référence.

Exemple de déclaration de donnée CALC :

longueur: NUM.
largeur: NUM.
surface: CALC = longueur * largeur.

Pour toutes les déclarations de variable, on peut mettre une valeur par défaut qui se retrouvera comme valeur par défaut dans le navigateur. Pour mettre une valeur par défaut, faire suivre le nom du type de donnée par un signe égal (‘=’), puis la valeur à mettre par défaut. Ex :

age_majorite_ans: NUM = 18 .

La convention est que les noms de variables commencent par une minuscule.

Section LOGIC

La section LOGIC est au coeur du modèle, puisque c’est là que l’on définit les règles logiques.

Une règle commence par le nom de la règle. Chaque nom de règle commence et finit par des guillemets, et peut contenir ce qu’on veut (à part des guillemets).

La déclaration de la règle ensuite suivie de <- qui introduit le corps de la règle, qui est composé d’une expression utilisant des termes logiques.

La fin de la déclaration se fait à l’aide d’un point.

Les opérateurs logiques sont :

  • Le OU : |
  • Le ET : &
  • Le NON (négation) : !

Les opérateurs de comparaison permettent de comparer la valeur d’une variable avec un nombre ou un texte. Les opérateurs sont classiques : = <> < <= >= >

Une règle qui est vide (et qui donc se finit tout de suite par un point) est toujours “true” et est appelée un fait.

Exemple :

"Je suis toujours vraie".

La convention est que les noms de règle commencent par une majuscule.

Section ACTIONS

La section ACTIONS définit des actions qui sont exécutée lorsqu’une règle est évaluée à “true”. Pour l’instant il n’y a qu’un type d’action possible qui est d’écrire un message.

Chaque action a la forme suivante :

  • Nom de la règle, suivi de deux points
  • Le mot WRITE
  • Le message à afficher, entre cotes.
  • Un point

Dans les messages, les références à des variables avec “$” suivi du nom de la variable et un espace seront remplacées par la valeur de la variable.

Exemples

Il y a deux exemples que l’on peut regarder sur la page du moteur de règle. Il faut aller en bas de la page, il y a deux boutons marqués “Bouton1” et “Bouton2”.

Cliquer sur Bouton1, et vous aurez un exemple simple avec une variable, une règle et une action.

#Exemple simple : detection d'une hypokaliémie.
DATA:
  potassium: NUM .
LOGIC:
 "Hypokaliémie" <- potassium < 3.5 . # noter l'espace entre le nombre et le point
ACTIONS:
  "Hypokaliémie": WRITE 'Une Hypokaliémie ($potassium  mmol/l) a été détectée' .

En cliquant ensuite sur le bouton “Analyser” vous aurez la ligne pour entrer la donnée, la ligne qui affiche le fait correspondant à la règle, et la zone avec le message d’action.

Lorsqu’une donnée a été entrée, elle est prise en compte dès que l’on sort de la zone de saisie.

Notez ici qu’on voit aussi l’utilisation de commentaires : un caractère “#” commence un commentaire, ce commentaire se poursuit jusqu’à la fin de la ligne.