• Aucun résultat trouvé

Réingénierie des applications Web vers les données liées &

Règle 4 : permet de créer des contraintes de cardinalité sur les propriétés d’objet

7.3 Exemple de déroulement

Dans cette section, nous souhaitons illustrer toutes les étapes de l’approche proposée à travers d’un exemple de déroulement.

Listing 7.1 représente un extrait du code source PHP d’une application Web qui offre des annonces de véhicules afin de faciliter la vente.

1 <?php

2 $sql = mysql_query("SELECT * FROM annonce as gr INNER JOIN véhicule as em

3 ON gr.id_ann= em.id_ann WHERE gr.id_ann = ’{$id_ann}’ ");

4 $date = date("F,d Y");

5 $part = $_FILES[’file’][’name’];

6 $sql = mysql_query("INSERT INTO annonce (id, location,

nbr_phone, email, time_limit, prix, photo, date) VALUES ( $id_clt,’{$_POST[’location’]}’,’{$_POST[’nbr_phone’]}’,’{ $_POST[’email’]}’,’{$_POST[’time_limit’]}’,’{$_POST[’prix ’]}’,’$part’,’$date’)"); ?>

7 <td><input class="email" type="text" name="nbr_phone" required=

"" pattern=".{10,}" /></td>

8 <td><select class="form-control" name="location" style="width :150px;">

9 <input class="email" type="text" placeholder="Email" name=" email" required=""

10 pattern="([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?" title="Enter a valid email" /></td>

11 <select class="form-control" name="time_limit" style="width:150 px;">

12 <input class="email" type="text" placeholder="Prix" name="prix"

required="" /> Listing 7.1 – Extrait du code source PHP

Maintenant, nous appliquons les règles de la phase de rétro-ingénierie sur le code PHP présenté ci-dessus. La règle 1 génère le concept "Annonce". En outre, les autres règles sont utilisées, que ce soit pour générer d’autres concepts ou pour affiner les concepts existants. Par exemple, la règle 5 génère le concept "Véhicule" et la règle 6 détermine la cardinalité. La Figure 7.4 représente le résultat de ce processus en tant que diagramme de classes. La sérialisation de diagramme de classes obtenu est donné dans le Listing 7.2.

Chapitre 7. Approche II

Figure 7.4 – Diagramme de classes généré par le processus de retro-ingénierie

1 <CD dcname="notice" mincard=0 maxcard=1>

2 <class name="annonce" mincard="1" maxcard="n">

3 <Attribute name="id_ann" type="int"/>

4 <Attribute name="id" type="int"/>

5 <Attribute name="location" type="string"/>

6 <Attribute name="nbr_phone" type="string"/>

7 <Attribute name="email" type="string"/>

8 <Attribute name="time limit" type="string"/>

9 <Attribute name="prix" type="string"/>

10 <Attribute name="photo" type="File"/>

11 <Attribute name="date" type="Date"/>

12 </class>

13 <class name="véhicule" mincard=0 maxcard=-1>

14 <Attribut name="id_ann" type="int"/>

15 </class>

16 <Association AssName="annonce_véhicule"

17 domain="annonce" range="Vehicule" />

18 </CD>

Listing 7.2 – Diagramme de classes sérialisé en XML

De la même manière, nous appliquons les règles définies dans la phase d’in-génierie directe sur le modèle obtenu du processus précédent (diagramme de classes). En effet, les classes "owl :annonce" et "owl :vehicule" et leurs attributs sont créés selon les règles 1 et 2. Le "owl :ObjectProperty" est construit en appli-quant la règle 3. Le résultat de cette étape est illustré dans Listing 7.3. Cet extrait représente une ontologie qui correspond au diagramme de classes de la Figure 7.4. 1 <rdf:RDF 2 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 3 xmlns:owl="http://www.w3.org/2002/07/owl#" 4 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 5 xmlns:xsd="http://www.w3.org/2001/XMLSchema#">

6 <owl:Ontology rdf:about="http://www.cunivnaama.dz/Onto_annonce# "/>

7 <owl:Class rdf:about="http://www.cunivnaama.dz/Onto_annonce# véhicule"/>

8 <owl:Class rdf:about="http://www.cunivnaama.dz/Onto_annonce# annonce"/>

9 <owl:ObjectProperty rdf:about="http://www.cunivnaama.dz/ Onto_annonce#annonce_véhicule">

10 <rdfs:range rdf:resource="http://www.cunivnaama.dz/ Onto_annonce#véhicule"/>

11 <rdfs:domain rdf:resource="http://www.cunivnaama.dz/ Onto_annonce#annonce"/>

12 <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/ >

13 </owl:ObjectProperty>

14 <owl:DatatypeProperty rdf:about="http://www.cunivnaama.dz/ Onto_annonce#email">

15 <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema# string"/>

16 <rdfs:domain rdf:resource="http://www.cunivnaama.dz/ Onto_annonce#annonce"/>

17 </owl:DatatypeProperty> Listing 7.3 – Extrait de l’ontologie générée

Après avoir enrichi l’ontologie en ajoutant des relations entre les concepts, bien sûr, s’ils existent dans l’ontologie du domaine, nous créons des instances à partir des éléments HTML de l’application Web correspondante. Cela se fait selon le travail présenté dans [Bouougada et al. 2015,Bouougada et al. 2018], qui permet de transformer des éléments HTML tels que les listes et les tableaux en données liées RDF. Listing 7.4 donne quelques instances d’une "Annonce" en format RDF.

1 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

2 xmlns:j.0="http://www.WEBApp.dz/"

3 xmlns:j.1="http://www.WEBApp.dz/ad_on_1/">

4 <rdf:Description rdf:about="http://www.WEBApp.dz">

5 <j.0:ad_on_2 rdf:parseType="Resource">

6 <j.1:date>06/03/2017</j.1:date> 7 <j.1:photo>www.WEBApp.dz/img/im5.jpg</j.1:photo> 8 <j.1:price>25 000</j.1:prix> 9 <j.1:time_limit>2 month</j.1:time_limit> 10 <j.1:email>ab5@webapp.dz</j.1:email> 11 <j.1:nbr_phone>213611141600</j.1:nbr_phone> 12 <j.1:location>mascara</j.1:location> 13 <j.1:id>5</j.1:id> 14 <j.1:id_ann>2</j.1:id_ann> 15 </j.0:ad_on_2> 16 </rdf:Description>

17 <j.0:ad_on_1 rdf:parseType="Resource">

18 <j.1:date>12/12/2017</j.1:date> 19 <j.1:photo>www.WEBApp.dz/img/im12.jpg</j.1:photo> 20 <j.1:price>12 000</j.1:prix> 21 <j.1:time_limit>2 weeks</j.1:time_limit> 22 <j.1:email>AB12@webapp.dz</j.1:email> 23 <j.1:nbr_phone>213611111100</j.1:nbr_phone> 24 <j.1:location>NAAMA</j.1:location> 25 <j.1:id>12</j.1:id> 26 <j.1:id_ann>1</j.1:id_ann> 27 </j.0:ad_on_1> 28 </rdf:Description> 29 </rdf:RDF>

Chapitre 7. Approche II