14
Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 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

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Embed Size (px)

Citation preview

Page 1: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

1

Quatre exemples sous WebCLIPS

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

Page 2: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

2

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

Introduction

Page 3: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

3

[Exemple 1]RouterList=wtracewtraceEcho=screenLoadHelper=Yesscript1=c:\serveur\dea\exemple1.clp

<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 : juste lancer WebCLIPS avec un fichier « .clp »

• Extrait du fichier webclips.ini

Exemple n°1

Page 4: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

4

• Extrait du fichier CLIPS exemple1.clp

• Réponse de WebCLIPS<HTML><BODY bgcolor=#FFFFFO><B>Hello World !</B><INPUT TYPE="hidden" NAME="fact" VALUE="(ScreenName (ScrnName Exemple 1))"></BODY></HTML>

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

Exemple n°1

!Ne pas ajouter </BODY></HTML> à la fin,c’est WebCLIPS qui s’en charge !

Page 5: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

5

• 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

Page 6: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

6

• 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°2

Page 7: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

7

• 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

Page 8: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

8

• 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°3

Page 9: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

9

• 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

Page 10: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

10

• 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é" ?p <- (verification ?login ?pass) (not (autorisation ?login ?pass)) => (retract ?p) (printout t "<HTML><BODY>" crlf) (printout t "<B>Usager inconnu</B>" crlf))

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

Exemple n°4

Page 11: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

11Modules à 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)

!

Page 12: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

12

• 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 :

Caractères accentués

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

Page 13: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

13Caractères accentués

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

– Modification du formulaire HTML en conséquence :

– Modification du code CLIPS en conséquence :

(deffacts AUTORISATIONS "Liste des usagers autorisés" (autorisation "lehuen" "bond007") (autorisation "tchounikine" "tchou72"))

Page 14: Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01) 1 Quatre exemples sous WebCLIPS Introduction2 Exemple n°13 Exemple n°25 Exemple n°37 Exemple n°49 Modules

Quatre exemples WebCLIPS © Jérôme Lehuen (03/10/01)

14Dialogue 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