Listing du fichier m1xml_6_tp2.php
00001 <?php
00002 # # (gH) -_- m1xml_6_tp2.php ; TimeStamp (unix) : 18 Octobre 2017 vers 13:10
00003 include("std.php") ;
00004 include("m1xml_6_inc.php") ;
00005
00006 $HTML = s_span("HTML" ,"grouge") ;
00007 $XHTML = s_span("XHTML","grouge") ;
00008 $XML = s_span("XML" ,"grouge") ;
00009 $XSL = s_span("XSL" ,"grouge") ;
00010 $XPATH = s_span("XPATH","grouge") ;
00011 $DTD = s_span("DTD" ,"grouge") ;
00012 $XSD = s_span("XSD" ,"grouge") ;
00013 $CSS = s_span("CSS" ,"grouge") ;
00014 $CSV = s_span("CSV" ,"grouge") ;
00015 $Excel = s_span("Excel" ,"grouge") ;
00016 $JavaScript = s_span("JavaScript" ,"grouge") ;
00017 $R = s_span("R" ,"grouge") ;
00018 $PHP = s_span("PHP" ,"grouge") ;
00019
00020 $numSerie = 2 ;
00021
00022 if (!isset($_GET["standalone"])) { debutPage("XML en M1 (2018), TP $numSerie","strict","","m1xml.js") ; } ;
00023
00024 debutSection() ;
00025 h1("$XML en M1 (2018), université d'Angers ") ;
00026 h2(s_nbsp(4).href("../../","gilles.hunault@univ-angers.fr","gvert nou")) ;
00027 pvide() ;
00028 h2("T.P. numéro $numSerie","gbleu") ;
00029 pvide() ;
00030
00031 ###########################################################################################
00032
00033 $tableauDesRubriques = array() ;
00034 $idr = 0 ;
00035 $idr++; $tableauDesRubriques[$idr] = "Compter des éléments ou des attributs dans un document $XML" ;
00036 $idr++; $tableauDesRubriques[$idr] = "Expressions $XPATH " ;
00037 $idr++; $tableauDesRubriques[$idr] = "Comprendre la transformation vide" ;
00038 $idr++; $tableauDesRubriques[$idr] = "Réaliser une transformation minimale avec $XSL" ;
00039 $idr++; $tableauDesRubriques[$idr] = "Une transformation $XSL élémentaire" ;
00040 $idr++; $tableauDesRubriques[$idr] = "Une deuxième transformation $XSL" ;
00041 $idr++; $tableauDesRubriques[$idr] = "Transformations $XSL avancées et statistiques" ;
00042 $tdmCRLM = new tdm($tableauDesRubriques) ;
00043 $tdmCRLM->titre() ;
00044 $tdmCRLM->menu("oui","oui","nou") ;
00045
00046 pvide() ;
00047
00048 $numExo = 0 ;
00049 $numSerie = 2 ;
00050 direAfficherSolutions($numSerie) ;
00051
00052 ## -------------------------------------------------------------------------------------------
00053
00054 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # "Compter des éléments ou des attributs dans un document XML
00055
00056 ## -------------------------------------------------------------------------------------------
00057
00058 blockquote() ;
00059
00060 p("texte") ;
00061 echo " On s'intéresse au fichier ".href("leadb880.xml")." suivant qui contient des données pour des protéines " ;
00062 echo href("../../Leadb","LEA","grouge")." :" ;
00063 finp() ;
00064
00065 p() ;
00066 textarea_fichier("leadb880","tajaunec",25,80,"leadb","leadb880.xml","") ;
00067 finp() ;
00068
00069 p("texte") ;
00070 echo "Après avoir décrit la structure du fichier, " ;
00071 echo " donner une grammaire $DTD ".em("minimale et raisonnable")." pour modéliser le contenu du fichier, " ;
00072 echo " puis compter le nombre de lignes, le nombre de lignes vides, d'élements et d'attributs. " ;
00073 echo " Vous pouvez utiliser tout outil logiciel qui vous parait adapté. Comment trouver le nombre d'éléments distincts ?" ;
00074 finp() ;
00075
00076 solution($numExo,$numSerie) ;
00077
00078 p("texte") ;
00079 echo "Visiblement l'élément racine du fichier se nomme ".b("proteins")." et il ne contient que " ;
00080 echo " des éléments nommés ".b("protein").". Chaque élément ".b("protein")." contient trois éléments, à savoir " ;
00081 echo b("accession").", ".b("class")." et ".b("fasta").". De plus seul cet élément ".b("fasta")." possède un attribut nommé ".b("length").". " ;
00082 finp();
00083
00084 p("texte") ;
00085 echo " Une grammaire ".em("raisonnable")." pour ces données est fournie par le fichier suivant nommé ".href("leadb_dtd.txt","leadb.dtd")."." ;
00086 finp();
00087
00088 p() ;
00089 echo b("Grammaire leadb.dtd :") ;
00090 finp() ;
00091
00092 pre_fichier("leadb_dtd.txt","cadrebleu") ;
00093
00094 p("texte") ;
00095 echo " Avec la commande ".b("xmlstarlet el -u")." on dispose de la structure des données en termes d'éléments :" ;
00096 finp();
00097
00098 pre_fichier("leadb_stru.txt","cadrebleu") ;
00099
00100 p("texte") ;
00101 echo "Il ne manque donc que la ligne ".ghBleu("proteins/protein/fasta/@length")." pour compléter cette description des éléments et attributs." ;
00102 finp();
00103
00104 p("texte") ;
00105 echo "On peut facilement obtenir le nombre de lignes avec la commande système nommée ".b("wc").". " ;
00106 echo " Pour le nombre de lignes vides, chainer ".b("grep")." et ".b("wc")." est sans doute un bon choix. " ;
00107 echo " Pour le nombre d'élements distincts et la structure, ".b("xmlstarlet")." et ".b("trang")." sont des outils biens adaptés. " ;
00108 echo " Enfin, pour le nombre d'éléments en tout, on peut chainer ".b("xmlstarlet")." et ".b("wc")." alors que " ;
00109 echo " pour le nombre d'attributs en tout, il faut chainer ".b("xmlstarlet").", ".b("grep")." et ".b("wc").". " ;
00110 echo " Voici le détail des commandes associées :" ;
00111 finp() ;
00112
00113 pre_fichier("leadb880_sh.txt","cadrejaune") ;
00114
00115 finsolution() ;
00116
00117 finblockquote() ;
00118
00119 ## -------------------------------------------------------------------------------------------
00120
00121 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Expressions XPATH
00122
00123 ## -------------------------------------------------------------------------------------------
00124
00125 blockquote() ;
00126
00127 p("texte") ;
00128 echo " On s'intéresse ici au document ".href("films2.xml")." qui contient des films et des artistes. " ;
00129 finp() ;
00130
00131 blockquote() ;
00132 p() ;
00133 textarea_fichier("films2","tajaunec",25,80,"films","films2.xml","") ;
00134 finp() ;
00135 finblockquote() ;
00136
00137 p("texte") ;
00138 echo "En voici la grammaire $DTD :" ;
00139 finp() ;
00140
00141 pre_fichier("films2.dtd","cadrebleu") ;
00142
00143 p("texte") ;
00144 echo "On fournit aussi la structure explicite du fichier (éléments seulement) obtenue à l'aide de la commande ".b("xmlstarlet el -u films2.xml")." :" ;
00145 finp() ;
00146
00147 pre_fichier("films2_stru.txt","cadrejaune") ;
00148
00149 p("texte") ;
00150 echo " Trouver comment on peut produire la liste des attributs uniques du fichier, ce que ne sait pas faire ".b("xmlstarlet").". " ;
00151 echo " Voici ce qu'on s'attend à voir :" ;
00152 finp() ;
00153
00154 pre_fichier("films2_att.txt","cadrejaune") ;
00155
00156 p("texte") ;
00157 echo "A l'aide de ".b("xmllint")." en mode ".em("«shell»").", essayer ensuite de répondre aux questions suivantes :" ;
00158 finp() ;
00159
00160 ul() ;
00161
00162 # grep TITRE films2.xml | head -n 9 | tail -n 1 ; 95:<TITRE>Gladiator</TITRE>
00163
00164 debutli() ; p("texte") ;
00165 echo "Quels sont tous les titres de films ?" ;
00166 finp() ; finli() ;
00167
00168 debutli() ; p("texte") ;
00169 echo "Quel est le titre du neuvième film ?" ;
00170 finp() ; finli() ;
00171
00172 debutli() ; p("texte") ;
00173 echo "En quelle année est sorti le film ".em("Blade Runner")." ?" ;
00174 finp() ; finli() ;
00175
00176 debutli() ; p("texte") ;
00177 echo "Quel en est le metteur en scène ?" ;
00178 finp() ; finli() ;
00179
00180 debutli() ; p("texte") ;
00181 echo "Combien y a-t-il de films ?" ;
00182 finp() ; finli() ;
00183
00184 debutli() ; p("texte") ;
00185 echo "Quels éléments contiennent le texte \"Bruce\" ?" ;
00186 finp() ; finli() ;
00187
00188 finul() ;
00189
00190 p("texte") ;
00191 echo "Essayer enfin à l'aide de ".b("$PHP")." via le module ".em("SimpleXML")." d'afficher tous les numéros de films avec leur numéro, comme ci-dessous :" ;
00192 finp() ;
00193
00194 pre_fichier("titresEnPhp.txt","cadrejaune") ;
00195
00196 solution($numExo,$numSerie) ;
00197
00198 p("texte") ;
00199 echo "Les lignes suivantes complétent la description des éléments uniques " ;
00200 echo " en chainant ".b("xmlstarlet").", ".b("grep")." et ".b("sort")." :" ;
00201 finp();
00202
00203 p("texte") ;
00204 nbsp(5) ;
00205 echo ghRouge(' xmlstarlet el -a films2.xml | grep "/@" | sort -u ')."." ;
00206 finp();
00207
00208 p("texte") ;
00209 echo " Voici les instructions à exécuter dans le shell de ".b("XMLLINT")." pour répondre aux questions posées :" ;
00210 finp() ;
00211
00212 pre_fichier("films2_sh.txt","cadrebleu") ;
00213
00214 p("texte") ;
00215 echo " Pour les titres de films en $PHP, une fois la documentation de ".href("http://php.net/manual/fr/book.simplexml.php","SimpleXML")." parcourue, " ;
00216 echo " les ".href("http://php.net/manual/fr/simplexml.examples-basic.php","exemples standards")." suffisent largement pour écrire le code suivant " ;
00217 echo " qui fournit l'affichage demandé :" ;
00218
00219 finp() ;
00220
00221 pre_fichier("titres.php","cadrebleu") ;
00222
00223 finsolution() ;
00224
00225 finblockquote() ;
00226
00227 ## -------------------------------------------------------------------------------------------
00228
00229 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Comprende la transformation vide
00230
00231 ## -------------------------------------------------------------------------------------------
00232
00233 blockquote() ;
00234
00235 p("texte") ;
00236 echo " Que produit la ".b("transformation vide")." définie dans le fichier ".href("vide.xsl") ;
00237 echo " si on l'applique aux fichiers " ;
00238 echo href("eau.xml").", " ;
00239 echo href("eau2.xml").", " ;
00240 echo href("trajets.xml")." et " ;
00241 echo href("firefox.svg") ;
00242 echo " du T.P. 1 ?" ;
00243 finp() ;
00244
00245 pre_fichier("vide.xsl","cadrebleu") ;
00246
00247 p("texte") ;
00248 echo "Quelle est, pour ces fichiers, la différence avec la transformation minimaliste nommée ".href("minimaliste.xsl")." ?" ;
00249 finp() ;
00250
00251 pre_fichier("minimaliste.xsl","cadrebleu") ;
00252
00253 solution($numExo,$numSerie) ;
00254
00255 p("texte") ;
00256 echo " La transformation vide affiche les contenus textuels des éléments et ignore les attributs. " ;
00257 echo " Pour le fichier ".href("eau.xml")." on récupère donc trois lignes pratiquement vides (en fait on récupère les espaces d'indentation et les sauts de ligne, ";
00258 echo " ce qui fait qu'à l'écran on ne voit rien. " ;
00259 echo " Pour le fichier ".href("eau2.xml")." on récupère les noms et les nombres d'atomes. " ;
00260 echo " Au niveau de ".href("trajets.xml").", le type de train, le nom des gares de départ et d'arrivée sont affichés." ;
00261 finp() ;
00262
00263 p("texte") ;
00264 echo "Pour la dessin du renard, il y a beaucoup de lignes vides affichées, ce qui fait qu'on risque de manquer le début de " ;
00265 echo " l'affichage. Heureusement, ".b("grep")." est notre ami ! " ;
00266 echo " On récupère donc comme seules lignes de texte le contenu des éléments ".b("title")." et ".b("desc").". " ;
00267 finp() ;
00268
00269 pre_fichier("tf_vides.txt","cadre") ;
00270
00271
00272 p("texte") ;
00273 echo "Il n'y a en principe aucune différence entre les transformations " ;
00274 echo href("vide.xsl") ;
00275 echo " et " ;
00276 echo href("minimaliste.xsl") ;
00277 echo " parce que la transformation vide applique toutes les règles par défaut à partir de la racine." ;
00278 finp() ;
00279
00280 finsolution() ;
00281
00282 finblockquote() ;
00283
00284 ## -------------------------------------------------------------------------------------------
00285
00286 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Réaliser une transformation minimale avec XSL
00287
00288 ## -------------------------------------------------------------------------------------------
00289
00290 blockquote() ;
00291
00292 p("texte") ;
00293 echo " Que faut-il ajouter à la ".b("transformation minimaliste")." définie dans le fichier ".href("minimaliste.xsl") ;
00294 echo " pour qu'elle n'affiche que les noms d'atome si on l'applique au fichier " ;
00295 echo href("eau2.xml") ;
00296 echo " ?" ;
00297 finp() ;
00298
00299 solution($numExo,$numSerie) ;
00300
00301 p("texte") ;
00302 echo " Une première solution consiste à définir deux règles, l'une pour l'élément ".b("nom")." et l'autre pour l'élément ".b("nombre").". " ;
00303 echo " Pour ".b("nom")." on veut afficher le contenu alors que pour ".b("nombre")." on ne veut rien faire (puisqu'on ne veut pas afficher)".". " ;
00304 echo " Voici donc la solution dans ".href("mineau2.xsl")." :" ;
00305 finp() ;
00306
00307 pre_fichier("mineau2.xsl","cadrejaune") ;
00308
00309 p("texte") ;
00310 echo "Une meilleure solution est sans doute de ne demander que de déclencher les règles pour les éléments ".b("noms").", " ;
00311 echo " soit le code du fichier ".href("mineau3.xsl")." :" ;
00312 finp() ;
00313
00314 pre_fichier("mineau3.xsl","cadrejaune") ;
00315
00316 finsolution() ;
00317
00318 finblockquote() ;
00319
00320 ## -------------------------------------------------------------------------------------------
00321
00322 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Une transformation XSL élémentaire
00323
00324 ## -------------------------------------------------------------------------------------------
00325
00326 blockquote() ;
00327
00328 p("texte") ;
00329 echo " On voudrait compter le nombre de protéines du fichier ".href("leadb880.xml")." et vérifier que chaque protéine a bien un attribut ".b("length").". " ;
00330 echo " Trouver une solution en ligne de commandes puis à l'aide d'une transformation $XSL." ;
00331 echo " Comment peut-on trouver la plus petite longueur de protéine et la plus grande via $XSL ?" ;
00332 finp() ;
00333
00334 p("texte") ;
00335 echo " Ecrire ensuite un script $PHP qui trouve la plus petite longueur de protéine et la plus grande." ;
00336 finp() ;
00337
00338 solution($numExo,$numSerie) ;
00339
00340 p("texte") ;
00341 echo " Une protéine correspond à un élément ".b("protein")." donc il suffit de compter les chaines ".b("<protein>")." pour les dénombrer. " ;
00342 echo " L'attribut ".b("length").", lui, peut se repérer grâce à l'expression ".b("<fasta length=").". " ;
00343 echo " Dans les deux cas, on trouve 880 lignes correspondantes, mais cela ne prouve sans doute pas que chaque protéine a bien un attribut ".b("length") ;
00344 echo " dans un sous-élément ".b("fasta")." sauf à valider le fichier pour la grammaire " ;
00345 echo href("leadb_dtd.txt","leadb.dtd")." de la question 1 " ;
00346 echo " (ou à savoir bien compter, car 3521 = 1 + 4x880). " ;
00347 echo " Par contre rechercher toutes les expressions ".b("proteins/protein/fasta/@length")." dans la sortie de ".b("xmlstarlet el -a")." peut le prouver. ";
00348 echo " Voici les commandes à utiliser :" ;
00349 finp() ;
00350
00351 pre_fichier("leadb_prot.txt","cadrebleu") ;
00352
00353
00354 p("texte") ;
00355 echo "Pour effectuer une transformation $XSL qui réalise les mêmes comptages, il suffit de mettre une seule règle sur " ;
00356 echo " la racine du document et d'utiliser la fonction $XPATH nommée " ;
00357 echo href("http://forge.info.univ-angers.fr/~gh/selfhtml_fr/xml/representation/fonctionsxpath.htm#count","count()").". " ;
00358 finp() ;
00359
00360 p() ;
00361 echo b("Transformation ".href("proteines.xsl")." :") ;
00362 finp() ;
00363
00364 pre_fichier("proteines.xsl","cadrebleu") ;
00365
00366 p("texte") ;
00367 echo "Pour exécuter cette transformation, on peut utiliser ".b("xsltproc")." :" ;
00368 finp() ;
00369
00370 pre_fichier("proteines_sh1.txt","cadrebleu") ;
00371
00372 p("texte") ;
00373 echo "mais ce n'est pas le seul choix possible. Par exemple on peut utiliser ".b("xmlstarlet")." :" ;
00374 finp() ;
00375
00376 pre_fichier("proteines_sh2.txt","cadrebleu") ;
00377
00378
00379 p("texte") ;
00380 echo " On peut aussi mettre l'appel du fichier $XSL dans l'en-tête du fichier $XML et faire exécuter la transformation " ;
00381 echo " par le navigateur, comme ".href("leadb880tr.xml","ici").". " ;
00382 finp() ;
00383
00384 p("texte") ;
00385 echo "Pour trouver la longueur minimale et la longueur maximale, on peut se contenter de trier par ordre croissant ou décroissant et de garder la première valeur, soit " ;
00386 echo " le code $XSL suivant :" ;
00387 finp() ;
00388
00389 pre_fichier("prot_max1.xsl","cadrebleu") ;
00390
00391 p("texte") ;
00392 echo " dont le rendu est " ;
00393 finp() ;
00394
00395 pre_fichier("prot_max1.sor","cadrejaune") ;
00396
00397 p("texte") ;
00398 echo " Il n'y a aucune difficulté à utiliser de nouveau ".b("SimpleXML")." pour trouver en $PHP la plus petite longueur et la plus grande longueur de protéine et la plus grande. " ;
00399 echo " Il faut juste ne pas oublier de convertir le texte issu de $XPATH via la fonction ".href("http://php.net/manual/fr/function.intval.php","intval()")." sous peine de trouver " ;
00400 echo " 110 aa à la fois comme plus petite valeur et plus grande valeur." ;
00401 finp() ;
00402
00403 pre_fichier("protminmax.php","cadrebleu") ;
00404
00405 finsolution() ;
00406
00407 finblockquote() ;
00408
00409 ## -------------------------------------------------------------------------------------------
00410
00411 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Une deuxième transformation XSL
00412
00413 ## -------------------------------------------------------------------------------------------
00414
00415 blockquote() ;
00416
00417 p("texte") ;
00418 echo " Dans le document ".href("films2.xml").", combien y a-t-il de films ? Et d'artistes ? Combien de références pour combien de metteurs en scène ? " ;
00419 echo " On écrira une transformation $XSL qui affichera ces résultats en mode texte qu'on exécutera avec ".b("xmlstarlet")." avant " ;
00420 echo " de modifier le document pour avoir un rendu dans une ".b("page Web")." valide pour la grammaire ".b("XHTML Strict")."." ;
00421 finp() ;
00422
00423 p("texte") ;
00424 echo ghRouge("Remarque :") ;
00425 echo " on pourra utiliser le fichier ".href("stdWeb2.xsl")." qui contient des sous-programmes $XSL adaptés à la production de pages ".b("Web").". " ;
00426 finp() ;
00427
00428 blockquote() ;
00429
00430 p() ;
00431 echo b("Fichier stdWeb2.xsl") ;
00432 finp() ;
00433
00434 p() ;
00435 textarea_fichier("stdweb2","tajaunec",25,80,"stdweb","stdWeb2.xsl","") ;
00436 finp() ;
00437
00438 finblockquote() ;
00439
00440 solution($numExo,$numSerie) ;
00441
00442 p("texte") ;
00443 echo "Compter avec $XSL se fait à l'aide de la fonction ".b("count()")." dans un attribut ".b("select")." d'un élément ".b("xsl:value-of").". " ;
00444 echo " Encore faut-il trouver les noeuds correspondants. Pour les films et les artistes, c'est assez simple car les éléments ".ghBleu("FILM")." et " ;
00445 echo " ".ghBleu("ARTISTE")." identifient de façon unique ce qu'on cherche donc il suffit de compter ".ghBleu("//FILM")." et ".ghBleu("//ARTISTE").". " ;
00446 finp() ;
00447
00448 p("texte") ;
00449 echo "Pour trouver les metteurs en scène, il faut retenir les attributs ".b("id")." de ".ghBleu("ARTISTE") ;
00450 echo " qui correspondent à un attribut ".b("idref")." de ".ghBleu("MES").", " ;
00451 echo " soit le filtre ".ghBleu("ARTISTE[@id=//MES/@idref]")." -- bien noter le double slash devant ".b("MES").". " ;
00452 echo " Nous avons rajouté dans la solution des ".b("xsl:text")." pour rendre les " ;
00453 echo " affichages plus lisibles et nous avons mis le nom des metteurs en majuscules (avec des indications de solution ".ghRouge("XSL 2").") :" ;
00454 finp() ;
00455
00456 pre_fichier("nbfa1.xsl","cadrebleu") ;
00457 pre_fichier("nbfa1_sor.txt","cadrejaune") ;
00458
00459
00460 p("texte") ;
00461 echo "Produire une page Web résultat est un peu plus compliqué car il faut aussi produire du code $HTML " ;
00462 echo " ce qui signifie qu'il faut sans doute utiliser deux espaces de noms distincts. " ;
00463 finp() ;
00464
00465 p("texte") ;
00466 echo " Voici la solution :" ;
00467 finp() ;
00468
00469 pre_fichier("films2.xsl","cadrebleu") ;
00470
00471 p("texte") ;
00472 echo "Le rendu correspondant est ".href("films2_xsl.html","ici").". " ;
00473 finp() ;
00474
00475 finsolution() ;
00476
00477 finblockquote() ;
00478
00479 ## -------------------------------------------------------------------------------------------
00480
00481 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Transformations XSL avancées
00482
00483 ## -------------------------------------------------------------------------------------------
00484
00485 blockquote() ;
00486
00487 p("texte") ;
00488 echo " On voudrait effectuer des calculs statistiques et tracer des graphiques pour étudier statistiquement la longueur des protéines " ;
00489 echo " du fichier ".href("leadb880.xml").". Que peut-on calculer et tracer via $XSL ?" ;
00490 finp() ;
00491
00492 p("texte") ;
00493 echo " Est-ce qu'écrire un script $PHP est ici adapté ?" ;
00494 finp() ;
00495
00496 solution($numExo,$numSerie) ;
00497
00498 p("texte") ;
00499 echo " $XSL ne peut pas grand chose pour nous ici car $XSL est conçu pour transformer du texte, pas pour calculer. " ;
00500 echo " $PHP n'est pas vraiment non plus prévu pour réaliser des traitements statistiques. " ;
00501 echo " Par contre $XSL peut nous aider à produire un fichier $CSV utilisable par $Excel, le logiciel $R ou tout autre logiciel statistique. " ;
00502 echo " Pour cela, il suffit d'exporter le nom de chaque protéine, sa classe et sa longueur. C'est ce que fait la transformation suivante :" ;
00503 finp() ;
00504
00505 pre_fichier("prot_export.xsl","cadrebleu") ;
00506
00507 # xsltproc prot_export.xsl leadb880.xml | grep -v "^$" | head
00508
00509 p("texte") ;
00510 echo "On pourra vérifier que les données obtenues par la commande " ;
00511 echo b("xsltproc prot_export.xsl leadb880.xml | grep -v \"^$\" | head") ;
00512 echo " soit le fichier ".href("prot_export.csv")." est utilisable par ".b("Microsoft Office Excel")." ou par ".b("Libre Office Calc")." :" ;
00513 finp() ;
00514
00515 blockquote() ;
00516 p() ;
00517 textarea_fichier("leadb880exp","tajaunec",25,80,"leadbExp","prot_export.csv","") ;
00518 finp() ;
00519 finblockquote() ;
00520
00521 p("texte") ;
00522 echo "On peut alors analyser ces données via le script $R suivant" ;
00523 finp() ;
00524
00525 pre_fichier("prot_export.r","cadre") ;
00526
00527 p("texte") ;
00528 echo "qui produit les résultats ci-dessous" ;
00529 finp() ;
00530
00531 pre_fichier("prot_export.sor","cadrebleu") ;
00532
00533 p("texte") ;
00534 echo "ainsi que le graphique suivant :" ;
00535 finp() ;
00536
00537 p() ;
00538 $img = "protLng.png" ;
00539 echo href($img,img($img,"",400)) ;
00540 finp() ;
00541
00542 p("texte") ;
00543 echo "Nous laissons le soin au lecteur de rédiger le commentaire statistique associé." ;
00544 echo " Le script $R utilise notre fonction ".b("decritQT()")." décrite " ;
00545 echo href("http://forge.info.univ-angers.fr/~gh/wstat/statghfns.php?lafns=decritQT&montrer=montrer","ici").". " ;
00546 finp() ;
00547
00548 finsolution() ;
00549
00550 finblockquote() ;
00551
00552 ## -------------------------------------------------------------------------------------------
00553
00554 h2("Questions sans réponse affichée dans le navigateur (donc venez en TP !)") ;
00555
00556 blockquote() ;
00557 ul() ;
00558 debutli() ; p("texte") ;
00559 echo "Pourquoi est-ce difficile de construire une grammaire $XSD fine et précise pour les protéines LEA si on n'est pas biologiste ?" ;
00560 finp() ; finli() ;
00561
00562 # il est difficile de définir une longueur minimale (et sans doute maximale) de protéine, de savoir à quoi correspond une classe,
00563 # savoir quelle expression régulière correspond aux numéros d'accession est un vrai casse-tete
00564
00565 debutli() ; p("texte") ;
00566 echo "Comment faire pour trouver les attributs uniques si on ne connait pas l'option ".b("-u")." de la commande ".b("sort")." ?" ;
00567 finp() ; finli() ;
00568
00569 # on peut utiliser la commande unique d'Unix ; exemple :
00570 # (rm -f films_att.txt ; xmlstarlet el -a films2.xml | grep "@" | sort > films.att ; unique films_att.txt < films.att).
00571
00572 debutli() ; p("texte") ;
00573 echo "Peut-on compter des \"non-éléments\" ou des éléments sans attributs ?" ;
00574 echo " Par exemple, pour ".href("films2.xml")." combien manque-t-il de résumés ? et de dates de naissance ?" ;
00575 finp() ; finli() ;
00576
00577 # xpath count(//FILM//RESUME) soit 41 films sur 48 n'est sans doute pas suffisant
00578 # xpath count(//ARTISTE[./ANNEENAISS=""]) # 40 éléments
00579 # xpath count(//ARTISTE[./ANNEENAISS!=""]) # 77 éléments
00580
00581 debutli() ; p("texte") ;
00582 echo "Pourquoi faut-il compter les attributs avec ".b("/@")." plutôt qu'avec seulement ".b("@")." ?" ;
00583 finp() ; finli() ;
00584
00585 # il pourrait y avoir des adresses emails avec le symbole @
00586
00587 finul() ;
00588 finblockquote() ;
00589
00590 ## -------------------------------------------------------------------------------------------
00591
00592 pvide() ;
00593
00594 ###########################################################################################
00595
00596 p() ;
00597 echo href("montresource.php?nomfic=m1xml_6_tp2.php","Code-source php de cette page","orange_stim nou")."." ;
00598 finp() ;
00599
00600 finSection() ;
00601
00602 if (!isset($_GET["standalone"])) { finPage() ; } ;
00603 ?>
Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.
Retour à la page principale de (gH)