• Aucun résultat trouvé

[PDF] Documentation de cours sur le développement avec ASP et Visual Basic dot Net - Cours ASP

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Documentation de cours sur le développement avec ASP et Visual Basic dot Net - Cours ASP"

Copied!
72
0
0

Texte intégral

(1)

Module 21

:

DEVELOPPEMENT ET

DEPLOIEMENT DE SITES

WEB DYNAMIQUES

Contenu

I. INTRODUCTION...4

1. Pages Web statiques, Pages Web dynamiques...4

1. Serveur Web passif...4

2. Serveur Web actif...5

3. Technologies coté client...5

4. Technologies coté serveur...5

5. Présentation de ASP.NET...5

6. Créer un site exemple sur votre machine...6

II. Démarrer une application web (Voir tp1.docx)...7

III. Gestion des états de session et d’application...7

1. Application...7

2. Session...7

3. PostBack...8

4. Les Server Controls...8

5. ViewState...8

6. Cookies...9

7. Variable de session...9

8. Variable d'application...10

9. QueryString...10

(2)

V. La navigation du site web (Voir TP3)...11

VI. Accès aux données (Voir TP4)...11

1. Connexion à la base de données...11

2. Source de données...12

a) SqlDataSource :...12

b) LinqDataSource...12

3. Résultat...14

4. Affichage et mise à jour des données...14

VII. Ajout de contrôles et contrôles de validation (voir TP5)...14

VIII. Création d'un site Web Sécurisé...14

1. Configuration de l'appartenance...15

c) Pour ajouter un nouveau dossier au site Web...15

d) Pour créer un utilisateur d'appartenance...15

e) Pour définir des règles d'accès pour le sous-répertoire PagesMembres...16

2. Connexion de l'utilisateur...16

f) Pour créer une page d'accueil avec un bouton de connexion...16

g) Pour créer une page de connexion...17

h) Affichage des erreurs de connexion...17

3. Affichage d'informations pour les utilisateurs connectés...17

i) Pour personnaliser l'affichage pour les utilisateurs connectés...17

4. Création d'utilisateurs...18

j) Pour créer une page d'inscription...18

k) Pour créer un lien d'inscription sur la page d'accueil...18

5. Modification de mots de passe...19

l) Pour créer une page de modification de mot de passe...19

m) Pour créer un lien de modification de mot de passe sur la page d'accueil....19

6. Récupération d'un mot de passe...20

n) Pour ajouter la récupération de mot de passe...20

IX. Développer un service Web...21

X. XML et technologies associés...21

1. XML...21

a) Généralité...21

b) Concevoir un document XML...21

2. DTD...22

3. Pourquoi utiliser une DTD ?...22

4. Types de DTD...22 c) DTD interne...22 d) DTD externe...23 e)...23 5. Déclarations d’éléments...23 f) Elément texte...24 g) Elément vide...24 6. Indicateurs d'occurrence...24

(3)

Séquence d'éléments...24

h) Choix d'éléments...25

i) Choix d'éléments(suite)...26

Elément quelconque...26

j) Elément à contenu mixte...26

7. Déclarations d'attributs...27

Type chaîne de caractères...27

k) Valeurs par défaut...28

l) Déclaration d'un attribut requis...28

m) Déclaration d'un attribut optionnel :...28

Déclaration d'un attribut avec une valeur fixe :...28

n) Type ID...28 NMTOKEN(S)...29 Type énuméré...29 o) TP 21 : Exemple Bibliographie DTD...29 a) Exercice1 DTD...29 b) Exercice2 DTD (attributs)...30 8. XSD...31 a) Généralité...31

b) Construction d’un schéma...31

c) Déclaration d’un élément simple...31

d) Valeur par défaut et valeur fixée pour un type simple...33

e) Déclaration d’attributs...33

f) Restriction à des valeurs...34

g) Restriction à un ensemble de valeurs...34

h) Restriction à une série de valeurs...34

i) Eléments complexes...36

j) Les indicateurs...38

9. XSLT...41

a) Introduction...41

b) Caractéristiques...41

c) Structure d’un fichier XSL...42

d) format de sortie : <xsl:output>...42

e) Règle de transformation : <xsl:template>...43

f) <xsl:value-of>...43

g) Le déclenchement d’une règle de transformation...44

h) Exemples de mises en forme...45

i) <xsl:element>non traité...48 j) <xsl:attribute>...48 k) Syntaxe courte...49 a) <xsl:param>...49 a) <xsl:for-each>...50 a) <xsl:if>...50 b) <xsl:choose>...51 c) <xsl:number>...51 d) <xsl:sort>...51 10. XPath...52 a) Introduction...52

(4)

b) Chemin de localisation...53

c) Exemple de chemins de localisation...53

d) Axes...54 a) Sélection d'attributs...55 b) appel de fonctions...55 c) Opérateurs logiques...56 d) Exercice :...56 e) Syntaxe abrégée...57

I.

INTRODUCTION

1. Pages Web statiques, Pages Web dynamiques

Une page statique est représentée par un fichier HTML. Une page dynamique est, elle, générée "à la volée" par le serveur web.

Exemple d’une page statique : <html>

<head>

<title>essai 1 : une page statique</title> </head>

<body> <center>

<h1>Une page statique...</h1> </body>

</html>

(5)

2. Serveur Web actif

3. Technologies coté client

 DHTML : combine HTML, JAVASCRIPT et CSS

 JAVASCRIPT

 HTML5 : HTML , JAVASCRIPT et CSS

4. Technologies coté serveur

 PHP / MYSQL

 JSP

 ASP .NET

5. Présentation de ASP.NET

Asp.NET est basé sur la technologie .NET. Il permet la programmation d’applications Web dynamiques, du côté du serveur.

Le schéma suivant illustre le fonctionnement d'ASP.NET dans l'environnement .Net avec le serveur IIS (serveur web fournis par Windows) :

 1 = vous tapez une url dans votre navigateur et donc, envoyez une

requête pour une page aspx d'un client web vers le serveur IIS

 2 = la requête est analysée et le traitement est transféré au

runtime, un processus est créé pour exécuter l'application

 --> S'il s'agit de la première exécution du code de cette page, le

compilateur JIT (Just In Time) compile le code en binaire natif et le stoque en mémoire.

 --> Si ce n'est pas la première exécution, le code binaire est chargé

(6)

 3 = ce code binaire est exécuté puis renvoyé vers le serveur IIS

 4 = IIS renvoie la réponse sous la forme de code HTML strict vers

l'utilisateur. Ce code HTML est affiché dans votre navigateur. Environnement de développement :

 Un serveur Web : Seveur IIS

 Framework: installé avec VisualStudio .Net

 Un EDI : VisualStudio .Net, pas nécessaire mais pratique

Exemple : (dans un fichier bloc note)

<%@ Page Language="C#" %> <html>

<body>

<h1>Bonjour</h1> <br />

<h2>Nous sommes le <%= DateTime.Now.ToString() %>.</h2> </body>

</html>

6. Créer un site exemple sur votre machine

a. Allez dans Panneau de configuration\Tous les Panneaux de configuration\Outils d’administration

b.

c. Ouvrir le bloc-notes et créer un fichier avec ce code puis sauvegarder-le à la racine du site que vous avez créé en le nommant par exemple

"bonjour.aspx".

<%@ Page Language="C#" %> <html>

(7)

<h1>Bonjour</h1> <br />

<h2>Nous sommes le <%= DateTime.Now.ToString() %>.</h2> </body>

</html>

d. Exécutez cette page aspx dans votre navigateur en tapant son adresse dans la barre de navigation :

http://localhost/PremierePage/bonjour.aspx

II.

Démarrer une application web (Voir tp1.docx)

III.

Gestion des états de session et d’application

Les événements assez particuliers et très importants pour le déroulement et le contrôle d’une application ASP.NET :

1 Application

Evéneme

nt Description

Application_S

tart Exécuté lors du premier appel à une page du site depuis le démarrage de IIS Application_E

nd

Appelé lorsque l'application se termine, cela ne signifie pas que IIS s'arrête mais est d'office appelé si, pour une raison quelconque IIS est arrêté

7. Session

Evénem

ent Description

Session_St

art appelé lors de chaque nouvelle session d'un navigateur client Session_En

d

fin de session : lors d'un timeout ou lors d'une destruction explicite (Session.Abandon()) via un lien "Log Out" par exemple

Il faut aussi savoir qu'une session peut stocker ses données en mode "InProc" (dans le process en mémoire) ou en mode "Sql..." (dans une BD SqlServer) .

Application et Session sont des notions très importantes en ASP.NET. Elles jouent en effet un rôle très actif au niveau de la vie d'un site et,

notamment, au niveau de la pérénité des données véhiculées dans le site lui-même.

Un petit schéma pour mieux visualiser la différence entre "Application" et "Session" :

(8)

Soit trois utilisateurs U1, U2 et U3 qui envoient une requête vers le serveur IIS. Il y aura un seul objet "Application" commun à tous les

utilisateurs du site mais trois objets "Session" correspondant chacun à un utilisateur précis.

8. PostBack

Cet événement génère un appel au serveur. Dans ASP.NET , la page se rappelle continuellement en déclenchant cet événement. C'est au programmeur de créer les conditions de passage d'une page à l'autre. IsPostBack est une propriété de la page booléenne (read-only) qui permet justement d'effectuer ce genre de test.

Par exemple, on l'utilise dans l'événement Page_Load pour éviter de recharger des données persistantes.

AutoPostBack est une propriété des contrôles qui active le déclenchement d'un aller retour sur le serveur.

9. Les Server Controls

Un petit mot sur les types de contrôles présents dans ASP.NET. Il existe deux jeux de contrôles s'exécutant côté serveur :

Les Web Controls, gérés par des événements, ils ressemblent plus aux objets utilisés dans du développement winforms c'est-à-dire qu'ils

possèdent des propriétés ("font", "backcolor", ...) facilitant la mise en forme. Ils dépendent de "System.Web.UI.WebControls".

Les HTML Controls qui correspondent directement aux balises HTML. Les attributs des balises correspondantes sont accessibles via les

propriétés de ces contrôles. Pour faire une analogie avec les

"WebControls", ceux-ci ne possèdent qu'une balise "Style" pour la mise en forme, cela est plutôt limitatif.

(9)

10. ViewState

Le ViewState représente l'état de l'ensemble des contrôles d'un page. Les informations sont sauvées sous forme d'un flux sérialisé dans la page HTML et le champ caché _VIEWSTATE permet le transit de ces

informations entre le client et le serveur.

Il peut être désactivé au niveau d'un contrôle, au niveau d'une page ou au niveau d'une application en plaçant la propriété EnabledViewState à

False.

Le plus intéressant est que le programmeur peut y ajouter ses propres informations sous forme d'objets indexés par une clé de type String. Pour sauvegarder et lire une information, voici comment utiliser le

ViewState, par exemple pour modifier un argument dans une requête de sélection :

protected void Page_Load(object sender, EventArgs e) {

if ( !IsPostBack) {

ViewState["tri"]="nom"; ConstruireRequete(); }

}

void ConstruireRequete() {

String tri= Convert.ToString(ViewState["tri"]);

String rq = "SELECT * FROM UneTable ORDER BY " + tri; }

11. Cookies

Les cookies permettent aux applications Web de stocker des informations spécifiques à l'utilisateur. Par exemple, lorsqu'un utilisateur visite votre site, les cookies peuvent vous servir à stocker ses préférences, ou

d'autres informations. Lorsque cet utilisateur revient visiter votre site Web, l'application peut récupérer les informations stockées

précédemment.

Exemple de Création de cookie

String User = "neo";

HttpCookie cookie = new HttpCookie("User"); cookie.Values.Add("User", User);

Response.Cookies.Add(cookie);

Exemple de Lecture de cookie

HttpCookie cookie = Request.Cookies[0]; String User = cookie.Value;

Détecter si le navigateur supporte les cookies

(10)

Supprimer un cookie

Vous ne pouvez pas supprimer directement un cookie sur l'ordinateur d'un utilisateur. Mais vous pouvez donner au navigateur de l'utilisateur l'ordre de supprimer le cookie en réglant la date d'expiration de ce cookie sur une date révolue. La prochaine fois que l'utilisateur soumettra une demande à une page dans le domaine ou le chemin d'accès où se trouve le cookie, le navigateur jugera que le cookie a expiré et le supprimera. String User = "neo";

HttpCookie myCookie = new HttpCookie("User"); myCookie.Expires = DateTime.Now.AddDays(-1D); myCookie.Values.Add("User", User);

Response.Cookies.Add(myCookie);

12. Variable de session

"Session" est un objet qui permet de conserver des données tout le long d’une session utilisateur.

Il comporte plutôt comme une table de hachage. Prenons deux pages aspx :

page1.aspx : page dans laquelle nous encodons, par l'intermédiaire d'une TextBox, un nom de société

page2.aspx : page dans laquelle nous affichons le nom de la société (vous comprenez que le but est d'avoir une page d'affichage de données de société se trouvant par exemple dans une base de données)

protected void Button1_Click(object sender, EventArgs e) {

Session["nom"] = "jouhari";

Response.Redirect("page2.aspx") ; }

Code de la page1.aspx : L'utilisateur introduit un nom de société dans la TextBox nommée "txtNomSoc". Cette information est sauvée en Session avant de passer à la page2.aspx

protected void Page_Load(object sender, EventArgs e) {

if (!(Session["nom"] == null))

TextBox1.Text = Session["nom"].ToString(); else

TextBox1.Text = "Aucun nom n'a été spécifié"; }

Code de la page2.aspx : Un test est effectué pour savoir si la variable de session contient bien une donnée.

(11)

La grande différence avec l'objet Session se situe dans le fait qu'un objet Application conserve des données pour l'ensemble des utilisateurs d'un même site web. Il s'utilise de la même manière que l'objet Session. L'objet Application étant commun à tous les utilisateurs du site, il est préférable de bloquer l'accès lors de l'écriture et, bien entendu, de ne pas

oublier l'action inverse.

protected void Page_Load(object sender, EventArgs e) {

int cpt = 0;

Application.Lock();

if(!(Application["Nbr"]==null))

cpt = Convert.ToInt32(Application["NbrVisiteur"]);

cpt++;

Application["NbrVisiteur"] = cpt; Application.UnLock();

Label2.Text = "Page vue : " + cpt + " fois."; }

14. QueryString

QueryString permet de faire passer des informations via l'URI d'une page à une autre.

En reprenant l'exemple d'un ID de société sélectionné dans une page dont les données sont présentées dans une autre page, on aurait très bien pu indiquer cet ID via l'URI lors de l'appel à la deuxième page. Vous avez choisi la société ayant un ID = 1235, voici comment passer l'identifiant à la page suivante :

<A href="page2.aspx?idsoc=1235"></A>

Pour récupérer l'ID dans la seconde page, il vous suffira de coder comme suit :

<p>Vous avez choisi la société : & Request.QueryString("idsoc")</p>

Vous comprenez maintenant le pourquoi de certaines url complexes du genre :

http://www.monsite.com/repertoire/liste.asp?

id=1257&lng=fr&action=del&email=abc@prov.fr

IV.

Travailler la présentation graphique (voir TP2)

V.

La navigation du site web (Voir TP3)

VI.

Accès aux données (Voir TP4)

1 Connexion à la base de données 1ère façon :

(12)

2ème façon (nous avons juste le fichier mdf) : Ajouter le dossier App_Data :

Ajouter un élément existant(vous pouvez également rajouter un nouvel élément pour créer une BD):

Puis choisir son ficher .mdf de sa base de données 2 Source de données

Vous avez 2 options :

a) SqlDataSource :

Le contrôle SqlDataSource vous permet d'exécuter les opérations d'instructions Select, Update, Insert ou Delete sans écrire

Insérer un contrôle SqlDataSource et configurer le ( choisir la table et la connexion .si pas de connexion on vous propose d’en créer une).

(13)

b) LinqDataSource

Vous utiliserez le Concepteur Objet/Relationnel pour créer une classe qui représente la table de la base de données contenant les valeurs. Le contrôle LinqDataSource agira sur cette classe générée afin de récupérer, de mettre à jour, d'insérer et de supprimer des données. Pour utiliser le contrôle LinqDataSource, il faut créer les classes qui représentent des entités de base de données :

Pour créer une classe pour la table Film

1. Si le site Web ne possède pas déjà un dossier App_Code, dans l'Explorateur de

solutions, cliquez avec le bouton droit sur le projet, cliquez sur Ajouter le dossier ASP.NET, puis cliquez sur App_Code.

2. Cliquez avec le bouton droit sur le dossier App_Code, puis cliquez sur Ajouter un

nouvel élément.

3. Sous Modèles installés, sélectionnez le modèle Classes LINQ to SQL, renommez le

fichier cinema.dbml, puis cliquez sur Ajouter.

Le Concepteur Objet/Relationnel s'affiche.

4. Dans l'Explorateur de serveurs, faites glisser la table Film dans la fenêtre du

Concepteur Objet/Relationnel.

La table Film et ses colonnes sont représentées comme une entité nommée Film dans la fenêtre du Concepteur O/R.

(14)

5. Enregistrez le fichier cinema.dbml.

6. Dans l'Explorateur de solutions, ouvrez le fichier cinema.designer.vb.

Remarquez qu'il comporte deux classes : cinemaDataContext et Film. La classe cinemaDataContext représente la base de données et la classe Film représente la table de base de données. Le constructeur sans paramètre pour la classe cinemaDataContext lit la chaîne de connexion du fichier Web.config.

7. Ouvrez le fichier Web.config.

Remarquez que la chaîne de connexion a été ajoutée dans l'élément connectionStrings.

8. Fermez le fichier de classe et le fichier Web.config.

Maintenant que vous avez une table de base de données et des classes qui représentent des entités de base de données, vous pouvez utiliser un contrôle LinqDataSource sur une page Web ASP.NET pour gérer des données :

Pour créer et configurer un contrôle LinqDataSource

1. Dans Visual Studio, créez une page Web ASP.NET et basculez en mode Design.

2. À partir de l'onglet Données de la Boîte à outils, faites glisser un contrôle

LinqDataSource et déposez-le dans l'élément form de la page Web. Vous pouvez conserver à la propriété ID la valeur LinqDataSource1.

(15)

3. Affectez à la propriété ContextTypeName la valeur CinemaDataContext.

4. Affectez à la propriété TableName la valeur Film.

5. Affectez à AutoPage la valeur true et basculez en mode Source.

L'exemple suivant illustre le balisage déclaratif du contrôle LinqDataSource.

<asp:LinqDataSource ContextTypeName="CinemaDataContext" TableName="Film" AutoPage="true" ID="LinqDataSource1" runat="server"> </asp:LinqDataSource>

Remarquez que vous n'avez pas eu à spécifier de commandes de base de données pour sélectionner les données.

15. Résultat

Vous pouvez à présent ajouter un contrôle DetailsView et le lier au contrôle LinqDataSource ou au contrôle SqlDatasource. Le contrôle DetailsView permet aux utilisateurs de consulter des données gérées par le contrôle LinqDataSource.

16. Affichage et mise à jour des données

a) ListView

b) GridView

c) DetailView

VII.

Ajout de contrôles et contrôles de validation (voir

TP5)

VIII.

Création d'un site Web Sécurisé

La limitation de l'autorisation de consulter certaines pages à quelques membres et à d'autres utilisateurs authentifiés est une condition de sécurité courante des sites Web. Dans ce cas, l'application doit inviter l'utilisateur à entrer un nom et un mot de passe.

Cette procédure pas à pas illustre les tâches suivantes :

 Configuration d'une application afin d'inclure des services d'appartenance d'ASP.NET

(16)

 Utilisation de contrôles de connexion afin d'obtenir les informations d'identification de l'utilisateur et d'afficher les informations aux utilisateurs connectés.

 Protection d'une ou plusieurs pages dans votre application afin que seuls les

utilisateurs connectés puissent les consulter.

 Autorisation d'inscription à votre site accordée à de nouveaux utilisateurs.

 Autorisation de modification et de réinitialisation de leurs mots de passe.

1 Configuration de l'appartenance

À une étape ultérieure de cette procédure, vous mettrez des pages dans un sous-répertoire qui est protégé. Vous devez créer le sous-répertoire maintenant afin que vous puissiez configurer sa sécurité ultérieurement dans la procédure pas à pas.

c) Pour ajouter un nouveau dossier au site Web

1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nom de votre site

Web, puis cliquez sur Nouveau dossier.

2. Nommez le dossier PagesMembres.

Avant d'utiliser l'appartenance d'ASP.NET, vous devez configurer votre application afin d'activer l'appartenance et de définir des utilisateurs. Vous pouvez utiliser l'outil Administration de site Web qui fournit un assistant pour définir des paramètres de configuration. Lorsque vous terminez les étapes de l'Assistant, une base de données SQL Server nommée ASPNETDB.MDF est créée dans le dossier App_Data du projet.

Pour cette procédure pas à pas, vous définirez un mono-utilisateur.

d) Pour créer un utilisateur d'appartenance

1. Dans le menu Site Web, cliquez sur Configuration ASP.NET.

2. Sélectionnez l'onglet Sécurité, cliquez sur le lien vers Utilisez l'Assistant Installation

de sécurité pour configurer la sécurité étape par étape, puis cliquez sur Suivant.

3. Passez à l'étape 2 de l'Assistant et sélectionnez l'option À partir d'Internet.

L'Assistant affiche une page dans laquelle vous pouvez sélectionner la méthode d'authentification que votre site Web utilisera. Cette option spécifie que votre application utilisera l'authentification par formulaire, dans laquelle les utilisateurs se connecteront à l'application à l'aide d'une page de connexion que vous créerez à une étape ultérieure de cette procédure.

4. Cliquez sur Suivant.

L'Assistant affiche un message qui déclare que les informations utilisateur seront stockées à l'aide de Paramètres avancés des fournisseurs. Par défaut, les informations d'appartenance sont stockées dans un fichier de base de données Microsoft SQL Server Express dans le dossier App_Data de votre site Web.

5. Cliquez sur Suivant.

L'Assistant affiche une option pour créer des rôles. Vous effectuerez cette étape séparément à une étape ultérieure de cette procédure pas à pas. Par conséquent, n'activez pas la case à cocher Active les rôles pour ce site Web.

(17)

6. Cliquez sur Suivant.

L'Assistant affiche une page dans laquelle vous pouvez créer de nouveaux utilisateurs.

7. Entrez les informations qui définissent un utilisateur de votre application. Utilisez les

valeurs suivantes comme indications (vous pouvez utiliser toutes valeurs que vous souhaitez, mais assurez-vous de noter vos entrées pour une étape ultérieure de la procédure pas à pas) :

o Nom d'utilisateur Votre nom (sans espaces) ou un nom d'exemple.

o Mot de passe Un mot de passe. Un mot de passe fort est requis (mot de passe

qui inclut des majuscules et des minuscules, un signe de ponctuation et qui comprend au moins huit caractères).

o Adresse de messagerie Votre adresse de messagerie personnelle. À une étape

ultérieure de cette procédure pas à pas, vous vous enverrez un message électronique, vous avez donc besoin d'une adresse de messagerie valable.

o Question de sécurité et Réponse de sécurité Tapez une question et une réponse

à la question qui puissent être utilisées ultérieurement si vous avez besoin de récupérer votre mot de passe.

8. Cliquez sur Créer un utilisateur.

L'Assistant affiche une page de confirmation. Remarque :

Gardez l'outil Administration de site Web ouvert.

Précédemment dans la procédure pas à pas, vous avez créé un dossier nommé PagesMembres. Dans cette partie de la procédure pas à pas, vous créerez une règle qui assure que seuls les utilisateurs connectés peuvent accéder aux pages de ce dossier.

e) Pour définir des règles d'accès pour le sous-répertoire PagesMembres

1. Dans l'Assistant, cliquez sur Suivant.

L'Assistant affiche une page qui vous permet de créer des règles d'accès.

2. Dans la zone Ajouter une nouvelle règle d'accès, développez le nœud de votre site

Web.

3. Sélectionnez PagesMembres, le dossier que vous avez créé précédemment.

4. Sous La règle s'applique à, sélectionnez Utilisateurs anonymes.

5. Sous Autorisation, sélectionnez Refuser.

La règle que vous créez refuse l'accès aux utilisateurs anonymes, c'est-à-dire les utilisateurs qui ne sont pas connectés.

6. Cliquez sur Ajouter cette règle.

La nouvelle règle est affichée dans la grille au-dessous. Lorsque les utilisateurs demandent une page du sous-répertoire PagesMembres, les règles sont vérifiées pour déterminer si l'accès à la page est autorisé à l'utilisateur.

(18)

Vous en avez maintenant fini avec l'Assistant. L'Assistant ferme et vous revenez à l'onglet Sécurité de l'outil Administration de site Web.

17. Connexion de l'utilisateur

Dans le cadre de votre application, vous devez établir l'identité de l'utilisateur afin que l'application puisse effectuer des actions, telles que l'affichage ou le masquage des informations, selon l'identité de l'utilisateur. Pour obtenir l'identité de l'utilisateur, l'utilisateur doit être connecté.

Dans cette procédure pas à pas, vous ajouterez un lien sur la page d'accueil qui mène les utilisateurs à une page de connexion, puis vous créerez la page de connexion.

f) Pour créer une page d'accueil avec un bouton de connexion

1. Ouvrez ou basculez vers la page Default.aspx de votre site. (Si vous n'avez pas de

page Default.aspx, vous pouvez en ajouter une ou utiliser une page différente.)

2. Basculez en mode Design.

3. Tapez le texte statique tel que Bienvenue sur notre site et dans la barre d'outils « Mise

en forme », utilisez la liste déroulante « Format du bloc » pour mettre en forme le texte en Heading 1.

4. À partir du groupe Connexion de la Boîte à outils, faites glisser un contrôle

LoginStatus sur la page.

Par défaut, le contrôle LoginStatus est affiché comme un lien. Lorsque les utilisateurs cliquent sur ce dernier, l'application affiche une page de connexion. Vous pouvez à présent créer la page de connexion.

g) Pour créer une page de connexion

1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur votre application

Web, puis sélectionnez Ajouter un nouvel élément. Ajoutez un Formulaire Web nommé Login.aspx à votre site.

Remarque :

Pour cette procédure pas à pas, la page doit être nommée Login.aspx. Par défaut, l'authentification par formulaire est configurée pour utiliser une page portant ce nom. Même si vous n'aurez pas à le faire dans cette procédure pas à pas, il est possible de modifier la page de connexion par défaut, c'est-à-dire la page vers laquelle les utilisateurs sont redirigés, dans le fichier Web.config.

2. Dans la page Login.aspx, basculez en mode Design.

3. À partir du groupe Connexion de la Boîte à outils, faites glisser un contrôle Login sur

la page.

Le contrôle Login est un contrôle unique qui invitera l'utilisateur à entrer les informations d'identification et les validera.

(19)

h) Affichage des erreurs de connexion

Le contrôle Login inclut la validation qui aide les utilisateurs à entrer des informations correctes. Par exemple, si un utilisateur ignore le mot de passe, un contrôle de validateur affiche un astérisque (*) en regard de la zone Mot de passe. Vous pouvez fournir des informations plus complètes sur les erreurs de connexion en ajoutant un contrôle ValidationSummary à la page.

18. Affichage d'informations pour les utilisateurs connectés

Vous allez maintenant modifier la page d'accueil pour personnaliser l'affichage selon que l'utilisateur est connecté ou non. Les utilisateurs anonymes verront un message générique qui les invite à se connecter. Les utilisateurs connectés verront un message qui les accueille par leur nom de connexion.

i) Pour personnaliser l'affichage pour les utilisateurs connectés

1. Basculez vers la page Default.aspx ou ouvrez-la.

2. À partir du groupe Connexion de la Boîte à outils, faites glisser un contrôle

LoginView sur la page.

Le contrôle LoginView est affiché avec son modèle AnonymousTemplate ouvert. Ce modèle vous permet de définir le contenu que les utilisateurs verront avant qu'ils se soient connectés.

3. Cliquez sur la zone d'édition du contrôle LoginView pour activer l'édition.

4. Dans la zone d'édition du modèle AnonymousTemplate du contrôle LoginView, tapez

Vous n'êtes pas connecté. Cliquez sur le lien Connexion pour vous inscrire.

5. Dans le panneau Tâches LoginView, dans la liste Affichages, cliquez sur

LoggedInTemplate. Si vous ne voyez pas le panneau Tâches LoginView, cliquez avec le bouton droit sur le titre du contrôle LoginView et sélectionnez Afficher la balise active. Vous définissez à présent le contenu qui sera affiché aux utilisateurs qui se sont déjà connectés.

6. Cliquez sur la zone d'édition du contrôle LoginView pour activer l'édition, puis tapez

Vous êtes connecté. Bienvenue,

7. À partir du groupe Connexion de la Boîte à outils, faites glisser un contrôle

LoginName sur le modèle après le texte. 19. Création d'utilisateurs

Dans la première partie de la procédure pas à pas, vous avez créé un utilisateur avec l'outil Administration de site Web. Cette stratégie est utile si vous utilisez une petite liste définie d'utilisateurs ; par exemple, si vous créez des utilisateurs pour une petite équipe. Dans de nombreux sites Web, toutefois, les utilisateurs sont autorisés à s'inscrire. ASP.NET inclut le contrôle CreateUserWizard qui exécute la même tâche que vous avez effectuée précédemment à l'aide de l'outil Administration de site Web.

Dans cette partie de la procédure pas à pas, vous ajouterez une fonctionnalité qui permet aux utilisateurs de s'inscrire sur votre site Web. Pour commencer, vous créerez une page d'inscription.

(20)

j) Pour créer une page d'inscription

1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nom de votre site

Web, cliquez sur Ajouter un nouvel élément et ajoutez un nouveau formulaire Web nommé Register.aspx.

Remarque :

Veillez à créer la page à la racine du site Web et non dans le dossier PagesMembres.

2. Dans la page Register.aspx, basculez en mode Design et tapez le texte statique tel que

Inscription dans la page. Dans la barre d'outils Mise en forme, utilisez la liste déroulante Format du bloc pour mettre en forme le texte en Heading 1.

3. À partir du groupe Connexion de la Boîte à outils, faites glisser un contrôle

CreateUserWizard sur la page.

4. Dans la fenêtre Propriétés pour le contrôle CreateUserWizard, affectez

~/Default.aspx à la propriété ContinueDestinationPageUrl.

Cela configure le contrôle afin que lorsque les utilisateurs cliquent sur Continuer après avoir créé un utilisateur, le contrôle retourne à la page d'accueil.

5. À partir du groupe Standard de la Boîte à outils, faites glisser un contrôle HyperLink

sur la page. Dans la fenêtre Propriétés pour le contrôle HyperLink, affectez Accueil à la propriété Text et ~/Default.aspx à la propriété NavigateUrl.

Vous pouvez à présent ajouter un lien vers la page d'accueil qui affiche la page d'inscription. Pour cette procédure pas à pas, supposez que vous souhaitez afficher le lien d'inscription uniquement aux utilisateurs qui ne sont pas connectés.

k) Pour créer un lien d'inscription sur la page d'accueil

1. Basculez vers la page Default.aspx ou ouvrez-la.

2. Cliquez avec le bouton droit sur le contrôle LoginView ajouté précédemment, puis

sélectionnez Afficher la balise active. Dans le panneau Tâches LoginView, sélectionnez AnonymousTemplate dans la zone de liste Affichages pour activer l'édition dans le modèle anonyme.

3. À partir du groupe Standard de la Boîte à outils, faites glisser un contrôle HyperLink

sur le modèle anonyme. Dans la fenêtre Propriétés pour le contrôle HyperLink, affectez Inscription à la propriété Text et Register.aspx à la propriété NavigateUrl. Le lien Inscription sera affiché uniquement aux utilisateurs qui ne sont pas connectés.

20. Modification de mots de passe

Il arrive que les utilisateurs souhaitent modifier leur mot de passe et il est souvent difficile d'effectuer cette tâche manuellement. Vous pouvez donc utiliser un autre contrôle ASP.NET pour permettre aux utilisateurs de modifier leur mot de passe seuls. Pour modifier un mot de passe, les utilisateurs doivent connaître leur mot de passe.

(21)

Dans cette procédure pas à pas, vous ajouterez une page dans laquelle les utilisateurs connectés peuvent modifier leur mot de passe.

l) Pour créer une page de modification de mot de passe

1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le dossier

PagesMembres, cliquez sur Ajouter un nouvel élément et ajoutez un nouveau formulaire Web nommé ChangePassword.aspx.

Remarque :

Veillez à créer la page dans le dossier PagesMembres.

2. Vous mettez la page dans le dossier réservé aux membres parce que seuls les

utilisateurs connectés peuvent modifier leur mot de passe.

3. Dans la page ChangePassword.aspx, basculez en mode Design et tapez du texte

statique tel que Modifier le mot de passe. Dans la barre d'outils Mise en forme, utilisez la liste déroulante Format du bloc pour mettre en forme le texte en Heading 1.

4. À partir du groupe Connexion de la Boîte à outils, faites glisser un contrôle

ChangePassword sur la page.

5. Dans la fenêtre Propriétés pour le contrôle ChangePassword, affectez ~/Default.aspx

à la propriété ContinueDestinationPageUrl.

6. Cela configure le contrôle de sorte que, lorsque les utilisateurs cliquent sur Continuer

après avoir modifié un mot de passe, le contrôle retourne à la page d'accueil.

Vous pouvez à présent ajouter un lien vers la page d'accueil qui affiche la page de modification de mot de passe. Vous rendrez le lien disponible uniquement aux utilisateurs qui sont connectés.

m) Pour créer un lien de modification de mot de passe sur la page d'accueil

1. Basculez vers la page Default.aspx ou ouvrez-la.

2. Cliquez avec le bouton droit sur le contrôle LoginView, puis cliquez sur Afficher la

balise active. Dans le menu Tâches LoginView, dans la liste Affichages, cliquez sur LoggedInTemplate.

Cela bascule le contrôle LoginView en mode édition pour le contenu qui s'affichera aux utilisateurs qui sont connectés.

3. À partir du groupe Standard de la Boîte à outils, faites glisser un contrôle HyperLink

sur la zone d'édition. Dans la fenêtre Propriétés, pour le contrôle HyperLink, affectez Modifier le mot de passe à la propriété Text et ~/PagesMembres/ChangePassword.aspx à la propriété NavigateUrl.

Le lien Modifier le mot de passe sera affiché uniquement aux utilisateurs qui sont connectés, contrairement au lien Inscription que vous avez créé précédemment.

(22)

21. Récupération d'un mot de passe

Il arrive que les utilisateurs oublient leur mot de passe. Vous pouvez ajouter une page de récupération du mot de passe à votre site Web afin qu'ils puissent de nouveau se connecter à votre site. La récupération de mot de passe peut prendre deux formes :

 Vous pouvez envoyer aux utilisateurs le mot de passe qu'ils ont sélectionné (ou que vous avez créé pour eux lorsque vous avez configuré le site). Cette option requiert que le site stocke le mot de passe en utilisant le chiffrement réversible.

 Vous pouvez envoyer aux utilisateurs un nouveau mot de passe qu'ils peuvent modifier à l'aide de la page Modifier le mot de passe que vous avez créée précédemment. Cette option est utile si le site Web stocke des mots de passe à l'aide d'une méthode de chiffrement non réversible telle que le hachage.

Remarque :

Retourner un mot de passe en texte clair par message électronique n'est pas recommandé pour les sites qui requièrent un niveau élevé de sécurité. Pour les sites au niveau de sécurité élevé, il est recommandé de retourner des mots de passe chiffrés, avec SSL (Secure Sockets Layer) par exemple.

Par défaut, le système d'appartenance (membership) d'ASP.NET sécurise des mots de passe par hachage, ce qui signifie que les mots de passe ne peuvent pas être récupérés. Par conséquent, dans cette partie de la procédure pas à pas, votre site Web enverra un nouveau mot de passe aux utilisateurs.

Remarque :

La récupération de mot de passe requiert que votre site Web puisse envoyer des messages électroniques. Si vous n'êtes pas en mesure de configurer votre site Web pour envoyer des messages (comme l'explique « Configuration de l'application pour la messagerie électronique » dans cette procédure pas à pas), vous ne serez pas en mesure d'ajouter la récupération de mot de passe à votre site.

n) Pour ajouter la récupération de mot de passe

1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nom de votre site Web, cliquez sur Ajouter un nouvel élément et ajoutez un nouveau formulaire Web nommé RecoverPassword.aspx.

Remarque :

(23)

2. Dans la page RecoverPassword.aspx, basculez en mode Design et tapez du texte statique tel que Redéfinir la valeur de mon mot de passe. Dans la barre d'outils Mise en forme, utilisez la liste déroulante Format du bloc pour mettre en forme le texte en Heading 1. 3. À partir du groupe Connexion de la Boîte à outils, faites glisser un contrôle

PasswordRecovery sur la page.

4. À partir du groupe Standard de la Boîte à outils, faites glisser un contrôle HyperLink sur la page. Dans la fenêtre Propriétés pour le contrôle HyperLink, affectez Accueil à la propriété Text et ~/Default.aspx à la propriété NavigateUrl.

5. Basculez vers la page Default.aspx.

6. Cliquez avec le bouton droit sur le contrôle LoginView, puis cliquez sur Afficher la balise active. Dans le menu Tâches LoginView, dans la liste Affichages, cliquez sur AnonymousTemplate.

Cela bascule le contrôle LoginView en mode édition pour le contenu qui s'affichera aux utilisateurs qui ne sont pas connectés.

7. À partir du groupe Standard de la Boîte à outils, faites glisser un contrôle HyperLink sur le modèle. Dans la fenêtre Propriétés, pour le contrôle HyperLink, affectez Vous avez oublié votre mot de passe ? à la propriété Text et ~/RecoverPassword.aspx à la propriété NavigateUrl.

IX.

Développer un service Web voir le tp

X.

XML et technologies associés

1 XML

a Généralité

XML (eXtensible Markup Language) est un "langage de balisage extensible", développé par la

W3C ( http://w3.org ). "Langage de balisage Extensible" signifie que le XML n'est pas limité (tout

comme le HTML) à un balisage prédéfini extrêmement figé mais au contraire tout un chacun

pourra définir ses propres balises.

Exemple : <telephone>00.00.00.02.01</telephone>

(24)

o) Concevoir un document XML

Un document XML doit commencer par une déclaration, qui indique l’utilisation du langage XML, la version et le jeu de caractère.

<?xml version="1.0" encoding="utf-8" ?>

La description du contenu se fait grâce à des balises. Une balise est appelé un élément. Les éléments encadrent le contenu de ce que l’on

veut dire. Elles s’écrivent de cette manière : <elemenet1>contenu</

elemenet1> Exemple1 :

Cet exemple contient un seul élément. Il s’agit de l’élément annonce.

<?xml version="1.0" encoding="utf-8" ?> <annonce>Ceci est un fichier XML.</annonce>

Exemple2 :

<?xml version="1.0" encoding="utf-8" ?> <musique>

<titre>Les marionnettes</titre> <titre>Anges et démons</titre> </musique>

Exemple 3 :

<?xml version="1.0" encoding="utf-8" ?> <notes>

<eleve>

<nom>ROBIN</nom> <prenom>Marc</prenom> <moyenne>12,5</moyenne> </eleve>

<eleve>

<nom>GRUNG</nom>

<prenom>Stéphanie</prenom> <moyenne>11,3</moyenne> </eleve>

</notes>

Exemple 4 : ce fichier et erroné. Il faut un élément qui contient l’ensemble de tous les éléments.

(25)

<?xml version="1.0" encoding="utf-8" ?> <notes>

<eleve>

<nom>ROBIN</nom> <prenom>Marc</prenom> <moyenne>12,5</moyenne> </eleve>

</notes> <musique>

<titre>Les marionnettes</titre> <titre>Anges et démons</titre> </musique>

22. XML et C#

Pour utiliser les classes XML il faut importer l’espace de noms System.Xml. a Création d’un XmlDocument

Pour pouvoir travailler sur un document XML ou sur une chaine de caractère XML, il faut créer un objet de type XmlDocument. Il existe deux méthodes du XmlDocument qui nous seront utile pour remplir notre objet XmlDocument : Load et LoadXml.

Load Permet de charger le contenu d’un document ou d’un objet contenant du XML dans le XmlDocument.

Argument :

- Un objet Stream : charge le XmlDocument depuis le flux spécifié

- String : URL vers le fichier contenant le XML - TextReader : charge depuis un TextReader - XmlReader : charge depuis un XmlReader

LoadXml Attend en argument une chaine de caractères contenant du XML.

Voici un exemple d’utilisation de ces deux méthodes :

XmlDocument document = new XmlDocument();

document.Load(@"C:\ Stagiaires.xml");

XmlDocument document = new XmlDocument();

document.LoadXml("<Stagiaire id='1'

(26)

Rappel : En C# l’arobase (@) devant une chaine de caractère permet d’éviter d’avoir à échapper le caractère d’échappement et donc d’avoir \\.

p) Sauvegarder un XmlDocument

Maintenant que nous avons appris à créer un XmlDocument et à le remplir, nous allons voir comment le sauvegarder. Pour ce faire, on utilise la méthode Save du XmlDocument.

document.Save(@"C:\Stagiaires.xml ");

Pour pouvoir sauvegarder le document, il faut que celui-ci soit valide. En particulier qu’il possède un noeud racine. Nous verrons comment créer un noeud racine plus tard. Pour revenir à la méthode Save, si vous ne mettez en String qu’un nom de fichier (Fruit.xml) par exemple, votre fichier se trouvera dans le document bin\Debug de votre projet (par défaut).

q) Déplacement

On entend par déplacement le fait d’accéder à un endroit précis du document XML pour accéder aux données, aux noeuds enfants etc … Pour cela on va donner plusieurs méthodes et propriétés qui permettent ceci et on expliquera un exemple qui les regroupera toutes (comme XmlDocument hérite de XmlNode, on retrouva des méthodes dans les deux).

Toutes les propriétés qui suivent se retrouvent dans XmlDocument et XmlNode sauf une : DocumentElement.

Pour effectuer une modification, un ajout ou tout autre action, il faut se placer dans le

document à un endroit où l’on poura effectuer notre action et donc il faut récupérer un objet que l’on appellera noeud courant. Cette méthode et ces propriétés permettent de récupérer l’objet qui vous interessera. Nous verrons des exemples concret dans les parties suivantes.

r) Lecture d’information / affichage

Il existe différent moyen de lire les données contenu dans le fichier XML. Nous allons commencer par voir les méthodes qui permettent de lire les informations d’un noeud ou groupe de noeud. Il y aura aussi des méthodes qui permettent de récupérer des informations qu’il suffira ensuite d’afficher.

(27)

Exemple d’affichage utilisant le document Xml de fruit vu plus haut :

s) TP 1 : Lire un document XML

Question 1 : Afficher le document XML « Stagiaires.xml »

static void Main(string[] args) {

XmlDocument doc = new XmlDocument();

doc.Load("Stagiaires.xml");

//document.Load(@"C:\Stagiaires.xml");

foreach (XmlNode e in doc.ChildNodes)

{

Console.WriteLine(e.Name);

}

foreach (XmlNode e in doc.DocumentElement.ChildNodes)

{

Console.WriteLine(" " +

e.Name + " id= " +

e.Attributes["id"].Value);

foreach (XmlNode i in e.ChildNodes)

{

Console.WriteLine(" " + i.Name + " Valeur : " + i.InnerText);

} Console.WriteLine("\n\n"); } Console.Read(); }

Question2 : Affichez le document XML « ecole.xml »

(28)

<ecole> <options>

<option nomoption = "Réseau">

<matierespreponderantes>

<matiere1> Réseau </matiere1> <matiere2> Système </matiere2> </matierespreponderantes>

<profPrincipal > Madame Fatima </profPrincipal > </option>

<option nomoption = "Développeur">

<matierespreponderantes>

<matiere1> Algorithmique et développement </matiere1> <matiere2> Base de données </matiere2>

</matierespreponderantes>

<profPrincipal> Monsieur Adil </profPrincipal> </option>

</options>

<etudiant nom = "Madani" prenom = "Ali" nomoption ="Réseau"/>

<etudiant nom = "Madani" prenom = "Moad" nomoption

="Développeur"/> </ecole>

23. XmlReader

Un autre moyen est d’utiliser un objet de type XmlReader. Il correspond à un lecteur qui fournit un accès en lecture seule, qui n’est pas mis en cache et qui ne peut être lut que dans un seul sens : le sens normal de la lecture (du haut du fichier vers le bas).

Exemple

XmlReader reader = XmlReader.Create("Stagiaires.xml");

while (!reader.EOF)

{

reader.Read();

Console.Write(reader.Value);

}

reader.Close(); Console.Read();

On créé un objet reader de type XmlReader sur lequel on utilise la méthode Create du Xmlreader qui permet de créer un flux et qui attend, dans notre exemple, l’URL d’un fichier XML. Notre XmlReader instancié et initialisé nous allons maintenant faire la boucle pour lire les données. La propriété EOF

(29)

retourne un booléen qui détermine si le reader est à la fin de la lecture ou non. La méthode Read du XmlReader permet de lire le noeud suivant (puisque le reader se déplace de noeud en noeud). Après la boucle on ferme le reader avec la méthode Close. Le Console.Read() n’étant là que pour nous permettre de lire ce qui est affiché dans la console.

(30)

Maintenant voici les tableaux qui recensent les méthodes et propriétés utiles du XmlReader :

24. Création / Ajout

Méthodes du XmlDocument

Ce qui suit sont les méthodes du XmlNode qui permettent la création où l’ajout de noeud dans le Xml.

XmlDocument document = new XmlDocument();

//On charge le fichier XML : path correspond à l'url du fichier

document.Load(@"C:/Stagiaires.xml");

// On récupère dans un XmlNode le noeud racine

XmlNode node = document.DocumentElement;

//On créer un attribut avec la méthode CreateAttribute du

XmlDocument

XmlAttribute nodeattr = document.CreateAttribute("test");

//On donne une valeur à l'attribut

nodeattr.Value = "Valeur";

// On ajoute l'attribut au noeud

node.Attributes.Append(nodeattr);

Pour créer un attribut, on instancie un objet XmlAttribute qui va contenir le résultat de la méthode CreateAttribute (qui prend en argument un string qui correspond au nom de l’attribut) du XmlDocument. La Méthode Value du XmlDocument permet d’obtenir ou de définir la valeur de l’attribut. Ensuite on l’ajoute au noeud (dans l’exemple le noeud est le noeud racine).

25. XmlTextWriter

On a vu que XmlReader permet de récupérer un flux en lecture seule. Ici XmlTextWriter va permettre de récupérer un flux dans lequel on peut écrire.

(31)

L’exemple qui va suivre va être la création d’un document Xml en utilisant un objet XmlTextWriter :

t) TP 2 – Ecrire un document XML avec C#

Question 1 : Exécuter le code suivant. Ensuite, afficher le document xml « text.xml »

class Program

{

static void Main(string[] args) {

XmlTextWriter rw = new XmlTextWriter(@"C:\test.xml",

Encoding.UTF8); rw.WriteStartDocument(); rw.WriteStartElement("Root"); rw.WriteStartElement("Noeud"); rw.WriteAttributeString("id", "value"); rw.WriteString("Sa fonctionne"); rw.WriteComment("Commentaire"); rw.WriteEndElement(); rw.WriteEndElement(); rw.WriteEndDocument(); rw.Close(); } }

Question 2 : Créer un document XML avec C# qui enregistre 3 stagiaires avec leur groupe

(32)

26. DTD

Une DTD (Document Type Definition) est un modèle permettant de décrire la

grammaire d’un document XML.

La DTD définira aussi des contraintes portant sur la sémantique, la structure et les valeurs applicables pour un élément du document

27. Pourquoi utiliser une DTD ?

Dans le cadre de l’utilisation de xml pour échanger de l’information.il est absolument nécessaire de s’assurer de la validité du document avant d’effectuer le traitement.

28. Types de DTD

Une DTD peut se présenter sous deux formes : Interne ou Externe u) DTD interne

La DTD est définie dans le document XML

Les éléments placés entre crochets après la zone de déclaration du DOCTYPE constituent la DTD interne

Exemple

<!DOCTYPE biblio[

<!ELEMENT biblio (livre)*>

<!ELEMENT livre (titre, auteur, nb_pages)> <!ELEMENT titre (#PCDATA)>

<!ELEMENT auteur (#PCDATA)> <!ELEMENT nb_pages (#PCDATA)> ]>

v) DTD externe

Les deux types de DTD externes sont les DTD de type public et les DTD de type

system.

Le mot-clef SYSTEM indique que le fichier qui suit se trouve sur l'ordinateur local et qu'il est disponible uniquement à titre privé. Par contre, le mot-clé PUBLIC indique une ressource accessible pour tous sur un serveur web distant via un URI

Exemple de déclaration de DTD externe de type SYSTEM : w)

Document XML

<?xml version="1.0" encoding="utf-8" ?>

<!DOCTYPE biblio SYSTEM "bibliographie.dtd">

Le fichier associé est le suivant :

<?xml version="1.0" encoding="utf-8" ?>

<!ELEMENT biblio (livre)*>

<!ELEMENT livre (titre, auteur, nb_pages)>

<!ATTLIST livre

(33)

lang CDATA "fr" >

<!ELEMENT titre (#PCDATA)>

<!ELEMENT auteur (#PCDATA)>

<!ELEMENT nb_pages (#PCDATA)>

Exemple de déclaration de DTD externe de type PUBLIC :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

29. Déclarations d’éléments

La DTD contient la description des éléments et des attributs qui seront acceptés dans le document XML

Une déclaration d’élément prend la forme :

<!ELEMENT [nom de l’élément]([contenu de l’élément ou type])>

Exemple :

<!ELEMENT personne (nom, email)>

<personne>

<nom> …</nom> <email> …</email> </personne>

Le « Nom » est le nom de l'élément et type_element est le type auquel il est associé. Un élément peut être de type texte, vide (EMPTY ), séquence ou choix d'élément. Dans ces deux derniers cas, on indique la liste des éléments-enfants.

x) Elément texte

Cet élément est le plus répandu, puisque c'est celui qui contient... le texte. Il se déclare ainsi :

<!ELEMENT elt (#PCDATA)> y) Elément vide

Un élément vide est, comme son nom l'indique, un élément qui n'a aucun contenu -que ce soit de type texte, ou bien un autre élément. Le mot-clef utilisé pour la déclaration de ce type d'élément est EMPTY :

<!ELEMENT elt EMPTY>

Exemple d’utilisation:<elt/>

(34)

<img width="100" height="30" src="paysage.jpg" alt="Paysage de neige"/>

30. Indicateurs d'occurrence

Lors de la déclaration de séquence ou de choix d'éléments, à chaque élément enfant peut être attribuée une indication d'occurence (?, + ou *).

Exemples d'indicateur d'occurences :

<!ELEMENT elt0 (elt1, elt2?, elt3+, elt*)>

elt1 ne comprend aucune indication d'occurence. Il doit donc apparaître une seule et

unique fois dans l'élément elt0 ;

elt2 a pour indication d'occurence ?. Cela signifie que l'élément doit apparaître au

maximum une fois (il peut ne pas apparaître du tout) ;

elt3 a pour indication d'occurence +. Cela signifie que l'élément doit apparaître au

moins une fois ;

elt4 a pour indication d'occurence *. Cela signifie que l'élément doit apparaître autant

de fois que l'auteur le désire. Séquence d'éléments

<!ELEMENT elt0 (elt1, elt2, elt3)>

Exemple d'utilisation valide :

<elt0>

<elt1></elt1> <elt2></elt2> <elt3></elt3> </elt0>

Exemples d'utilisations non valides :

<elt0>

<elt1></elt1> <elt3></elt3> </elt0>

... car l'élément elt2 est manquant.

<elt0>

<elt1> </elt1>

<elt3> </elt3>

<elt2> </elt2>

</elt0>

(35)

z) Choix d'éléments

<!ELEMENT elt0 (elt1 | elt2 | elt3)> Exemple d'utilisation valide :

<elt0>

<elt2></elt2> </elt0>

Exemple d'utilisation non valide :

<elt0>

<elt2></elt2> <elt3></elt3> </elt0>

Choix d'éléments(suite)

<!ELEMENT choix.elt0 (elt1* | elt2* | elt3*)>

Exemple d'utilisation valide :

<elt0>

<elt2></elt2> <elt2></elt2> </elt0>

Exemples d'utilisation non valide :

<elt0>

<elt3></elt3> <elt2></elt2> </elt0>

aa) Choix d'éléments(suite)

Exemple d'utilisation d'un choix d'éléments avec indicateur d'occurence global : <!ELEMENT elt0 (elt1 | elt2 | elt3)*>

Exemple d'utilisation valide :

<elt0> <elt2> </elt2> <elt3> </elt3> <elt1> </elt1> </elt0> Elément quelconque

L'élément quelconque peut contenir tout autre élément défini dans la DTD, aussi bien qu'être vide ou contenir du texte. Les éléments-enfants éventuels peuvent apparaître dans n'importe quel ordre, et en quantité non définie. Il est préférable de ne pas utiliser trop souvent ce type de déclaration, car on perd les avantages qu'offre la

(36)

rédaction d'une DTD, de fixer des contraintes précises sur la structure du document XML qui lui est lié. Le mot-clef utilisé pour la déclaration de ce type d'élément est ANY.

<!ELEMENT elt ANY>

ab) Elément à contenu mixte

Un élément à contenu mixte peut contenir aussi bien du texte, que des éléments-enfants. Il se présente comme une liste de choix, avec des indicateurs d'occurence bien choisis. Le texte contenu peut se trouver à n'importe quel endroit dans l'élément. Exemple de déclaration :

<!ELEMENT citation (#PCDATA | auteur+)>

Exemple d'utilisation :

<citation>

Etre ou ne pas être

<auteur>Shakespeare</auteur> </citation>

Exercice

Rédiger un document xml valide à cette DTD ex1.dtd

<?xml version="1.0" encoding="ISO-8859-1"?> <!ELEMENT biblio (livre)*>

<!ELEMENT livre (titre, auteur, nb_pages)>

<!ELEMENT titre (#PCDATA)> <!ELEMENT auteur (#PCDATA)> <!ELEMENT nb_pages (#PCDATA)>

Réponse

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE biblio SYSTEM "ex1.dtd"> <biblio> <livre> <titre>langage xml</titre> <auteur>tdiG3</auteur> <nb_pages>40</nb_pages> </livre> </biblio> 31. Déclarations d'attributs

Comme on peut trouver dans un document XML des éléments possédant des attributs, il est normal que la DTD permette de définir des contraintes sur ces derniers.

(37)

Les attributs d’un élément sont assemblés sous la forme d'une liste. Chaque attribut défini dans la liste possède un nom et un type. On peut lui donner une valeur par défaut, ou bien le spécifier obligatoire. Le mot-clef de la déclaration de cette liste est

ATTLIST.

Exemple:

<!ATTLIST elt attr CDATA>

l’élément « elt » possede un attribut de type text, CDATA permet de définir un bloc de caractères ne devant pas être analysés par le processeur XML.

Chaque attribut peut être requis, optionnel ou fixe et avoir une valeur par défaut. Les exemples suivants montrent la déclaration d'un attribut appelé « attr » attaché à un élément nommé « elt ».

Type chaîne de caractères CDATA

Il s’agit là du type d'attribut le plus courant. Une chaîne de caractères peut être composée de caractères ainsi que d'entités analysables. Le mot-clef utilisé pour la déclaration de chaîne de caractère est CDATA.

Exemple de déclaration de CDATA :

<!ATTLIST elt attr CDATA>

Exemples d'utilisations :

<elt attr="Chaîne de caractères">

ac) Valeurs par défaut

Déclaration d'un attribut avec une valeur par défaut :

<!ATTLIST elt attr CDATA "valeur">

Un tel attribut n'est pas obligatoire. S'il est omis dans le fichier XML lors de l'utilisation de l'élément elt, il est considéré comme valant valeur. Dans cet exemple, si on écrit

<elt>(...)</elt>, cela est équivalent à écrire <elt attr="valeur">(...) < /elt>.

ad) Déclaration d'un attribut requis Déclaration d'un attribut requis :

<!ATTLIST elt attr CDATA #REQUIRED>

Un tel attribut est obligatoire. Son absence déclenche une erreur du vérificateur syntaxique.

ae) Déclaration d'un attribut optionnel :

<!ATTLIST elt attr CDATA #IMPLIED>

Déclaration d'un attribut avec une valeur fixe :

(38)

af)

Type ID

Ce type sert à indiquer que l'attribut en question peut servir d'identifiant dans le fichier XML. Deux éléments ne pourront pas posséder le même atribut possédant la même valeur. On interdit par exemple...

<elt1 attr="machin"/> <elt2 attr="truc"/> <elt1 attr="machin"/> ... ainsi que <elt1 attr="machin"/> <elt2 attr="machin"/> <elt1 attr="truc"/>

Exemple de déclaration de type ID optionnel :

<!ATTLIST elt attr ID #IMPLIED>

NMTOKEN(S)

Un attribut de type CDATA peut contenir n'importe quel caractère, s'il respecte les contraintes de forme. Les attributs de type NMTOKEN ne peuvent contenir que des lettres, des chiffres, un point [ . ] , un tiret [ - ], un trait de soulignement [ _ ] et un deux-points [ : ]. Les attributs de type NMTOKENS peuvent contenir les mêmes caractères que les attributs de type NMTOKEN, plus des espaces blancs. Par espace blanc, on entend un ou plusieurs espaces, retours chariot, sauts de ligne ou

tabulations. Type énuméré

On peut parfois désirer limiter la liste de valeurs possibles pour un attribut. On le définit alors comme étant de type énuméré. Donner une autre valeur dans le fichier XML provoque une erreur.

Exemple de déclaration d'une liste de choix d'attributs :

<!ATTLIST img format (BMP | GIF | JPEG) "JPEG">

JPEG :c’est la valeur par défaut

ag) TP 3 : Exemple Bibliographie DTD Document XML

<?xml version="1.0" encoding="utf-8" ?>

<!DOCTYPE biblio SYSTEM "bibliographie.dtd">

Le fichier associé est le suivant :

<?xml version="1.0" encoding="utf-8" ?>

<!ELEMENT biblio (livre)*>

<!ELEMENT livre (titre, auteur, nb_pages)>

<!ATTLIST livre

(39)

lang CDATA "fr" >

<!ELEMENT titre (#PCDATA)>

<!ELEMENT auteur (#PCDATA)>

<!ELEMENT nb_pages (#PCDATA)>

a Exercice1 DTD

Rédiger une DTD pour une bibliographie. Cette bibliographie :

 contient des livres et des articles ;

 les informations nécessaires pour un livre sont :

o son titre général ; o les noms des auteurs ;

o ses tomes et pour chaque tome, son nombre de pages ;

o des informations générales sur son édition comme par exemple le nom de

l'éditeur, le lieu d'édition, le lieu d'impression, son numéro ISBN ;

 les informations nécessaires pour un article sont :

o son titre ;

o les noms des auteurs ;

o ses références de publication : nom du journal, numéro des pages, année

de publication et numéro du journal

 on réservera aussi un champ optionnel pour un avis personnel. ah) Exercice2 DTD (attributs)

Modifier la DTD précédente...

 ... en ajoutant un attribut optionnel soustitre à l'élément titre ;

 ... en faisant de l'élément tome un élément vide et en lui ajoutant un attribut requis nb_pages et un attribut optionnel soustitre ;

 ... en faisant de l'élément nom_journal un attribut de l'élément journal et en lui donnant comme valeur par défaut Feuille de Chou ;

(40)

 ... en faisant de l'élément annee un attribut de type énuméré, prenant comme valeurs possibles 2000, 2001, 2002, "avant_2000" et "inconnue" et proposant comme valeur par défaut inconnue.

(41)

32. XSD

a Généralité

Les documents XML peuvent être normés grâce à un schéma XSD (XML

Schema Definition). Cela sert à donner des règles de structure pour un document XML. Lorsqu’un document XML est échangé entre deux

partenaires, le fait de joindre un schéma permet à chacun de compléter le document de la même manière et avec la même rigueur. Sans cela

l’échange pourrait être compromis ou n’aurait peut-être pas de sens.  Le schéma permet d’indiquer l’arborescence du document.

 le schéma permet d’indiquer le type des éléments du document.

Il existe de nombreux types décrits sur le site http://www.w3.org/XML/Schema  le schéma permet de préciser le nombre d’occurrences (nombre de fois où sont répétés

les éléments).

ai) Construction d’un schéma

Un schéma XSD doit commencer par une déclaration, qui indique l’utilisation du langage XML (comme les documents XML eux-mêmes), suivis d’une balise comportant l’indication d’un schéma global :

<?xml version="1.0" encoding="utf-8"?>

<xs:schema id="XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">

</xs:schema>

C’est entre les deux balises indiquant l’utilisation d’un schéma que l’on déclare tous les éléments du document XML.

Le schéma est composé de balises, qui débutent toutes par <xsd: et se terminent toutes par </xsd:

aj) Déclaration d’un élément simple

Voici une liste des types simples:

Type Exemple

string Une phrase

byte -1, 126 integer -126789, -1, 0, 1, 126789 positiveInteger 1, 126789 negativeInteger -126789, -1 nonNegativeInte ger 0, 1, 126789

(42)

nonPositiveInteg er -126789, -1, 0 int -1, 126789675 unsignedInt 0, 1267896754 long -1, 12678967543233 short -1, 12678 decimal -1.23, 0, 123.4, 1000.00

float -INF, -1E4, -0, 0, 12.78E-2, 12,

INF, NaN

double -INF, -1E4, -0, 0, 12.78E-2, 12,

INF, NaN

boolean true, false 1, 0

time 13:20:00.000

dateTime 1999-05-31T13:20:00.000-05:00

date 1999-05-31

Un élément simple s’écrit comme suit :

<xs:element name="MonElement" type="xs:Untype"/>

Exemple 1:

<xs:element name="matricule" type="xs:string"/>

 name="matricule" correspond à la déclaration d’un élément nommé matricule, et  type="xs:string" correspond au type de contenu (string) qui sera saisi entre l’élément. Document XML validé :

< matricule> ceci est du texte < /matricule> Document XML non validé :

< matricule>

< matricule> ceci est du texte < /matricule> < /matricule>

Exemple 2:

<?xml version="1.0" ?> <xs:schema …="">

<!-- déclarations de types ici -->

<xs:element name="remarque" type="xs:string"/> <xs:element name="contacts" type="xs:int" /> </xs:schema>

 Ce schéma déclare deux éléments : remarque et contacts.

 A chaque élément est associé un type via l'attribut type.

 remarque de type xs:string ,type simple prédéfini de XML Schema.

 contacts de type xs:int, type simple prédéfini de XML Schema.

Figure

Tableau des méthodes du XmlTextWriter :

Références

Documents relatifs

Là encore, avec cette fois Li Zhi 李贄 (1527-1602) et sa théorie du “cœur d’enfant” (tongxin shuo 童心說), la philosophie venait fonder en raison un phénomène dont

Une distinction importante s’effectue ainsi : la reconstitution architecturale, à laquelle est associée une signification scientifique précise, n’a pas la même

La variation régionale des souches (diversité et fréquence) révélée dans cette étude peut être un indicateur de la variation régionale de la pathogénicité et de

Les féministes intervenant dans les maisons d’hébergement tentent d’offrir des solutions concrètes aux femmes, leur permettant d’éviter les situations dangereuses pour

Il s'agit d'une notion dont on peut dire d'abord qu'elle recouvre un spectre de mesures très larges : la qualification des matières premières qui composent les produits (ainsi,

Os consumidores estão mais conscientes sobre os benefícios de alimentos mais naturais em relação aos processados e ultraprocessados.. Pesquisa recente da Sociedade Brasileira de

Entretanto, orientações de manejo, como uso de sementes sadias; localização adequada dos viveiros; eliminação de cucurbitáceas próximas ao mamoeiro; eliminação de

Reconnaître ce désir, avec ce qu’il a de sombre aussi bien que de généreux, et surtout assumer son statut de trait d’union entre soi et le monde, est peut- être la sincérité