Listing du fichier webrd04.php
00001 <?php
00002 error_reporting(E_ALL | E_NOTICE | E_STRICT) ;
00003 # (gH) -_- webrd04.php ; TimeStamp (unix) : 15 Octobre 2012 vers 20:54
00004 include("std.php") ;
00005 include("../xmlstd.php") ;
00006 include("webrd_inc.php") ;
00007
00008 $DTD = rouge("DTD") ;
00009 $XSD = rouge("XSD") ;
00010 $XML = rouge("XML") ;
00011 $XPATH = rouge("XPath") ;
00012 $XQUERY = rouge("XQuery") ;
00013 $XQuery = rouge("XQuery") ;
00014 $xml = rouge("xml") ;
00015 $dtd = rouge("dtd") ;
00016 $xsd = rouge("xsd") ;
00017 $xsl = rouge("xsl") ;
00018 $VCARD = rouge("VCARD") ;
00019 $XCARD = rouge("XCARD") ;
00020 $Fasta = rouge("Fasta") ;
00021 $XSL = rouge("XSL") ;
00022 $XSL2 = rouge("XSL2") ;
00023 $XSLT = rouge("XSLT") ;
00024 $HTML = bleu("HTML") ;
00025 $HTML5 = bleu("HTML5") ;
00026 $JSON = vert("JSON") ;
00027 $YAML = vert("YAML") ;
00028 $XHTML = rouge("XHTML") ;
00029 $XDM = rouge("XDM") ;
00030 $AJAX = rouge("AJAX") ;
00031 $XUL = rouge("XUL") ;
00032 $XPI = rouge("XPI") ;
00033
00034
00035 debutPage("Web et données","strict","","webrd.js") ;
00036 debutSection() ;
00037 h1("Développement Web et représentation de données :") ;
00038 h1(s_nbsp(7)."Comment conclure sur $XML ? ","gbleu") ;
00039 $gh = s_nbsp(10)." gilles.hunault \"at\" univ-angers.fr" ;
00040 h2($gh,"gvert") ;
00041 finSection() ;
00042
00043 ## -------------------------------------------------------------------------------------------
00044
00045 debutSection() ;
00046
00047 h1("Présentation") ;
00048
00049 ## -------------------------------------------------------------------------------------------
00050
00051 blockquote() ;
00052
00053 p("texte") ;
00054 echo "En fait, on n'a jamais fini de parler de $XML. Lorsqu'on en a compris les fondamentaux, on se rend compte " ;
00055 echo " qu'il y a aussi de nouvelles spécifications, ou de nouvelles implémentations. Ou de nouvelles applications. " ;
00056 echo " Ainsi, nous avons vu les principes de base de $XML, $DTD et $XSD. A l'aide de $XPATH 1.0, nous avons écrit des " ;
00057 echo " transformations $XSLT 1.0. Comme tout le monde. Et avec les outils de 2012, qui utilisent les spécifications du début des " ;
00058 echo " années 2000. Oui, mais en 2007, les recommandations $XSLT 2.0 ont été publiées, avec " ;
00059 finp() ;
00060
00061 ul() ;
00062
00063 debutli() ; p() ;
00064 echo href("http://en.wikipedia.org/wiki/XQuery_and_XPath_Data_Model","$XDM","bouton_fin vert_pastel nou") ;
00065 echo " qui explicite le modèle des données ;" ;
00066 finp() ; finli() ;
00067
00068 # http://www.xml.dvint.com/docs/XPath-2.pdf
00069 # aux cartes de référence
00070
00071 debutli() ; p() ;
00072 echo href("http://miage.univ-nantes.fr/miage/D2X1/chapitre_xpath/section_xpath20.htm","$XPATH 2.0","bouton_fin vert_pastel nou") ;
00073 echo " qui améliore notablement $XPATH 1.0 ;" ;
00074 finp() ; finli() ;
00075
00076 debutli() ; p() ;
00077 echo href("https://www.w3.org/TR/xslt20/","$XSLT 2.0","bouton_fin vert_pastel nou") ;
00078 echo " qui se base sur $XPATH 2.0 et qui améliore notablement $XSLT 1.0 ;" ;
00079 finp() ; finli() ;
00080
00081 # ubuntu xslt 1 processor
00082 # http://manpages.ubuntu.com/manpages/lucid/man1/xsltproc.1.html
00083 # ubuntu xslt 2 processor
00084 # http://thegeekcorner.pagesperso-orange.fr/fr/memo/memento_xslt.html
00085 #
00086 # ==> saxonb-xquery et saxonb-xslt
00087 # http://manpages.ubuntu.com/manpages/lucid/man1/saxonb-xslt.1.html
00088
00089 # ==> How to Convert JSON to XML using XSLT 2.0
00090 # http://www.gerixsoft.com/blog/xslt/json2xml
00091
00092 # saxonica
00093 # http://www.lif.univ-mrs.fr/~preynier/XML/tp6/tp6.html
00094
00095 #
00096 #http://nwalsh.com/docs/tutorials/extreme2006/plain.html
00097
00098 # http://www.stylusstudio.com/xquery_primer.html
00099
00100 # http://edutechwiki.unige.ch/en/XQuery_tutorial_-_basics
00101
00102 # http://www.journaldunet.com/developpeur/tutoriel/xml/021104xml_xquery.shtml
00103
00104 debutli() ; p() ;
00105 echo href("http://www.w3.org/TR/xquery/","$XQuery 1.0","bouton_fin vert_pastel nou") ;
00106 echo " qui simplifie l'écriture de transformations $XSL 2.0." ;
00107 finp() ; finli() ;
00108
00109 finul() ;
00110
00111 p("texte") ;
00112 echo "Les changements importants qu'apportent ces nouvelles spécifications ne sont pas tous implémentés. " ;
00113 echo " Ainsi, à ce jour (2012), la plupart des navigateurs ne savent pas effectuer de transformations $XSLT 2.0." ;
00114 echo " Heureusement, sous Linux, on peut utiliser ".href("http://thegeekcorner.pagesperso-orange.fr/fr/memo/memento_xslt.html","libsaxonb-java")." " ;
00115 echo " qui inclut ".href("http://en.wikipedia.org/wiki/Saxon_XSLT","saxonb-xslt")." et ".b("saxonb-xquery").". " ;
00116 finp() ;
00117
00118 h2("Que manquait-il à $XSLT 1.0 ?") ;
00119
00120 p("texte") ;
00121 echo " Même si $XSL 1.0 permet de programmer de nombreuses actions (voir par exemple ".href("progs_xsl.zip")."), il manque " ;
00122 echo " beaucoup de choses à $XSLT 1.0. Par exemple une transformation $XSLT 1.0 ne gère qu'un document de sortie. Si on veut produire un fichier " ;
00123 echo " des films ".b("et")." un fichier des artistes à partir de ".href("films2.xml").", il faut deux transformations $XSL 1.0. " ;
00124 echo " En $XSLT classique, on ne peut pas demander à tester que le document produit par la transformation soit confronté à un schéma. " ;
00125 echo " Et on ne peut pas pas créer ses propres fonctions, ni regrouper les contenus. Ni produire du $XHTML, ni traiter des séquences de valeurs, ni... " ;
00126 finp() ;
00127
00128 p("texte") ;
00129 echo "Voici une transformation $XSL 2.0 qui affiche 5, 4, 3, 2, 1 nommée ".href("sequences_v2.xsl") ;
00130 echo " qu'on peut appliquer au fichier ".href("vide.xml")." (qui ne contient... rien !) :" ;
00131 finp() ;
00132
00133 # utilisation : saxonb-xslt -ext:on -xsl:sequences_v2.xsl après sudo apt-get install libsaxonb-java
00134
00135 pre_fichier("sequences_v2.xsl","cadrebleu") ;
00136
00137 p("texte") ;
00138 echo "Pour vérifier que votre navigateur ne connait pas $XSL 2.0, il suffit de cliquer sur le lien " ;
00139 echo href("essaixsl2.xml")." ce qui devrait aboutir à une erreur, contrairement au lien " ;
00140 echo href("essaixsl1.xml").". " ;
00141 finp() ;
00142
00143
00144 h2("Que manquait-il à $XPATH 1.0 ?") ;
00145
00146 p("texte") ;
00147 echo "Là encore, beaucoup de choses. $XPATH 1.0 utilisait des ensembles de noeuds alors que $XPATH 2.0 sait gérer des séquences de noeuds et/ou " ;
00148 echo " de valeurs. On dispose désormais d'un vrai if/then/else, de boucles sur les variables, de fonctions min et max, " ;
00149 echo " de conversions majuscules/minuscules, de quantification de conditions (some, any, every), de suppression de doublon, de parcours de séquences, " ;
00150 echo " de fonctions pour la date et l'heure courante, de la gestion (partielle) de texte non $XML..." ;
00151 finp() ;
00152
00153 p("texte") ;
00154 echo "A titre d'exemple, voici une transformation $XSL 2.0 qui affiche la date et l'heure, nommée ".href("bonjour_v2.xsl") ;
00155 echo " qu'on peut aussi appliquer au fichier ".href("vide.xml")." :" ;
00156 finp() ;
00157
00158 # utilisation : saxonb-xslt -ext:on -xsl:bonjour_v2.xsl après sudo apt-get install libsaxonb-java
00159 pre_fichier("bonjour_v2.xsl","cadrebleu") ;
00160
00161 p("texte") ;
00162 echo "Pour vérifier que votre navigateur ne connait pas $XPATH 2.0, il suffit de cliquer sur le lien " ;
00163 echo href("essaixpath2.xml")." ce qui devrait aboutir à une erreur, contrairement au lien " ;
00164 echo href("essaixpath1.xml").". " ;
00165 finp() ;
00166
00167
00168 h2("Qu'est-ce que XQuery 1.0 ?") ;
00169
00170 p("texte") ;
00171 echo "$XQuery est un langage de requêtes «".em("à la SQL")."» ".b("dont la syntaxe n'utilise pas $XML").". " ;
00172 echo "$XQuery, qui utilise $XPATH 2.0, est concis, lisible, assez facile à apprendre. De plus son mécanisme " ;
00173 echo href("http://en.wikipedia.org/wiki/FLWOR","FLWOR")." n'est pas sans rappeler le mécanisme " ;
00174 echo href("http://dev.mysql.com/doc/refman/5.7/en/select.html","SFWGHOL")." (Select, From, Where, Group by, Having, Order, Limit) de SQL." ;
00175 finp() ;
00176
00177 p("texte") ;
00178 echo " La syntaxe de ces expressions, disponible sur le site du W3C, " ;
00179 echo " disponible dans la section des transformations $XML, à la rubrique " ;
00180 echo href("http://www.w3.org/TR/xquery/#id-flwor-expressions","xquery") ;
00181 echo " se réduit effectivement à une syntaxe de boucle avec des options de jointure, filtrage et tri." ;
00182 finp() ;
00183
00184
00185 p("texte") ;
00186 echo "Voici un exemple d'une requête $XQuery (fichier ".href("demo.xql").") :" ;
00187 finp() ;
00188
00189 # s'utilise par saxonb-xquery demo.xql
00190 pre_fichier("demo.xql","cadre") ;
00191
00192 p("texte") ;
00193 echo "Et son résultat si on l'utilise via ".b("saxonb-xquery demo.xql")." :" ;
00194 finp() ;
00195
00196 pre_fichier("demo_xq_res.txt","cadrejaune") ;
00197
00198 p("texte") ;
00199 echo "On notera au passage qu'il n'y a pas besoin de définir en ligne de commandes un document $XML sur lequel appliquer la transformation " ;
00200 echo " puisqu'on dispose de la fonction ".b("doc").". La programmation $XSL et $XPATH ressemble donc avec $XQuery à une programmation plus " ;
00201 echo " conventionnelle... " ;
00202 finp() ;
00203
00204 p("texte") ;
00205 echo "Bien sûr les navigateurs ne connaissent pas $XQuery, mais ".b("Javascript")." peut l'implémenter, par exemple avec " ;
00206 echo href("http://www.xqib.org/","xqib").". Ouf !" ;
00207
00208 finp() ;
00209
00210 finblockquote() ;
00211
00212 ## -------------------------------------------------------------------------------------------
00213
00214 $num = 0 ;
00215 $num++ ; h1("$num. $XML et les autres schémas") ;
00216
00217 ## -------------------------------------------------------------------------------------------
00218
00219 blockquote() ;
00220
00221 p("texte") ;
00222 echo "A l'utilisation, les $DTD sont trop simples, les $XSD trop verbeuses, surtout à écrire. Heureusement, d'autres formalismes " ;
00223 echo " permettent d'écrire des grammaires, " ;
00224 echo " comme ".href("http://www.schematron.com/overview.html","Schematron","gvertf"). " qui se base sur des motifs et permet d'exprimer des " ;
00225 echo href("http://www.liafa.jussieu.fr/~carton/Enseignement/XML/Cours/Schematron/index.html","contraintes","grouge").", " ;
00226 echo " ou comme ".href("http://fr.wikipedia.org/wiki/Relax_NG","Relax NG","gvertf")." " ;
00227 echo " qui peut s'écrire en forme standard ($XML) ou selon une syntaxe plus \"compacte\"." ;
00228 echo " Un schéma en ".s_span("Relax NG","gvertf")." peut ensuite être converti en $XSD à l'aide d'un outil comme " ;
00229 echo b("trang")."." ;
00230 echo " Tous ces langages rentrent dans la catégorie des " ;
00231 echo href("http://fr.wikipedia.org/wiki/Document_Schema_Definition_Languages","DSDL").". " ;
00232 finp() ;
00233
00234 p("texte") ;
00235 echo "Voici un fichier écrit en syntaxe compacte en ".s_span("Relax NG","gvertf")." nommé ".href("demo.rnc") ;
00236 echo " disponible sur le site de ".href("http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/RelaxNG/RelaxNG.html","J. F. Perrot") ;
00237 echo " (on en profitera pour consulter ses cours de d'ingénierie multilingue et de traductique, tous deux liés à $XML, à " ;
00238 echo " l'adresse ".href("http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/","inalco/XML").") " ;
00239 echo " :" ;
00240 finp() ;
00241
00242 pre_fichier("demo.rnc","cadrejaune") ;
00243
00244 # traduction par trang : trang -I rnc -O dtd demo.rnc abc.dtd
00245
00246 p("texte") ;
00247 echo "Sa traduction automatique par ".b("trang")." en $DTD est impossible ; le message correspondant est " ;
00248 echo b('demo.rnc:28:5: error: sorry, ambiguous attribute choice not handled (attribute "type" from namespace "")') ;
00249 echo " : " ;
00250 finp() ;
00251
00252 # pre_fichier("demo_rnc.dtd","cadre") ;
00253
00254 # traduction par trang : trang -I rnc -O xsd demo.rnc abc.xsd
00255 p("texte") ;
00256 echo "La version longue au format $XML/".s_span("RNG","gvertf")." est : " ;
00257 finp() ;
00258
00259 pre_fichier("demo_rnc.rng","cadrebleu") ;
00260
00261 p("texte") ;
00262 echo "Enfin sa traduction en $XSD, précédée du message " ;
00263 echo b("demo.rnc:28:5: warning: choice between attributes and children cannot be represented; approximating") ;
00264 echo " est : " ;
00265 finp() ;
00266 pre_fichier("demo_rnc.xsd","cadrebleu") ;
00267
00268 p("texte") ;
00269 echo "Un autre exemple est celui du fichier ".href("07exercice03.rnc") ;
00270 #echo" extrait du livre ".href("http://www.pearson.fr/livre/?GCOI=27440100503160","XML") ;
00271 echo" extrait du livre ".href("http://www.amazon.fr/XML-Gilles-Chagnon/dp/2744072362","$XML") ;
00272 echo " de G. Chagnon et F. Nolot aux éditions Pearson. Le voici en version concise (extension ".s_span(".rnc","gvertf").") " ;
00273 finp() ;
00274
00275 pre_fichier("07exercice03.rnc","cadrejaune") ;
00276
00277 p("texte") ;
00278 echo " Et en version longue, au format $XML (extension ".s_span(".rng","gvertf").") " ;
00279 finp() ;
00280
00281 pre_fichier("07exercice03.rng","cadrebleu") ;
00282
00283 p("texte") ;
00284 echo " Et enfin la verson schéma $XSD correspondante, la traduction étant assurée par ".b("trang")." :" ;
00285 finp() ;
00286
00287 pre_fichier("07exercice03.xsd","cadrebleu") ;
00288
00289 # vérification de .rnx en jing
00290 # http://www.monoidal.net/inf356/relaxng.html
00291
00292 p("texte") ;
00293 echo "Le terme de ".b("schéma")." pour $XML n'est pas sans rappeler celui de ".b("schéma")." pour les bases de données. " ;
00294 echo " Sur les rapports entre $XML et les bases de données, on pourra lire les documents " ;
00295 echo href("http://peccatte.karefil.com/software/RBourret/xmlBD.htm","xmlBD").", " ;
00296 echo href("http://www.rpbourret.com/xml/XMLDBLinks.htm","XMLDBLinks") ;
00297 echo " et enfin ".href("http://www.xml.com/pub/a/2001/05/09/dtdtodbs.html#object","Mapping DTDs to Databases") ;
00298 echo " car il est relativement naturel (quoique parfois pas très optimal) de convertir des tables d'un schéma " ;
00299 echo " relationnel en éléments et balises..." ;
00300 finp() ;
00301
00302 finblockquote() ;
00303
00304 ## -------------------------------------------------------------------------------------------
00305
00306 $num++ ; h1("$num. $XML et les pages Web") ;
00307
00308 ## -------------------------------------------------------------------------------------------
00309
00310 blockquote() ;
00311
00312 p("texte") ;
00313 echo "Une application très importante de $XML est la reprise de $HTML en $XML, ce qui se nomme $XHTML. Au delà des versions " ;
00314 echo " (1.0, 1.1, strict, transitional, frameset), les navigateurs savent utiliser $XML et même effectuer des transformations $XSL. " ;
00315 echo " Par contre, les validations par grammaire ne sont pas implémentées, les navigateurs se contentant de tester si les pages sont bien formées " ;
00316 echo " lorsqu'on prévient qu'il s'agit de pages $XML. Sinon, comme à l'habitude, les navigateurs essaient d'afficher, page \"correcte\" ou pas... " ;
00317 finp() ;
00318
00319 p("texte") ;
00320 echo "Une révolution importante liée à $XML est la technologie " ;
00321 echo href("http://www.w3schools.com/ajax/ajax_xmlfile.asp","$AJAX") ;
00322 echo " qui, si elle n'utilise pas toujours $XML (le ".s_span("X","grouge")." de $AJAX correspond pourtant à $XML) " ;
00323 echo " utilise le modèle objet des documents (DOM) via Javascript, et vient dynamiquement (sans recharger la page) modifier les attributs, les éléments " ;
00324 echo " de la page... " ;
00325 echo " Voir par exemple notre ".href("../tuteurs/tutajax.php","tuteur AJAX").". " ;
00326 finp() ;
00327
00328 p("texte") ;
00329 echo "Une extension pour le navigateur Firefox est un fichier $XPI, qui est une archive, contenant entre autres un fichier $XML nommé " ;
00330 echo b("install.rdf")." et souvent une ou plusieurs archives ".b("jar")." dans lesquelles on trouve des fichiers " ;
00331 echo href("http://fr.wikipedia.org/wiki/XML-based_User_interface_Language","$XUL")."." ;
00332 finp() ;
00333
00334 p("texte") ;
00335 echo "Prenons l'exemple de l'extension ".href("http://code.google.com/p/firefox-showip/","ShowIP") ;
00336 echo " qui affiche l'IP du serveur contenant la page courante :" ;
00337 finp() ;
00338
00339 pre_fichier("demo_xul.txt","cadre") ;
00340
00341 /* mettre détails pour
00342 showip.xpi est un zip ==> install.rdf est en xml
00343 dans chrome/ il y a ipv6ident.jar ==> dans content/ plusieurs .xul
00344 + des js + d'autres rdf
00345 */
00346
00347 p("texte") ;
00348 echo "De même, " ;
00349 echo href("http://fr.wikipedia.org/wiki/XAML","XAML") ;
00350 echo " est un langage basé sur $XML prévu pour Windows et " ;
00351 echo " sert à la création d'interfaces \"riches\". Plus sur ";
00352 echo href("http://www.xaml.fr/","xaml.fr")." avec un exemple sur ".href("http://www.scriptol.fr/xaml/image.php","scriptol.fr").". " ;
00353 finp() ;
00354
00355 p("texte") ;
00356 echo "Enfin, pour la mise à disposition des ressources d'un site, " ;
00357 echo href("http://fr.wikipedia.org/wiki/Sitemaps","sitemaps")." se " ;
00358 echo " code facilement en $XML suivant le ".href("http://www.sitemaps.org/protocol.html","protocole")." idoine." ;
00359 finp() ;
00360
00361 finblockquote() ;
00362
00363 ## -------------------------------------------------------------------------------------------
00364
00365 $num++ ; h1("$num. $XML et les services Web") ;
00366
00367 ## -------------------------------------------------------------------------------------------
00368
00369 blockquote() ;
00370
00371 p("texte") ;
00372 echo "Un domaine privilégié pour $XML est celui de l'échange d'informations sur Internet. " ;
00373 echo " La notion de ".href("http://fr.wikipedia.org/wiki/Service_Oriented_Architecture","SOA") ;
00374 echo " qui débouche sur les ".href("http://fr.wikipedia.org/wiki/Web_Services_Description_Language","WSDL") ;
00375 echo " dont ".href("http://fr.wikipedia.org/wiki/Remote_procedure_call","RPC")."/" ;
00376 echo href("http://fr.wikipedia.org/wiki/SOAP","SOAP")." est le genre de phrase à jargon qui malheureusement " ;
00377 echo " doit faire partie de la culture $XML liées aux échanges de données et aux protocoles. " ;
00378 echo " On y ajoutera profitablement le sigle ".href("http://fr.wikipedia.org/wiki/Registre_ebXML","ebXML").". " ;
00379 finp() ;
00380
00381 p("texte") ;
00382 echo "On peut certainement ajouter la " ;
00383 echo href("http://fr.wikipedia.org/wiki/Syndication","syndication")." et en particulier la " ;
00384 echo href("http://fr.wikipedia.org/wiki/Syndication_de_contenu","syndication de flux")." à cette rubrique avec les incontournables " ;
00385 echo href("http://fr.wikipedia.org/wiki/RSS","RSS")." et " ;
00386 echo href("http://fr.wikipedia.org/wiki/Atom","ATOM")."." ;
00387 finp() ;
00388
00389 p("texte") ;
00390 echo "Nous n'en dirons pas plus sur le sujet car il y a un cours prévu sur les services Web dans ce module." ;
00391 finp() ;
00392
00393 finblockquote() ;
00394
00395 ## -------------------------------------------------------------------------------------------
00396
00397 $num++ ; h1("$num. $XML et le Web sémantique") ;
00398
00399 ## -------------------------------------------------------------------------------------------
00400
00401 blockquote() ;
00402
00403 p("texte") ;
00404 echo "Le ".href("http://fr.wikipedia.org/wiki/Web_s%C3%A9mantique","web sémantique") ;
00405 echo " ne s'oppose pas au " ;
00406 echo b("Web syntaxique")." mais au contraire veut le compléter. " ;
00407 echo " Il utilise un mécanisme logique simple basé sur des ressources de données " ;
00408 echo "(".href("http://fr.wikipedia.org/wiki/Resource_Description_Framework","RDF")." en anglais) ";
00409 echo " représentées par des graphes de triplets ".b("sujet, prédicat, objet").". Ce mécanisme, issu des " ;
00410 echo href("http://fr.wikipedia.org/wiki/Logiques_de_description","logiques de description") ;
00411 echo " permet, à l'aide d'" ;
00412 echo href("http://fr.wikipedia.org/wiki/Ontologie_%28informatique%29","ontologies") ;
00413 echo " structurées en fichiers $XML via " ;
00414 echo href("http://fr.wikipedia.org/wiki/Web_Ontology_Language","OWL") ;
00415 echo ", de faire des déductions basées sur le sens. " ;
00416 echo " Un des langages de requêtes associé se nomme " ;
00417 #echo href("graphes conceptuels") ;
00418 # http://jplu.developpez.com/tutoriels/web-semantique/introduction/
00419 echo href("http://fr.wikipedia.org/wiki/SPARQL","SPARQL").". " ;
00420 finp() ;
00421 #http://fr.slideshare.net/lespetitescases/les-technologies-du-web-appliques-aux-donnes-structures-1re-partie-encoder-et-structurer-les-donnes
00422 p("texte") ;
00423 echo "Il faut certainement le complèter à son tour par le " ;
00424 echo href("http://www.bnf.fr/fr/professionnels/web_semantique_donnees/s.web_semantique_intro.html","Web de données") ;
00425 echo " comme à la ".href("http://www.bnf.fr/fr/professionnels/formats_catalogage/a.f_mets.html","BNF").". " ;
00426 finp() ;
00427
00428 p("texte") ;
00429 echo "Là encore, nous n'en dirons pas plus sur le sujet car il y a aussi un cours prévu sur le Web sémantique dans ce module." ;
00430 finp() ;
00431
00432 finblockquote() ;
00433
00434 ## -------------------------------------------------------------------------------------------
00435
00436 $num++ ; h1("$num. $XML et l'imprimerie") ;
00437
00438 ## -------------------------------------------------------------------------------------------
00439
00440 blockquote() ;
00441 p("texte") ;
00442 echo "SGML a été historiquement développé pour aider à séparer le fond et la forme dans les documents techniques. " ;
00443 echo " Au niveau de l'imprimerie et de l'édition d'ouvrages, " ;
00444 echo href("http://fr.wikipedia.org/wiki/DocBook","DocBook")." s'est à peu près imposé. " ;
00445 echo " Vous trouverez plus d'informations sur ".href("http://www.docbook.org/xml/?C=M;O=D","docbookg.org").". " ;
00446 echo " Il ne faut pas oublier non plus ".href("http://fr.wikipedia.org/wiki/BiblioML","BiblioML") ;
00447 echo " qui est en quelque sorte la version $XML des formats " ;
00448 echo href("http://fr.wikipedia.org/wiki/UNIMARC","UNIMARC")." pour les échanges de données bibliographiques " ;
00449 echo " ni ".href("http://en.wikipedia.org/wiki/Onix_(publishing_protocol)","Onix") ;
00450 echo " (ONline Information eXchange) qui regroupe les formats $XML pour la vente de livres. " ;
00451 /*
00452 echo "Par exemple, sur la page Web qui décrit " ;
00453 echo "l'".href("http://www.pearson.fr/livre/?GCOI=27440100422330","ouvrage de K. H. Goldberg")." dédié à $XML aux éditions Pearson, " ;
00454 echo " on trouve le lien ".href("http://www.pearson.fr/onix/?isbn=9782744023699","9782744023699")." qui renvoie les informations liées au " ;
00455 echo " commerce de l'ouvrage au format $XML." ;
00456 */
00457 finp() ;
00458
00459 # http://bibliodoc.francophonie.org/article.php3?id_article=178
00460
00461 finblockquote() ;
00462
00463 ## -------------------------------------------------------------------------------------------
00464
00465 $num++ ; h1("$num. $XML, la voix, la musique et la télévision") ;
00466
00467 ## -------------------------------------------------------------------------------------------
00468
00469 blockquote() ;
00470
00471 p("texte") ;
00472 echo "L'avènement de la synthèse vocale et de la reconnaissance de la parole ont permis d'automatiser l'interrogation " ;
00473 echo " par téléphone de nombreux serveurs. Une contribution majeure liée à $XML est " ;
00474 echo href("http://fr.wikipedia.org/wiki/VoiceXML","VoiceXML") ;
00475 echo ". Comme le montre la page du ".href("http://www.w3.org/Voice/","VBWG")." il s'agit d'un domaine toujours en pleine activité en 2012. " ;
00476 echo "Dans le domaine de la musique, on pourra citer " ;
00477 echo href("http://fr.wikipedia.org/wiki/MusicXML","MusicXML") ;
00478 echo " comme initiative intéressante et pour ceux qui connaissent iTunes, le lien " ;
00479 echo href("http://support.apple.com/kb/HT1660","HT1660") ;
00480 echo " explique où sont les fichiers $XML utilisés. " ;
00481 finp() ;
00482
00483 p("texte") ;
00484 echo "Bien évidemment, " ;
00485 echo href("http://fr.wikipedia.org/wiki/XMLTV","XMLTV") ;
00486 echo " est un format $XML dédié au stockage des programmes de télévision qui prend tout son sens depuis que les TV sont " ;
00487 echo " devenues connectées (sous-entendu \"au Web\")." ;
00488 finp() ;
00489
00490 finblockquote() ;
00491
00492 ## -------------------------------------------------------------------------------------------
00493
00494 $num++ ; h1("$num. Encore d'autres langages basés sur $XML") ;
00495
00496 ## -------------------------------------------------------------------------------------------
00497
00498 blockquote() ;
00499 p("texte") ;
00500 echo "Afin de rester dans un domaine proche du développement Web et qui embauche encore beaucoup en ces années 2010, ";
00501 echo " nous ne parlerons ici que de " ;
00502 echo href("http://fr.wikipedia.org/wiki/Geography_Markup_Language","GML")." dont les schémas sont sur le site " ;
00503 echo href("http://schemas.opengis.net/gml/?C=M;O=D","opengis").", " ;
00504 # http://schemas.opengis.net/gml/3.2.1/
00505 echo " sans oublier ".href("http://www.gdal.org/frmt_wms.html","XMS")." et " ; # <== xms
00506 #echo href("http://geotribu.net/node/62","WFS").". " ;
00507 echo href("https://georezo.net/wiki/main/standards/wfs","WFS").". " ;
00508 echo "Google maps n'est pas en reste, bien sûr, par exemple pour " ;
00509 echo href("https://developers.google.com/maps/documentation/android/map?hl=FR","android")." ou " ;
00510 echo " encore, avec ".href("https://www.google.fr/search?q=KML&tbm=isch","KML")." (";
00511 echo href("https://fr.wikipedia.org/wiki/Keyhole_Markup_Language","wiki")."). " ;
00512 echo " On l'aura compris, en $XML, tout est sigle et culture encyclopédique... " ;
00513 finp() ;
00514
00515 finblockquote() ;
00516
00517 ## -------------------------------------------------------------------------------------------
00518
00519 $num++ ; h1("$num. Soyons critiques et réalistes") ;
00520
00521 ## -------------------------------------------------------------------------------------------
00522
00523 blockquote() ;
00524
00525 p("texte") ;
00526 echo "Il ne faut pas s'effrayer de l'apparente complexité du vocabulaire technique. $XML est conceptuellement simple :" ;
00527 echo " on fait des choix de structure, de cardinalité et de typage, comme en systèmes d'information et en bases de données, " ;
00528 echo " puis on fournit des outils de vérification, contrôle et garantie de qualité (les grammaires) et enfin on transforme " ;
00529 echo " pour assurer la diffusion dans tous les formats et medias requis. Le reste n'est que codage informatique... " ;
00530 finp() ;
00531
00532 p("texte") ;
00533 echo "Les bons points de $XML sont :" ;
00534 finp() ;
00535
00536 ul() ;
00537
00538 debutli() ; p("texte") ;
00539 echo "le format texte qui est un format libre et «zippable» ;" ;
00540 finp() ; finli() ;
00541
00542 debutli() ; p("texte") ;
00543 echo "l'intégration aisée des contenus des bases de données ;" ;
00544 finp() ; finli() ;
00545
00546 debutli() ; p("texte") ;
00547 echo "la structure hiérarchique en arbre ;" ;
00548 finp() ; finli() ;
00549
00550 debutli() ; p("texte") ;
00551 echo "le balisage issu de SGML ;" ;
00552 finp() ; finli() ;
00553
00554 debutli() ; p("texte") ;
00555 echo "la vérification via les grammaires ;" ;
00556 finp() ; finli() ;
00557
00558 debutli() ; p("texte") ;
00559 echo "le typage, la cardinalité via les schémas $XSD ;" ;
00560 finp() ; finli() ;
00561
00562 debutli() ; p("texte") ;
00563 echo "la transformation via la programmation fonctionnelle en $XSLT." ;
00564 finp() ; finli() ;
00565 /*
00566 debutli() ; p("texte") ;
00567 echo "" ;
00568 finp() ; finli() ;
00569
00570 debutli() ; p("texte") ;
00571 echo "" ;
00572 finp() ; finli() ;
00573
00574 debutli() ; p("texte") ;
00575 echo "" ;
00576 finp() ; finli() ;
00577 */
00578 finul() ;
00579
00580 p("texte") ;
00581 echo "Malgré tous ces bons points, il reste quelques difficultés à tout intégrer via $XML et à tout traiter en $XML." ;
00582 finp() ;
00583
00584 p("texte") ;
00585 echo "La première critique qu'on peut faire est que $XML impose une structure et rend les textes peu lisibles. Quand un fichier texte est très court, ou " ;
00586 echo " quand on veut relire un fichier $XML «simple», il faut enlever les balises, choisir puis imposer cette structure." ;
00587 finp() ;
00588
00589 p("texte") ;
00590 echo "La deuxième critique qu'on peut faire est la technicité requise pour réaliser les grammaires-schémas $XSD. " ;
00591 echo " C'est pourquoi les grammaires $DTD, beaucoup moins puissantes, mais nettement plus simples, sont souvent utilisées, " ;
00592 echo " au moins dans un premier temps. Mais les $DTD ne s'écrivent pas en $XML. Il en va de même avec les grammaires " ;
00593 echo " Relax NG, qui utilisent un formalisme et une écriture beaucoup plus lisibles. On les traduit ensuite en $XSD, mais on " ;
00594 echo " ne les écrit pas en $XML." ;
00595 finp() ;
00596
00597 p("texte") ;
00598 echo "C'est la même raison qui pousse à utiliser le langage ".href("http://fr.wikipedia.org/wiki/Notation3","N3")." au lieu de " ;
00599 echo href("http://www.lespetitescases.net/xml-vs-rdf","XML/RDF") ;
00600 echo " dans le [petit] monde du Web sémantique. Et c'est ce qui fera qu'on utilisera certainement beaucoup plus dans les années " ;
00601 echo " à venir ".href("http://fr.wikipedia.org/wiki/XQuery","$XQuery")." et ".href("http://fr.wikipedia.org/wiki/SPARQL","SPARQL")." que $XSLT directement..." ;
00602 finp() ;
00603
00604 p("texte") ;
00605 echo "Enfin, il ne faut pas oublier que $XML n'est pas la seule solution pour la structuration dans les fichiers-textes. " ;
00606 echo " Ainsi, ".href("http://fr.wikipedia.org/wiki/JavaScript_Object_Notation","$JSON") ;
00607 echo " est une alternative simple et rapide à utiliser, qui n'est pas réservée à Javascript. Par exemple, " ;
00608 echo " PHP sait gérer des objets et du code $JSON via une ".href("http://php.net/manual/fr/book.json.php","API")." simple. " ;
00609 echo " Et si $XML et $JSON ne suffisent pas, il y a aussi ".href("https://fr.wikipedia.org/wiki/YAML","$YAML").". " ;
00610 finp() ;
00611
00612 p("texte") ;
00613 echo "Les extremistes $XML vous diront que la transformation [en $XSLT 2] " ;
00614 echo href("http://www.gerixsoft.com/blog/xslt/json2xml","json2xml.xsl") ;
00615 echo " transforme du $JSON en $XML, " ;
00616 echo " et que son équivalent javascript ne prend qu'une quinzaine de lignes " ;
00617 echo " (voir par exemple " ;
00618 #.href("http://wiki.federalbureauofinhumanity.org/doku.php?id=json2xml","json2xml.js") ;
00619 echo href("https://www.npmjs.org/package/json2xml","json2xml.js") ;
00620 echo ") " ;
00621 echo " mais cela ne prouve pas qu'il faut tout faire avec $XML..." ;
00622 finp() ;
00623
00624
00625 p("texte") ;
00626 echo "Pour conclure cette conclusion (!), on pourra replacer $XML dans son contexte grâce à l'excellent site " ;
00627 echo href("http://b3d.bdpedia.fr/","bdpedia.fr")." de ".href("http://deptinfo.cnam.fr/~rigaux/","Philippe RIGAUX") ;
00628 echo " et s'ouvrir ainsi l'esprit à Docker, Kitematic, Cassandra, MongoDb, CouchDB, BaseX, MapReduce, Soir et SoirCloud, " ;
00629 echo " ElasticSearch, ZooKeeper, Pig... " ;
00630 finp() ;
00631
00632
00633 # dire XForms abandonné au profit de nouveaux éléments et du typage en HTML 5 ?
00634
00635 finblockquote() ;
00636
00637 /*
00638
00639
00640 - autres
00641
00642 http://fr.wikipedia.org/wiki/Sitemaps
00643
00644 http://fr.wikipedia.org/wiki/VoiceXML
00645
00646 http://fr.wikipedia.org/wiki/Geography_Markup_Language
00647 http://schemas.opengis.net/gml/?C=M;O=D ==> plus récent = 3.2.1
00648 http://schemas.opengis.net/gml/3.2.1/
00649 http://www.gdal.org/frmt_wms.html <== xms
00650 http://geotribu.net/node/62 wfs
00651
00652 http://fr.wikipedia.org/wiki/BiblioML
00653
00654 http://fr.wikipedia.org/wiki/Chemical_Markup_Language
00655 http://cml.sourceforge.net/ ==> aller sur schémas
00656
00657 http://fr.wikipedia.org/wiki/Extensible_Business_Reporting_Language
00658
00659 - flux
00660 http://fr.wikipedia.org/wiki/RSS
00661
00662 itunes xml
00663 http://support.apple.com/kb/HT1660
00664
00665 http://fr.wikipedia.org/wiki/MusicXML
00666
00667
00668 */
00669
00670 finSection() ;
00671
00672 ## -------------------------------------------------------------------------------------------
00673
00674 finPage() ;
00675
00676 ?>
Retour à la page principale de (gH)