JavaRush /Blog Java /Random-FR /XML en Java : qu'est-ce que c'est ?

XML en Java : qu'est-ce que c'est ?

Publié dans le groupe Random-FR
Bonjour! Aujourd'hui, nous allons nous familiariser avec un autre format de données appelé XML. C'est un sujet très important. Lorsque vous travaillez sur de vraies applications Java, vous rencontrerez presque certainement des problèmes liés au XML. Ce format est utilisé presque partout dans le développement Java (nous découvrirons pourquoi exactement ci-dessous), je vous recommande donc de lire la conférence non pas « en diagonale », mais de tout comprendre à fond et en même temps d'étudier de la littérature/des liens supplémentaires :) Ceci le temps ne sera certainement pas perdu. Alors, commençons par les plus simples : « quoi » et « pourquoi » !

Qu’est-ce que XML ?

XML signifie eXtensible Markup Language. Vous connaissez peut-être déjà l'un des langages de balisage : vous avez entendu parler du HTML, qui est utilisé pour créer des pages Web :) Qu'est-ce que XML - 1HTML et XML ont même une apparence similaire :
HTML1
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML1
<headline>title</headline>
<paragraph>paragraph</paragraph>
<paragraph>paragraph</paragraph>
HTML2
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML2
<chief>title</chief>
<paragraph>paragraph</paragraph>
<paragraph>paragraph</paragraph>
En d’autres termes, XML est un langage permettant de décrire des données.

Pourquoi XML est-il nécessaire ?

XML a été inventé à l'origine pour faciliter le stockage et la transmission des données, y compris sur Internet. Il présente un certain nombre d’avantages qui lui permettent de s’acquitter avec succès de cette tâche. Premièrement, il est facile à lire tant par les humains que par les ordinateurs. Je pense que vous pouvez facilement comprendre ce que décrit ce fichier XML :
<?xml version="1.0" encoding="UTF-8"?>
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
L'ordinateur comprend également facilement ce format. Deuxièmement, étant donné que les données sont stockées dans un format texte simple, il n'y aura aucun problème de compatibilité lors de leur transfert d'un ordinateur à un autre. Il est important de comprendre que XML n'est pas du code exécutable, mais un langage de description de données . Après avoir décrit les données en XML, vous devez écrire du code (par exemple, en Java) qui peut envoyer/recevoir/traiter ces données.

Comment fonctionne XML ?

Son composant principal est constitué de balises : ce sont les éléments entre crochets :
<book>
</book>
Il y a des balises d'ouverture et de fermeture. Celui de fermeture a un symbole supplémentaire - «/ », cela peut être vu dans l'exemple ci-dessus. Chaque balise d'ouverture doit avoir une balise de fermeture correspondante. Ils montrent où commence et où se termine la description de chaque élément du fichier. Les balises peuvent être imbriquées ! Dans notre exemple de livre, la balise <book> a 3 sous-balises - <title> , <author> et <year> . Ceci n'est pas limité à un seul niveau : les sous-balises peuvent avoir leurs propres sous-balises, etc. Cette conception est appelée un arbre de balises. Regardons l'arborescence en utilisant l'exemple d'un fichier XML avec une description d'un concessionnaire automobile :
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
Ici, nous avons une balise de niveau supérieur - <carstore> . On l'appelle également « racine » - balise racine. <carstore> a une balise enfant, <car>. <car>, à son tour, possède également 3 de ses propres balises enfants - <model>, <year> et <price>. Chaque balise peut avoir des attributs - des informations importantes supplémentaires. Dans notre exemple, la balise <model> a un attribut « lang » - la langue dans laquelle le nom du modèle est écrit :
<model lang="en">Scania R 770</model>
De cette façon, nous pouvons indiquer que le titre est rédigé en anglais. Notre balise <price> a un attribut « devise ».
<price currency="US dollar">150000.00</price>
De cette façon, nous pouvons indiquer que le prix de la voiture est en dollars américains. Ainsi, XML a une syntaxe « auto-descriptive » . Vous pouvez ajouter toutes les informations dont vous avez besoin pour décrire les données. Vous pouvez également ajouter une ligne au début du fichier indiquant la version XML et l'encodage dans lequel les données sont écrites. Il s'appelle " prologue " et ressemble à ceci :
<?xml version="1.0" encoding="UTF-8"?>
Nous utilisons le codage XML version 1.0 et UTF-8. Ce n'est pas nécessaire, mais cela peut être utile si, par exemple, vous utilisez du texte dans différentes langues dans votre fichier. Nous avons mentionné que XML signifie « langage de balisage extensible », mais que signifie « extensible » ? Cela signifie qu'il est parfaitement adapté pour créer de nouvelles versions de vos objets et fichiers. Par exemple, nous souhaitons que notre showroom automobile commence également à vendre des motos ! Dans le même temps, dans le programme, nous devons prendre en charge les deux versions de <carstore> - à la fois l'ancienne (sans motos) et la nouvelle. Voici notre ancienne version :
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
Et voici le nouveau, élargi :
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
   <motorcycle>
       <title lang="en">Yamaha YZF-R6</title>
       <year>2018</year>
       <price currency="Russian Ruble">1000000.00</price>
       <owner>Vasia</owner>
   </motorcycle>
   <motorcycle>
       <title lang="en">Harley Davidson Sportster 1200</title>
       <year>2011</year>
       <price currency="Euro">15000.00</price>
       <owner>Petia</owner>
   </motorcycle>
</carstore>
C'est si facilement et simplement que nous avons ajouté la description des motos à notre fichier :) En même temps, nous n'avons absolument pas besoin de définir les mêmes balises enfants pour les motos que pour les voitures. Veuillez noter que les motos, contrairement aux voitures, ont un élément <owner> - le propriétaire. Cela n’empêchera pas un ordinateur (ni une personne non plus) de lire les données.

Différences entre XML et HTML

Nous avons déjà dit que XML et HTML sont très similaires en apparence. Il est donc très important de savoir en quoi ils diffèrent. Premièrement, ils sont utilisés à des fins différentes. HTML - pour baliser les pages Web. Par exemple, si vous devez créer un site Web, en utilisant HTML, vous pouvez spécifier : « Le menu doit être dans le coin supérieur droit. Il devrait y avoir tel ou tel bouton. En d’autres termes, le but du HTML est d’afficher des données. XML - pour stocker et transmettre des informations sous une forme adaptée aux humains et aux ordinateurs. Ce format ne contient aucune instruction sur la manière dont ces données doivent être affichées : cela dépend du code du programme lui-même. Deuxièmement, ils présentent une différence technique majeure. Les balises HTML sont prédéfinies. En d'autres termes, pour créer un titre (par exemple, une grande inscription en début de page), seules les balises <h1></h1> sont utilisées en HTML (pour les titres plus petits - <h2></h2>, < h3></h3>). Vous ne pourrez pas créer de titres en HTML en utilisant des balises avec des titres différents. XML n'utilise pas de balises prédéfinies. Vous pouvez donner aux balises les noms de votre choix - <header>, <title>, <idontknow2121>.

Résolution de conflit

La liberté offerte par XML peut également entraîner certains problèmes. Par exemple, la même entité (par exemple une machine) peut être utilisée par un programme à des fins différentes. Par exemple, nous avons un fichier XML qui décrit les machines. Cependant, nos programmeurs ne se sont pas mis d’accord à l’avance. Et désormais, en plus des données provenant de voitures réelles, notre XML inclut également des données provenant de modèles de jouets ! De plus, ils possèdent les mêmes attributs. Notre programme reçoit le fichier XML suivant. Comment distinguer une vraie voiture d’un modèle réduit ?
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">100.00</price>
   </car>
</carstore>
Les préfixes et les espaces de noms nous aideront ici. Pour séparer les petites voitures des vraies dans notre programme (et, en général, tous les jouets de leurs vrais prototypes), nous introduisons deux préfixes - « réel » et « jouet ».
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
Notre programme sera désormais capable de distinguer les entités ! Tout ce qui porte le préfixe jouet sera classé comme jouet :) Cependant, nous n'avons pas encore terminé. Pour utiliser des préfixes, nous devons enregistrer chacun d'eux en tant qu'espace de noms. Eh bien, en fait, « s'inscrire » est un mot fort :) Il vous suffit de trouver un nom unique pour chacun d'eux. C'est comme avec les classes : une classe a un nom court ( Cat) et un nom complet avec tous les packages ( zoo.animals.Cat) Pour créer des espaces de noms uniques, un URI est généralement utilisé . Parfois, l'adresse Internet est remplacée ici, où les fonctions et le but de cet espace de noms sont décrits en détail. Mais il n’est pas nécessaire qu’il s’agisse d’une adresse Internet valide. Très souvent, les projets utilisent simplement des chaînes de type URI qui permettent de suivre la hiérarchie des espaces de noms. Voici un exemple :
<?xml version="1.0" encoding="UTF-8"?>
<carstore xmlns:real="http://testproject.developersgroup1.companyname/department2/namespaces/real"
         xmlns:toy="http://testproject.developersgroup1.companyname/department2/namespaces/toy">
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
</carstore>
Bien sûr, il n'y a pas de site sur Internet à l'adresse http://testproject.developersgroup1.companyname/department2/namespaces/real Mais il y a une information utile : le groupe de développeurs « Developersgroup1 » du département « Department2 » est chargé de créer le « vrai » espace de noms. Si vous devez ajouter de nouveaux noms ou discuter d’éventuels conflits avec eux, nous savons vers qui vous tourner. Parfois, une véritable adresse Internet avec une description de cet espace de noms est utilisée comme nom unique pour un espace de noms. Par exemple, s’il s’agit d’une grande entreprise et que son projet sera utilisé par des millions de personnes à travers le monde. Mais cela n'est pas toujours fait : il y a une discussion sur ce problème sur Stackoverflow . En principe, l'obligation d'utiliser des URI comme noms pour les espaces de noms n'est pas stricte : vous pouvez simplement utiliser des chaînes aléatoires. Cette option fonctionnera également :
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Mais l’utilisation des URI présente de nombreux avantages. Vous pouvez en savoir plus à ce sujet ici .

Normes XML de base

Les normes XML sont un ensemble d'extensions qui ajoutent des fonctionnalités supplémentaires aux fichiers XML. XML a de nombreuses normes, mais nous nous contenterons d'examiner les plus importantes et de découvrir ce qu'elles permettent à AJAX , l'une des normes XML les plus connues, de faire. Il permet de modifier le contenu d’une page web sans la recharger ! Cela paraît bien? :) Vous pouvez essayer cette technologie en personne ici . XSLT - vous permet de convertir du texte XML vers d'autres formats. Par exemple, en utilisant XSLT, vous pouvez transformer du XML en HTML ! Le but de XML, comme nous l'avons déjà dit, est de décrire les données et non de les afficher. Mais en utilisant XSLT, nous pouvons contourner cette limitation ! Voici un bac à sable avec un exemple fonctionnel, où vous pouvez voir par vous-même comment cela fonctionne :) XML DOM - vous permet d'obtenir, de modifier, d'ajouter ou de supprimer des éléments individuels d'un fichier XML. Voici un petit exemple de la façon dont cela fonctionne. Nous avons un fichier books.xml :
<bookstore>
   <book category="cooking">
       <title lang="en">Everyday Italian</title>
       <author>Giada De Laurentiis</author>
       <year>2005</year>
       <price>30.00</price>
   </book>
   <book category="children">
       <title lang="en">Harry Potter</title>
       <author>J K. Rowling</author>
       <year>2005</year>
       <price>29.99</price>
   </book>
</bookstore>
Il contient deux livres. Les livres ont un élément tel qu'un titre - <titre>. Et ici, nous pouvons utiliser JavaScript pour obtenir tous les titres de livres de notre fichier XML et afficher le premier d'entre eux sur la console :
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
  myFunction(this);
  }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
  document.getElementById("demo").innerHTML =
  xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
</script>

</body>
</html>
Encore une fois, je recommande de voir comment cet exemple fonctionne en utilisant un bac à sable :) DTD (« définition de type de document ») - vous permet de définir une liste d'éléments autorisés pour une entité dans un fichier XML. Par exemple, nous travaillons sur un site Web de librairie, et toutes les équipes de développement ont convenu que pour l'élément livre, seuls les attributs titre, auteur et année doivent être spécifiés dans les fichiers XML. Mais comment se protéger de l’inattention ? Très facile!
<?xml version="1.0"?>
<!DOCTYPE book [
       <!ELEMENT book (title,author,year)>
       <!ELEMENT title (#PCDATA)>
       <!ELEMENT author (#PCDATA)>
       <!ELEMENT year (#PCDATA)>
       ]>

<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
</book>
Ici, nous avons défini une liste d'attributs valides pour <book>. Essayez d'y ajouter un nouvel élément et vous obtiendrez immédiatement une erreur !
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Erreur! "L'élément mainhero n'est pas autorisé ici" Il existe de nombreux autres standards XML. Vous pouvez vous familiariser avec chacun d'eux et essayer d'approfondir le code sur le site Web de WC3 (section « Normes XML importantes »). Et en général, si vous avez besoin d'informations sur XML, vous pouvez y trouver presque tout :) Eh bien, notre conférence est terminée. Il est temps de se remettre aux tâches ! :) À bientôt!
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION