Outils pour utilisateurs

Outils du site


code_language:xml

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
code_language:xml [2025/12/19 07:10]
216.73.216.214 ancienne révision (2025/11/01 01:04) restaurée
code_language:xml [2025/12/19 07:10] (Version actuelle)
216.73.216.214 ancienne révision (2025/11/01 01:04) restaurée
Ligne 1: Ligne 1:
-====== XML(Extensible Markup Language) ====== +====== XML ======
- +
-===== Éléments d'un document XML ===== +
- +
-=== Balisage === +
-Un document XML est constitué de balises. Une balise est une chaîne de caractères constituant un identificateur et placé entre un caractère < et un caractère >. +
- +
-Il existe différentes sortes de balises : +
-  * Les balises ouvrantes <code><item></code> +
-  * Les balises fermantes <code></item></code> +
-  * Les balises vides <code><nop/></code> +
-  * Les instructions de traitement <code><?xml-stylesheet ... ?></code> +
-  * Les commentaires <code><!-- J'explique --></code> +
-  * Les sections CDATA (Character DATA) <code><![CDATA[ Contenu de la section ]]></code> +
- +
-==== Conventions de nommage des balises ==== +
-  * Les noms ne peuvent pas commencer par la chaîne de caractères « xml », dans n'importe quelle combinaison de casse (ou Xml, ou XML…) ; +
-  * les noms sont sensibles à la casse (différentiation minuscules/majuscules) ; +
-  * les noms ne peuvent pas débuter par un nombre ou un signe de ponctuation ; +
-  * les noms ne peuvent pas contenir d'espaces ; +
-  * éviter les caractères accentués et les opérateurs, virgules, point-virgules… +
- +
-==== Les balises ouvrantes ==== +
-Une balise ouvrante est un élément délimitant une section. La section se termine ensuite par une balise fermante. +
- +
-Une balise ouvrante est une chaîne composée de chiffres, de lettres et des caractères - et _. Cette chaîne est comprise entre un &lt; et un &gt;. +
- +
-Exemple : +
-<code Xml [enable_line_numbers="true"]> +
-<balise> +
-</code> +
- +
-==== Les balises fermantes ==== +
-Une balise fermante reprend l'identificateur de la balise ouvrante, en le précédent d'un caractère « barre de fraction » ''(slash)''+
-Exemple : +
-<code Xml [enable_line_numbers="true"]> +
-</balise> +
-</code> +
- +
-==== Les balises vides ==== +
-Une balise « vide » est le résultat de la contraction d'une balise ouvrante et d'une balise fermante ne contenant pas de données. +
-<code Xml [enable_line_numbers="true"]> +
-<div></div> donne <div /> +
-</code> +
- +
-=== Les attributs === +
-Les balises ouvrantes et les balises vides peuvent être enrichies avec des attributs. +
-<code Xml [enable_line_numbers="true"]> +
-<root> +
-     <item id="67af65c75b" date="22/01/2006">Contenu de l'élément</item> +
-     <break mode="immediat"/> +
-</root> +
-</code> +
-Dans l'exemple ci-dessus, la balise ouvrante '''item''' est munie de deux attributs, '''id''' et '''date'''. La balise vide '''break''' est munie de l'attribut '''mode'''+
- +
-attention|Leurs valeurs doivent obligatoirement être entre guillemets ou apostrophes dactylographiques<ref>http://www.w3schools.com/xml/xml_attributes.asp</ref>+
- +
-=== Les instructions de traitement === +
-Une instruction de traitement est destinée à être lue et comprise par un programme spécifique, afin de permettre le traitement du document XML<ref>{{lien web | url = http://www.yoyodesign.org/doc/w3c/xml11/index.html#sec-pi | titre = Le point sur les instructions de traitement | site = yoyodesign.org}}</ref>+
- +
-Une instruction de traitement commence par un point d'interrogation « ? ». +
- +
-Exemple : +
-<code Xml [enable_line_numbers="true"]> +
-<?php echo date("d/m/Y") ?> +
-</code> +
- +
- +
-=== Les commentaires === +
- +
-Les commentaires sont des balises qui ne sont pas interprétées par l'application qui traite le document XML. +
- +
-Un commentaire est une balise commençant par '''&lt;!--''' et terminant par '''--&gt;'''+
- +
-Exemple : +
-<code Xml [enable_line_numbers="true"]> +
-<!-- Ceci est un commentaire utilisé dans les langages web  --> +
-</code> +
- +
-=== Les entités === +
-XML 1.0 définit un petit nombre d'entités utilisables dans le document sans nécessiter de déclaration dans le doctype. +
- +
-Ces entités sont : +
- +
-^ Entité     ^ Caractère ^ Description ^ +
-| &amp;lt;   | &lt;      | Symbole « inférieur » | +
-| &amp;gt;   | &gt;      | Symbole « supérieur » | +
-| &amp;amp;  | &amp;     | Esperluette, « et » commercial | +
-| &amp;apos; | '         | guillemet simple | +
-| &amp;quot; | "         | guillemet double | +
- +
-Toujours sans déclaration de doctype spécial, on peut écrire une entité avec « &amp; », « # », une référence Unicode<ref name="unicode"/> et un « ; ».  +
- +
-^ Entité ^ Caractère ^ Description ^ +
- +
-| &amp;#960; | π | pi | +
-| &amp;#946; | β | bêta | +
-Exemple +
-<code Xml [enable_line_numbers="true"]> +
-<balise>Étudions la balise &amp;lt;p&amp;gt;</balise> Étudions la balise &lt;p&gt; +
-</code> +
- +
-===== Structure d'un document XML ===== +
- +
- +
-=== En-tête === +
-Les trois constituants de l'en-tête que nous allons décrire ne sont pas obligatoires. Ils sont employés en cas de besoin pour fixer l'encodage, définir le doctype et/ou associer une feuille de style. +
-==== Version, encodage ==== +
-Il est souhaitable que le document XML commence par l'indication de la version du langage et le jeu de caractères utilisé. C'est souvent utf-8<ref name="unicode"/>. Il est également souhaitable, si le document est stocké sur disque, que l'encodage du fichier soit le même que celui mentionné par l'attribut ''encoding''… +
-<code Xml [enable_line_numbers="true"]> +
-<?xml version="1.0"?> <!-- minimal --> +
- +
-     <!-- ou --> +
- +
-<?xml version="1.0" encoding="utf-8"?> +
-</code> +
- +
-==== Référence au DTD ==== +
-La deuxième information utile est la mention du doctype. Certains documents XML en ont impérativement besoin, d'autres peuvent s'en passer. +
-<code Xml [enable_line_numbers="true"]> +
-<!DOCTYPE root[ +
-<!ELEMENT root (premier,deuxieme+)> +
-<!ELEMENT premier (#PCDATA)> +
-<!ELEMENT deuxieme (#PCDATA)> +
-]> +
-</code> +
-En analysant ce {{wt|doctype}}, l'analyseur syntaxique (le {{wt|parser}}, p.ex. : via [http://www.xmlcooktop.com/ Cooktop] ou encore [http://sourceforge.net/projects/npp-plugins/files/XML%20Tools/ XML tools pour Notepad++]) est en mesure de considérer le document XML comme valide. +
- +
-==== Mention d'une feuille de style ==== +
-Il est possible d'associer un document XML à une feuille de style CSS ou XSL. Si la fonctionnalité fait réfléchir, au début, il y a fort à parier que vous en abandonnerez la pratique par la suite. En effet, la philosophie XML va à l'opposé. +
-<code Xml [enable_line_numbers="true"]> +
-<?xml-stylesheet type="text/xsl" href="../../style.xsl"?> +
- <!-- ou --> +
-<?xml-stylesheet type="text/css" href="../../style.css"?> +
-</code> +
- +
-=== Une seule racine === +
-Une balise a un statut spécial, c'est la racine du document XML. C'est à partir de cette balise que se développe l'arborescence du document. +
- +
- +
-=== Règles de mise en œuvre des balises === +
-  *Toute balise ouverte doit être fermée. +
-  *Les balises doivent être correctement imbriquées. +
-  *Les balises sont imbriquables hiérarchiquement sans limitation mais il ne doit y avoir qu'un seul élément à la racine. +
- +
-Le corps d'un document XML est une arborescence d'éléments (balises) imbriqués, avec un élément racine unique. +
-<code Xml [enable_line_numbers="true"]> +
-<root> +
-    <balise1> +
-         <balise2> +
-         </balise2> +
-    </balise1> +
-</root> +
-</code> +
- +
-Quand toutes ces règles sont respectées, on obtient un document XML « '''bien formé''' ». Dans ce cas, un navigateur comme Internet explorer ou Firefox peut l'ouvrir. Dans le cas contraire, le navigateur affiche un message d'erreur. +
- +
-== Exemple de structure simple == +
-<code Xml [enable_line_numbers="true"]> +
-<?xml version="1.0" ?> +
-<root> +
-     <items> +
-         <item no="1">Premier élément</item> +
-         <item no="2">Autre chose</item>       +
-         <item no="3">Troisième élément</item> +
-         <item no="4">Quatrième élément</item> +
-     </items> +
-</root> +
-</code> +
- +
-===== Espace de nom ===== +
- +
-== Syntaxe == +
-L'exemple ci-dessous contient deux déclarations, la première par défaut et la seconde associant le préfixe « ip » à l'URI des adresses IP, pour les distinguer des adresses postales :  +
-<code Xml [enable_line_numbers="true"]> +
-<adresse +
- xmlns="http://www.example.com/adresses_postales" +
- xmlns:ip="http://www.example.com/adresses_ip"> +
-</code> +
- +
-===== Attribut balise xml ===== +
- +
-^ Attribut ^ Description ^ Exemple ^ +
-| xml:lang | décrit la langue du contenue de l'élément, sur deux ou trois lettres | <code Xml [enable_line_numbers="true"]> <p xml:lang="fr">Bonjour</p> </code>+
-| xml:space  | permet de faire respecter à une application le traitement des caractères d'espacement; deux valeurs possible: default ou preserve | <code Xml [enable_line_numbers="true"]> <p xml:space="default"> titre1</p> <!--L'application traitera les espaces selon ses propres règles --></code> <code Xml [enable_line_numbers="true"]><p xml:space="preserve">titre2 </p><!--L'application devra respecter les espaces contenue dans le titre2 à la lettre --></code>+
-| xml:base  | Permet de spécifié l'URI (URL+URN) d'un élément | <code Xml [enable_line_numbers="true"]><?xml version="1.0" encoding="iso-8859-1" standalone="yes"?> +
-<book xml:base="http://www.somewhere.org/Teaching/index.html"> +
- <chapter xml:base="XML/chapter.html"> +
-  <section xml:base="XPath/section.html"/> +
-  <section xml:base="/Course/section.html"/> +
-  <section xml:base="http://www.elsewhere.org/section.html"/> +
- </chapter> +
-</book></code>+
-| xml:id | Permet d'attribuer un identificateur à tout élément | <code Xml [enable_line_numbers="true"]><personName xml:id="423"> </personName></code>+
- +
- +
- +
- +
-===== Interprétation du XML ===== +
- +
-Il existe de nombreuses API permettant d'interpréter un document XML. La plupart sont conçues pour un langage particulier : +
- +
-  * Dom4J (Java) +
-  * JDOM (Java) +
-  * SimpleXML (PHP) +
-  * PyXML (Python)[1] +
- +
-Tous ces interpréteurs peuvent être de deux types normalisés : +
- +
-  * DOM (créé par le W3C) : un arbre de nœuds complet est construit à partir du document XML. +
-  * SAX (créé par David Megginson) : l'interpréteur appelle certaines fonctions de l'application en fonction de chacun des éléments de base rencontrés dans le document XML (ouvertures de balise, fermetures, données, commentaires, ...). +
- +
-===== XPath ===== +
-== Syntaxe == +
-Le XPath est un langage de sélection de différents types d'objets XML, appelés « nœuds »http://www.w3schools.com/dom/dom_nodetype.asp. Un ensemble de nœuds est appelé « contexte ».  +
- +
-Le XPath se présente sous la forme de chemins composés de http://www.w3schools.com/xpath/xpath_syntax.asp +
-^ Sélecteur ^ Notes ^ +
-| nom du nœud | Sélectionne ce qui est compris dans le nœud nommé | +
-| /  | Sélectionne en partant du nœud racine (chemin absolu). | +
-| / / | Sélectionne en partant du nœud courant, peu importe le reste de l'emplacement. | +
-| .  | Sélectionne à partir du nœud courant (chemin relatif). = <code Xml [enable_line_numbers="true"]>self::node()</code>+
-| .. | Sélectionne à partir du parent du nœud courant. = <code Xml [enable_line_numbers="true"]>parent::node()</code>+
-| @  | Sélectionne les attributs. = <code Xml [enable_line_numbers="true"]>attribute::</code>+
-| <nowiki>|</nowiki> | Opérateur de sélection multiple.| +
- +
-remarque|Il existe un interpréteur en ligne pour réaliser les exemples décrits ci-dessous : http://www.xpathtester.com/.<br/> La classe http://www.php.net/manual/fr/domxpath.query.php permet de les programmer. +
- +
-Ces expressions sont appelées « chemin de localisation », composés d'un ou plusieurs « pas de localisation » (ou « étapes ») séparés par des « / ». Les pas de localisation ont chacun trois composants : +
-  - Un axe (parent, descendant…). +
-  - Un test de nœud (nom ou fonction désignant les nœuds). +
-  - Des prédicats (entre crochets). +
- +
-== Axes == +
-Pour décrire les relations entre les nœuds, XPath utilise le vocabulaire suivant : +
- +
-^ Axe ^ Abréviation ^ Notes +
-|<code>ancestor</code>| | ancêtre | +
-|<code>ancestor-or-self</code>| | ancêtre ou soi | +
-|<code>attribute</code> |<code>@</code> | attribut, <code>@abc</code> signifie <code>attribute::abc</code>+
-|<code>child</code>| | enfant, <code>xyz</code> signifie <code>child::xyz</code>+
-|<code>descendant</code>| | | +
-|<code>descendant-or-self</code>|<code>//</code>|<code>//</code> signifie <code>/descendant-or-self::node()/</code>+
-|<code>following</code>| | | suivant| +
-|<code>following-sibling</code>| | | frère suivant | +
-|<code>namespace</code>| | | espace de noms | +
-|<code>parent</code> | <code>..</code> |<code>..</code> signifie <code>parent::node()</code>+
-|<code>preceding</code>| | | précédent | +
-|<code>preceding-sibling</code> || | +
-|<code>self</code>|<code>.</code>|soi, <code>.</code> signifie <code>self::node()</code>+
- +
-== Tests de nœuds == +
-Soit l'[[../Espace de nom/|espace de nom]] <code>ns</code>+
-  * <code>//ns:*</code>  sélectionne tout les éléments du namespace. +
-  * <code>//ns:nom</code> récupère tous les éléments du namespace nommés "nom"+
- +
- +
-^ Tests ^ Notes ^ +
-| comment() | trouve tous les commentaires (ex : <code><!-- commentaire 1 --></code>)| +
-| text() | trouve un nœud texte, (ex : <code>hello world</code> dans <code><k>hello<m> world</m></k></code>)| +
-| processing-instruction() | trouve les instructions de traitement (ex : <code>//processing-instruction('php') trouve <?php echo $a; ?></code>)| +
-| node() | trouve tous les nœuds.| +
- +
-== Prédicats == +
-Les prédicats sont des fonctions filtrant les nœuds évalués à ''false'', qui se placent à la fin des sélections<ref>http://www.w3.org/TR/xpath#corelib</ref>+
- +
-Par exemple, les quatre requêtes ci-dessous renvoie le même résultat (si la branche 2 est la dernière comme dans l'exemple en bas de cette page) : +
-  */ /branche[2] +
-  */ /branche[@nom="branche2"+
-  */tronc/branche[last()] +
-  */tronc/branche[position()=2] +
- +
-^ Prédicats ^ Notes ^ +
- +
-|<code>last()</code> | renvoie le dernier nœud de la sélection| +
-|<code>position()</code> | renvoie le nœud situé à la position précisée| +
-|<code>count(contexte)</code> | renvoie le nombre de nœuds en paramètre| +
-|<code>starts-with(chaine1, sous-chaine2)</code> | renvoie ''true'' si le premier argument commence avec le second| +
-|<code>contains(botte_de_foin, aiguille)</code> | renvoie ''true'' si le premier argument contient le second| +
-|<code>sum(contexte)</code> | renvoie la somme des valeurs numériques des nœuds en paramètre| +
-|<code>floor(nombre)</code> | renvoie le nombre arrondi à l'entier inférieur| +
-|<code>ceiling(nombre)</code> | renvoie le nombre arrondi à l'entier supérieur| +
-|<code>round(nombre)</code> | renvoie le nombre arrondi à l'entier le plus proche| +
- +
-== Exemples == +
-Soit l'arborescence suivante : +
-<code Xml [enable_line_numbers="true"]> +
-<?xml version="1.0" encoding="UTF-8"?> +
-<tronc nom="tronc1">  +
- <!-- commentaire 1 -->  +
- <branche nom="branche1" epaisseur="gros">  +
- <brindille nom="brindille1">  +
- <!-- commentaire 2 -->  +
- <feuille nom="feuille1" couleur="marron" /> +
- <feuille nom="feuille2" poids="50" /> +
- <feuille nom="feuille3" />  +
- </brindille>  +
- <brindille nom="brindille2"> +
- <feuille nom="feuille4" poids="90" />  +
- <feuille nom="feuille5" couleur="violet" />    +
- </brindille> +
- </branche>  +
- <branche nom="branche2"> +
- <brindille nom="brindille3">  +
- <feuille nom="feuille6" />  +
- </brindille>  +
- <brindille nom="brindille4">  +
- <feuille nom="feuille7" />  +
- <feuille nom="feuille8" />  +
- <feuille nom="feuille9" couleur="noir" />  +
- <feuille nom="feuille10" poids="100" />  +
- </brindille> +
- </branche>  +
- <branche nom="branche3"> +
- <brindille nom="brindille5">  +
- </brindille>  +
- </branche>  +
-</tronc> +
-</code> +
- +
-=== Abréviations === +
-  - Sélection 1 : toutes les <feuille> d'une <brindille> contenue dans une <branche>, descendant du <tronc>, issu de la racine. +
-    - Abrégé : <code>/tronc/branche/brindille/feuille</code> +
-    - Non abrégé : <code>/child::tronc/child::branche/child::brindille/child::feuille</code> +
-  - Sélection 2 : la <branche> dont l'attribut "nom" est "branche3", enfant du <tronc>, inclue dans la racine. +
-    - Abrégé : <code>/tronc/branche[@nom='branche3']</code> +
-    - Non abrégé : <code>/child::tronc/child::branche[attribute::nom='branche3']</code> +
-   -Sélection 3 : toutes les brindilles ont au moins une feuille. +
-     - <code>//brindille[feuille]</code> +
-   - Sélection 4 : dernière branche du tronc. +
-     - <code>//tronc/branche[last()]</code> +
-   - Sélection 5 : tous les noms des brindilles qui n'ont pas de feuille. +
-     - <code>//brindille[not(feuille)]/@nom</code> +
- +
-=== PHP === +
-Créer le .php suivant à côté du tronc.xml publié ci-dessus. +
-<code php [enable_line_numbers="true"]> +
-<?php +
-  $file = 'tronc.xml'; +
-  $xpath = "/tronc/branche/brindille/feuille[last()]"; +
-  if(file_exists($file)) { +
-    $xml = simplexml_load_file($file); +
-    if($result = $xml->xpath($xpath)) { +
- print 'Résultats :'; +
- var_dump($result); +
-    } else { +
-      echo 'Syntaxe invalide.'; +
-+
-  } +
-  else +
-    exit("Le fichier $file n'existe pas."); +
-?> +
-</code> +
  
code_language/xml.txt · Dernière modification: 2025/12/19 07:10 de 216.73.216.214