Valid XHTML     Valid CSS2    

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&nbsp;:") ;
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&nbsp;;" 
;
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&nbsp;;" ;
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&nbsp;;" ;
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&ecirc;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 !)&nbsp;:" ;
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")."&nbsp;:" ;
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&ecirc;tes &laquo;".em("à la SQL")."&raquo; ".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&ecirc;te 
$XQuery (fichier ".href("demo.xql").")&nbsp;:" ;
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")."&nbsp;:" ;
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&ucirc;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&nbsp;!" ;
00207     
00208     finp
() ;
00209     
00210     finblockquote
() ;
00211     
00212     ## -------------------------------------------------------------------------------------------
00213     
00214     $num 
;
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 &ecirc;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 " &nbsp;:" 
;
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 "&nbsp;: " 
;
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&nbsp;: " ;
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 &nbsp;: " 
;
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")."&nbsp;:"  ;
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&ecirc;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&nbsp;:" 
;
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&ecirc;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&ecirc;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&ucirc;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&amp;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&nbsp;:" ;
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&ocirc;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&nbsp;:" ;
00534     finp
() ;
00535     
00536     ul
() ;
00537     
00538       debutli
() ; p("texte") ;
00539         echo "le format texte qui est un format libre et &laquo;zippable&raquo;&nbsp;;" 
;
00540       finp
() ; finli() ;
00541     
00542       debutli
() ; p("texte") ;
00543         echo "l'intégration aisée des contenus des bases de données&nbsp;;" 
;
00544       finp
() ; finli() ;
00545     
00546       debutli
() ; p("texte") ;
00547         echo "la structure hiérarchique en arbre&nbsp;;" 
;
00548       finp
() ; finli() ;
00549     
00550       debutli
() ; p("texte") ;
00551         echo "le balisage issu de SGML&nbsp;;" 
;
00552       finp
() ; finli() ;
00553     
00554       debutli
() ; p("texte") ;
00555         echo "la vérification via les grammaires&nbsp;;" 
;
00556       finp
() ; finli() ;
00557     
00558       debutli
() ; p("texte") ;
00559         echo "le typage, la cardinalité via les schémas 
$XSD&nbsp;;" ;
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 &laquo;simple&raquo;, 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&ecirc;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&ecirc;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&acirc;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 gH    Retour à la page principale de   (gH)