XML signifie littéralement « langage de balisage extensible ». Il dérive du SGML. Son extensibilité a permis à beaucoup de langages d’en dériver (voir les exemples ci-dessous).
Ce langage de description n’est pas considéré comme un langage de programmation, mais il est possible de créer des langages Turing-complets basés sur XML (comme par exemple XSLT, décrit plus loin).
Cette extensibilité est contrôlée par des déclarations qui permettent de valider ou non un document par rapport à un schéma ou une définition de type de document. Ainsi, des systèmes informatiques tout à fait différents peuvent s’échanger des données structurées, en utilisant finalement le même langage.
Quelques articles Wikipedia :
Un fichier XML est reconnaissable à l’utilisation des chevrons <
et >
(comme le HTML, il dérive du SGML)
pour constituer des balises qui vont s’emboîter et/ou contenir du texte. Ce
sont elles qui donnent à un document XML sa structure d’arbre (notion
importante, voir ces schémas).
On note de plus :
<?xml version="1.0"?>
,href="cible.html"
ou autres datedeperemption="23061916"
,<!-- des commentaires -->
,<?type...
, bien connues des utilisateurs de
PHP,<![CDATA[des sections d’échappement (par ex pour < et >)]]>
,Voir la section correspondante sur l’article Wikipedia, ainsi que la recommendation du W3C.
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="modelVisiteurs.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
<EntityContainer Name="modelVisiteursStoreContainer">
<EntitySet Name="Departement" EntityType="modelVisiteurs.Store.Departement" store:Type="Tables" Schema="dbo" />
<EntitySet Name="Region" EntityType="modelVisiteurs.Store.Region" store:Type="Tables" Schema="dbo" />
<EntitySet Name="Travailler" EntityType="modelVisiteurs.Store.Travailler" store:Type="Tables" Schema="dbo" />
<EntitySet Name="Visiteur" EntityType="modelVisiteurs.Store.Visiteur" store:Type="Tables" Schema="dbo" />
<AssociationSet Name="FK_DEPARTEMENT" Association="modelVisiteurs.Store.FK_DEPARTEMENT">
<End Role="Departement" EntitySet="Departement" />
<End Role="Visiteur" EntitySet="Visiteur" />
</AssociationSet>
...
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<Designer xmlns="http://schemas.microsoft.com/ado/2008/10/edmx">
<Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
</DesignerInfoPropertySet>
</Connection>
<Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true" />
<DesignerProperty Name="EnablePluralization" Value="False" />
<DesignerProperty Name="IncludeForeignKeysInModel" Value="True" />
</DesignerInfoPropertySet>
</Options>
<!-- Diagram content (shape and connector positions) -->
<Diagrams>
<Diagram Name="modelVisiteurs">
<EntityTypeShape EntityType="modelVisiteurs.Departement" Width="1.5" PointX="0.5" PointY="1.5" Height="1.4279589843749996" IsExpanded="true" />
<EntityTypeShape EntityType="modelVisiteurs.Region" Width="1.5" PointX="5.125" PointY="1.625" Height="1.4279589843749996" IsExpanded="true" />
<EntityTypeShape EntityType="modelVisiteurs.Visiteur" Width="2" PointX="2.625" PointY="0.5" Height="2.5783902994791656" IsExpanded="true" />
<AssociationConnector Association="modelVisiteurs.FK_DEPARTEMENT" ManuallyRouted="false">
<ConnectorPoint PointX="2" PointY="2.2139794921875" />
<ConnectorPoint PointX="2.625" PointY="2.2139794921875" />
</AssociationConnector>
<AssociationConnector Association="modelVisiteurs.Travailler" ManuallyRouted="false">
<ConnectorPoint PointX="5.125" PointY="2.3389794921875" />
<ConnectorPoint PointX="4.625" PointY="2.3389794921875" />
</AssociationConnector>
</Diagram>
</Diagrams>
</Designer>
</edmx:Edmx>
Voir la section correspondante sur l’article Wikipedia.
Les outils à disposition sont nombreux. Très. Nous n’en détaillons ici que quelques uns. Voir la section correspondante sur l’article Wikipedia.
Il nous est possible d’écrire et de lire du XML, mais les frais en aspirine deviennent considérables. Mettre des données dans du XML revient à dire : « à partir de maintenant, c’est l’ordinateur qui s’occupe de ça ». Ou alors c’est du sadisme (malheureusement répandu).
Si un humain est contraint à la manipulation de XML, autant le faire dans de bonnes conditions, c’est-à-dire avec un éditeur décent. Certains éditeurs comme Notepad++ ont par exemple un plugin XML.
XPath est un des langages qui permet de « parcourir » un document XML pour y localiser une information de façon très fine. La structure d’arbre d’un document XML nous a poussé à utiliser le vocabulaire de la généalogie.
Plutôt que de lire la spécification XPath, le mieux est de parcourir les exemples de la page Wikipedia :
<?xml version="1.0"?>
<racine>
<encyclopedie nom="Wikipedia" site="http://fr.wikipedia.org/">
<article nom="XPath">
<auteurs>
<auteur>
<nom>Dupont</nom>
</auteur>
<auteur>
<nom>Dubois</nom>
</auteur>
</auteurs>
</article>
</encyclopedie>
</racine>
Expression XPath | Résultat |
---|---|
/ |
sélectionne un nœud "fictif", dit root element, qui englobe tout le document sauf <?xml version="1.0"?> |
/root |
sélectionne le nœud vide, puisqu'il n'y a pas d'élément "root" (mais "racine") |
//article |
sélectionne tous les éléments "article" du document où qu'ils soient |
/racine/encyclopedie |
sélectionne l'unique élément "encyclopedie" puisqu'il est ici le seul fils de "racine" portant ce nom |
//article[@nom='XPath'] |
sélectionne tous les éléments "article" du document où qu'ils soient, ayant un attribut "nom" dont la valeur est "XPath" |
Toutes ces expressions XPath sont absolues (elles commencent par un caractère "/"), c'est-à-dire qu'elles donnent le même résultat quel que soit le contexte. Les expressions suivantes sont relatives. Si le contexte courant est l'unique élément "encyclopedie", elles donnent :
Expression XPath | Résultat |
---|---|
article |
sélectionne l'élément "article" |
racine |
ne sélectionne rien, vu le contexte |
article[1]/auteurs/auteur[2] |
sélectionne le second auteur (Dubois) du premier article |
article[ count( article/auteurs/auteur) >1 ] |
sélectionne les articles qui ont au moins 2 auteurs |
../racine |
sélectionne l'élément "racine", puisqu'il est parent de l'élément courant |
Le résultat de ces sélections dépendra de la nature de la tâche :
//article
,
seul le premier est concerné.Voir ce cours ou ces exemples.
À partir du squelette XPath, tester les exemples de la page Wikipedia. Vous aurez besoin de documentation :
En cours de rédaction…
Voir ce squelette, qui permettra de parcourir ce fichier XML. Le but est de le compléter afin qu’il affiche ceci.
XSLT est une ancienne figure de proue des langages fonctionnels. Il est lui-même une extension d’XML. On attache une feuille XSLT à un document XML avec la déclaration :
<?xml-stylesheet href="feuille.xsl" type="text/xsl" ?>
À partir des squelettes :
tester les exemples de la page Wikipedia. Attention, certaines restrictions font que certains navigateurs empêchent l’exécution des feuilles de styles sous certaines conditions. Soyez certaines d’avoir regardé les messages d’erreur et d’avoir essayé plusieurs navigateurs avant d’abandonner.
Quelques liens :
Bien connu dans le cadre du web et du HTML, une feuille CSS peut être attachée à un document XML avec la déclaration :
<?xml-stylesheet href="feuille.css" type="text/css" ?>
Les possibilités sont moins nombreuses, mais tout de même intéressantes. Voir l’article Wikipedia.