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
= 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 &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     
?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)