Quatre exemples sous WebCLIPS

Slides:



Advertisements
Présentations similaires
Bratec Martin ..
Advertisements

NOTIFICATION ÉLECTRONIQUE
Fragilité : une notion fragile ?
SEMINAIRE DU 10 AVRIL 2010 programmation du futur Hôtel de Ville
Phono-sémantique différentielle des monosyllabes italiens
MAGGIO 1967 BOLOGNA - CERVIA ANOMALIES DU SOMMEIL CHEZ L'HOMME
droit + pub = ? vincent gautrais professeur agrégé – avocat
Transcription de la présentation:

Quatre exemples sous WebCLIPS Introduction 2 Exemple n°1 3 Exemple n°2 5 Exemple n°3 7 Exemple n°4 9 Modules à importer 11 Codage des caractères 12 Dialogue client-serveur 14

Introduction Qu’est-ce que WebCLIPS ? C’est une implémentation de CLIPS sous la forme d’un CGI Les données sont passées par les méthodes GET ou POST Les pages HTML sont générées dans les règles de production CLIPS Le CGI WebCLIPS peut supporter plusieurs applications Le paramétrage de WebCLIPS et de chaque application est contenu dans le fichier « webclips.ini » (localisé dans le répertoire cgi-bin) Les faits spécifiques à chaque client peuvent être sauvegardés : Soit chez les clients (dans les pages HTML générées) Soit chez le serveur (dans des fichiers temporaires) Débugage possible Les messages d’erreur sont envoyés sous la forme de pages HTML On peut rediriger les flux de CLIPS (werror, wwarning, wtrace) Autres fonctionnalités (non décrites dans ce cours) Voir le document de Michaël Giordano (section cours)

Exemple n°1 Exemple 1 : juste lancer WebCLIPS avec un fichier « .clp » Extrait du fichier webclips.ini <HTML> <HEAD><TITLE>Exemple WebCLIPS</TITLE></HEAD> <BODY bgcolor=#FFFFFO> <FORM ACTION="/cgi-bin/webclips.exe" METHOD="GET"> <INPUT TYPE="hidden" NAME="fact" VALUE="(ScreenName (ScrnName Exemple 1))"> <INPUT TYPE="submit"> </FORM> </BODY> </HTML> [Exemple 1] RouterList=wtrace wtraceEcho=screen LoadHelper=Yes script1=c:\serveur\dea\exemple1.clp

Exemple n°1 ! Extrait du fichier CLIPS exemple1.clp Réponse de WebCLIPS (defrule HELLO_WORLD "Pour afficher Hello World ! en gras sur un fond jaune clair" => (printout t "<HTML>" crlf) (printout t "<BODY bgcolor=#FFFFFO>" crlf) (printout t "<B>Hello World !</B>" crlf)) ! Ne pas ajouter </BODY></HTML> à la fin, c’est WebCLIPS qui s’en charge ! <HTML> <BODY bgcolor=#FFFFFO> <B>Hello World !</B> <INPUT TYPE="hidden" NAME="fact" VALUE="(ScreenName (ScrnName Exemple 1))"> </BODY> </HTML>

Exemple n°2 Exemple 2 : assertion d’un fait sélectionné dans une "list box" <HTML> <HEAD><TITLE>Exemple WebCLIPS</TITLE></HEAD> <BODY bgcolor=#FFFFFO> <FORM ACTION="/cgi-bin/webclips.exe" METHOD="GET"> <INPUT TYPE="hidden" NAME="fact" VALUE="(ScreenName (ScrnName Exemple 2))"> <SELECT NAME="fact"> <OPTION VALUE="(fait numero 1)">ajouter le pattern (fait numero 1) <OPTION VALUE="(fait numero 2)">ajouter le pattern (fait numero 2) </SELECT> <INPUT TYPE="submit"> </FORM> </BODY> </HTML>

Exemple n°2 Extrait du fichier CLIPS exemple2.clp Réponse de WebCLIPS (defrule AFFICHAGE "Pour afficher le fait sélectionné" (fait numero ?x) => (printout t "<HTML><BODY bgcolor=#FFFFFO>" crlf) (printout t "Vous avez sélectionné le fait n°" ?x crlf)) <HTML><BODY bgcolor=#FFFFFO> Vous avez sélectionné le fait n°2 <INPUT TYPE="hidden" NAME="fact" VALUE="(ScreenName (ScrnName Exemple 2))"> </BODY> </HTML>

Exemple n°3 Exemple 3 : sélection d’une base de faits initiaux <HTML> <HEAD><TITLE>Exemple WebCLIPS</TITLE></HEAD> <BODY bgcolor=#FFFFFO> <FORM ACTION="/cgi-bin/webclips.exe" METHOD="GET"> <INPUT TYPE="hidden" NAME="fact" VALUE="(ScreenName (ScrnName Exemple 3))"> <SELECT NAME="fact"> <OPTION VALUE="(factgroup c:\serveur\dea\base1)">Base de faits initiaux n°1 <OPTION VALUE="(factgroup c:\serveur\dea\base2)">Base de faits initiaux n°2 </SELECT> <INPUT TYPE="submit"> </FORM> </BODY> </HTML>

Exemple n°3 Extrait du fichier CLIPS exemple3.clp Bases de faits initiaux Contenu du fichier « base1 » : (base numero 1) Contenu du fichier « base2 » : (base numero 2) Commande GET envoyée par le client au serveur GET cgi-bin/webclips.exe? fact=%28ScreenName+%28ScrnName+Exemple+2%29%29& fact=%28factgroup+c%3A%5Cserveur%5Cdea%5Cbase2%29 Réponse de WebCLIPS (defrule AFFICHAGE "Pour afficher le numéro de base sélectionnée" (base numero ?x) => (printout t "<HTML><BODY>" crlf) (printout t "Vous avez sélectionné la base n°" ?x crlf))

Exemple n°4 Exemple 4 : mise en œuvre de champs de saisie textuels <HTML> <HEAD> <TITLE>Exemple WebCLIPS</TITLE> </HEAD> <BODY bgcolor=#FFFFFO> <FORM ACTION="/cgi-bin/webclips.exe" METHOD="POST"> <INPUT TYPE="hidden" NAME="fact" VALUE="(ScreenName (ScrnName Exemple 4))"> <INPUT TYPE="hidden" NAME="factname1" VALUE="login"> <INPUT TYPE="hidden" NAME="factname2" VALUE="password"> <BR>Entrez votre login : <INPUT TYPE="text" NAME="factvalue1" size=10> <BR>Entrez votre password : <INPUT TYPE="password" NAME="factvalue2" size=10> <INPUT TYPE="submit" value="connexion"> </FORM> </BODY> </HTML>

Exemple n°4 Fichier CLIPS exemple4.clp (defrule ACCEPTATION "L'usager est répertorié" ?p <- (verification ?login ?pass) (autorisation ?login ?pass) => (retract ?p) (printout t "<HTML><BODY>" crlf) (printout t "<B>Autorisation</B>" crlf)) (defrule REFUS "L'usager n'est pas répertorié" (not (autorisation ?login ?pass)) (printout t "<B>Usager inconnu</B>" crlf)) Fichier CLIPS exemple4.clp (defmodule MAIN "Indispensable dans toute appli WebCLIPS" (import WebCLIPSHTML deffunction ?ALL) (import WebCLIPSTemplates deftemplate ?ALL)) (deffacts AUTORISATIONS "Liste des usagers autorisés" (autorisation lehuen bond007) (autorisation tchounikine tchou72)) (defrule DEBUG "Pour afficher la trace des inférences" (declare (salience 10)) => (watch facts) (watch rules)) (defrule VERIFICATION "Assertion du fait verification" ?p <- (login ?login) ?q <- (password ?pass) (retract ?p ?q) (assert (verification ?login ?pass)))

Modules à importer ! Remarques sur les modules de WebCLIPS : Toute base de connaissances sous WebCLIPS commence par la définition du module MAIN : (defmodule MAIN (import WebCLIPSHTML deffunction ?ALL) (import WebCLIPSTemplates deftemplate ?ALL)) Module WebCLIPSTemplates : Obligatoire, il contient des variables globales nécessaires à WebCLIPS Sa fonction est totalement transparente pour le programmeur Module WebCLIPSHTML : Optionnel, il contient toutes les « HTML Helper functions » décrites dans le document de cours « How to Use WebCLIPS » Le fichier webclips.ini doit comporter la ligne « LoadHelper=Yes » si le module doit être importé sinon, vous aurez le message « Unable to find defmodule WebCLIPSHTML » et vous passerez des heures à trouver cette erreur vicieuse (comme cela vient de m’arriver) !

Caractères accentués Remarques sur le codage des caractères sous CLIPS : Problème lors de l’utilisation de caractères accentués Les faits sous CLIPS ne doivent pas contenir de caractères accentués Le contenu d’un champ de saisie est directement inséré dans un fait Avec l’exemple n°4, WebCLIPS a construit les faits suivants : (login lehuen) (password bond007) Il faut donc pas entrer de caractères accentués ou de typographie Comment utiliser les accents ? Il suffit de passer par une fonction Javascript qui ajoute des guillemets à la chaîne de caractères qui est envoyée à WebCLIPS : <SCRIPT language="JavaScript"> function clips() { var value1 = document.nomFormulaire.factvalue1.value; var value2 = document.nomFormulaire.factvalue2.value; document.nomFormulaire.factvalue1.value = '"' + value1 + '"'; document.nomFormulaire.factvalue2.value = '"' + value2 + '"'; document.nomFormulaire.submit(); } </SCRIPT> Un grand merci à Alain Corbière (promo DEA 2000-01)

Caractères accentués Modification du formulaire HTML en conséquence : Modification du code CLIPS en conséquence : <FORM NAME="nomFormulaire" ACTION="/cgi-bin/webclips.exe" METHOD="POST"> <INPUT TYPE="hidden" NAME="fact" VALUE="(ScreenName (ScrnName Exemple 4))"> <INPUT TYPE="hidden" NAME="factname1" VALUE="login"> <INPUT TYPE="hidden" NAME="factname2" VALUE="password"> <BR>Entrez votre login : <INPUT TYPE="text" NAME="factvalue1" size=10> <BR>Entrez votre password : <INPUT TYPE="password" NAME="factvalue2" size=10> <INPUT TYPE="submit" VALUE="connexion" onClick="clips()"> </FORM> (deffacts AUTORISATIONS "Liste des usagers autorisés" (autorisation "lehuen" "bond007") (autorisation "tchounikine" "tchou72"))

Dialogue client-serveur Mémorisation de l’application qui a généré la page HTML Chaque page générée contient le nom son application Voir les réponses de WebCLIPS pour les exemples n°1 et n°2 Mémorisation des faits spécifiques à chaque client Si l’application nécessite une interaction avec l’utilisateur, on doit pouvoir maintenir la base de faits durant l’interaction Avant de quitter, WebCLIPS peut sauvegarder sa base de faits Soit chez le client : dans la page HTML générée (sous la forme de données cachées) : <INPUT TYPE="hidden" NAME="fact" VALUE="(exemple de fait)"> valable si la base de faits n’est pas trop volumineuse il faut ajouter la ligne « PreserveFacts=Yes » dans le fichier webclips.ini Soit chez le serveur : dans un fichier temporaire qui sera rechargé lors de la requête suivante le nom du fichier de faits est mémorisé dans la page HTML générée <INPUT TYPE="hidden" NAME="WC_SavedFacts" VALUE="c:\tmp\wc6"> il faut ajouter la ligne « PreserveFacts=Disk » dans le fichier webclips.ini