JavaRush /Blog Java /Random-FR /Bases XML pour programmeur Java - Partie 1 sur 3
Ярослав
Niveau 40
Днепр

Bases XML pour programmeur Java - Partie 1 sur 3

Publié dans le groupe Random-FR
XML est aujourd’hui un format très populaire et flexible. Chaque programmeur devrait le comprendre, c'est tout simplement indispensable. De nombreuses technologies l’utilisent aujourd’hui activement, et les plus modernes en font partie.
Bases XML pour programmeur Java - Partie 1 sur 3 - 1

Introduction

Bonjour, chers lecteurs de mon article. Je tiens à dire tout de suite qu'il ne s'agit que du premier article de ma série de trois articles. L'objectif principal de toute la série est d'initier chaque lecteur à XML et de lui donner, sinon une explication et une compréhension complètes, du moins une bonne impulsion, en expliquant les points et les choses principaux. Le cycle entier sera pour une seule nomination - « Attention aux détails » , et la division en 3 articles est faite afin de respecter la limite de caractères dans les messages et de diviser une grande quantité de matériel en parties plus petites pour une meilleure compréhension. Le premier article sera consacré au XML lui-même et à ce qu'il est, ainsi qu'à l'un des moyens de créer un schéma pour les fichiers XML - DTD. Pour commencer, je voudrais faire une petite préface pour ceux qui ne sont pas encore familiers avec XML : il n'y a pas lieu d'avoir peur. XML n'est pas très compliqué et doit être compris par tout programmeur, car il s'agit aujourd'hui d'un format de fichier très flexible, efficace et populaire pour stocker une variété d'informations que vous souhaitez. XML est utilisé dans Ant, Maven, Spring. Tout programmeur a besoin de connaissances en XML. Maintenant que vous avez rassemblé force et motivation, commençons à étudier. J'essaierai de présenter tout le matériel aussi simplement que possible, en ne rassemblant que le plus important et sans entrer dans les mauvaises herbes.

XML

Pour une explication plus claire, il serait préférable de visualiser le XML avec un exemple.
<?xml version="1.0" encoding="UTF-8"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee>
                    <name>Maksim</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Ivan</name>
                    <job>Junior Software Developer</job>
                </employee>
                <employee>
                    <name>Franklin</name>
                    <job>Junior Software Developer</job>
                </employee>
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee>
                    <name>Herald</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Adam</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Leroy</name>
                    <job>Junior Software Developer</job>
                </employee>
            </employees>
        </office>
    </offices>
</company>
HTML et XML ont une syntaxe similaire car ils ont un parent commun : SGML. Cependant, en HTML, il n'y a que des balises fixes d'une norme spécifique, tandis qu'en XML, vous pouvez créer vos propres balises, attributs et, en général, faire ce que vous voulez pour stocker les données de la manière qui vous convient. En fait, les fichiers XML peuvent être lus par toute personne connaissant l’anglais. Cet exemple peut être représenté à l’aide d’un arbre. Bases XML pour programmeur Java - Partie 1 sur 3 - 2La racine de l’arbre est Company. C'est aussi l'élément racine (root) dont proviennent tous les autres éléments. Chaque fichier XML ne peut avoir qu'un seul élément racine. Il doit être déclaré après la déclaration du fichier XML (la première ligne de l'exemple) et contenir tous les autres éléments. Un peu sur la déclaration : elle est obligatoire et est nécessaire pour identifier le document comme XML. Il possède trois pseudo-attributs (attributs spéciaux prédéfinis) : version (selon la norme 1.0), encodage (encodage) et autonome (autonomie : si oui et des schémas externes sont connectés au document, alors il y aura une erreur, la valeur par défaut est non). Les éléments sont des entités qui stockent des données à l'aide d'autres éléments et attributs. Les attributs sont des informations supplémentaires sur un élément spécifiées lors de l'ajout d'un élément. Si nous traduisons l'explication dans un champ POO, nous pouvons donner l'exemple suivant : nous avons une voiture, chaque voiture a des caractéristiques (couleur, capacité, marque, etc.) - ce sont des attributs, et il y a des entités qui sont à l'intérieur de la voiture : les portes, les fenêtres, le moteur, le volant sont d'autres éléments. Vous pouvez stocker les propriétés sous forme d'éléments individuels ou d'attributs, selon vos souhaits. Après tout, XML est un format extrêmement flexible pour stocker des informations sur n'importe quoi. Après les explications, il suffit de regarder l’exemple ci-dessus pour que tout se mette en place. Dans l'exemple, nous avons décrit une structure d'entreprise simple : il y a une entreprise qui a un nom et des bureaux, et dans les bureaux il y a des employés. Les éléments Employés et Bureaux sont des éléments wrapper : ils servent à collecter des éléments du même type, en les combinant essentiellement en un seul ensemble pour faciliter le traitement. Le sol et la pièce méritent une attention particulière. Ce sont les attributs du bureau (étage et numéro), autrement dit ses propriétés. Si nous avions un élément « image », alors nous pourrions transférer ses dimensions. Vous remarquerez peut-être que company n'a pas d'attribut name, mais un élément name. Vous pouvez simplement décrire les structures comme vous le souhaitez. Personne ne vous oblige à écrire toutes les propriétés des éléments uniquement dans des attributs ; vous pouvez utiliser uniquement des éléments et y écrire des données. Par exemple, nous pouvons enregistrer le nom et le poste de nos employés sous forme d'attributs :
<?xml version="1.0" encoding="UTF-8"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="Maksim" job="Middle Software Developer">

                </employee>
                <employee name="Ivan" job="Junior Software Developer">

                </employee>
                <employee name="Franklin" job="Junior Software Developer">

                </employee>
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer">

                </employee>
                <employee name="Adam" job="Middle Software Developer">

                </employee>
                <employee name="Leroy" job="Junior Software Developer">

                </employee>
            </employees>
        </office>
    </offices>
</company>
Comme vous pouvez le constater, désormais le nom et le poste de chaque employé sont ses attributs. Et vous pouvez remarquer qu'il n'y a rien à l'intérieur de l'entité employé (tag), tous les éléments employé sont vides. Ensuite, vous pouvez faire de l'employé un élément vide - fermez-le immédiatement après avoir déclaré les attributs. Cela se fait tout simplement, il suffit d'ajouter une barre oblique :
<?xml version="1.0" encoding="UTF-8"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="Maksim" job="Middle Software Developer" />
                <employee name="Ivan" job="Junior Software Developer" />
                <employee name="Franklin" job="Junior Software Developer" />
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer" />
                <employee name="Adam" job="Middle Software Developer" />
                <employee name="Leroy" job="Junior Software Developer" />
            </employees>
        </office>
    </offices>
</company>
Comme vous pouvez le constater, en fermant les éléments vides, nous avons préservé toute l'intégrité de l'information et avons considérablement raccourci l'enregistrement, rendant l'information plus concise et lisible. Pour ajouter un commentaire (texte qui sera ignoré lors de l'analyse d'un fichier) en XML, il existe la syntaxe suivante :
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
Et la dernière construction est CDATA , qui signifie « données de caractère ». Grâce à cette conception, il est possible d'écrire du texte qui ne sera pas interprété comme du balisage XML. Ceci est utile si vous disposez d'une entité dans le fichier XML qui stocke le balisage XML dans les informations. Exemple:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
    <information>
        <![CDATA[<name>Ivan</name><age>26</age>]]>
    </information>
</bean>
Le problème avec XML, c'est que vous pouvez l'étendre comme vous le souhaitez : utilisez vos propres éléments, vos propres attributs et structurez-le comme vous le souhaitez. Vous pouvez utiliser à la fois des attributs et des éléments pour stocker des données (comme indiqué dans l'exemple précédent). Cependant, vous devez comprendre que vous pouvez créer vos propres éléments et attributs à la volée et comme vous le souhaitez, mais que se passe-t-il si vous travaillez sur un projet dans lequel un autre programmeur souhaite déplacer l'élément de nom dans les attributs, et que toute la logique de votre programme est écrit pour que ce nom soit un élément ? Comment pouvez-vous créer vos propres règles sur ce que doivent être les éléments, leurs attributs et d'autres choses, afin de pouvoir valider les fichiers XML et être sûr que les règles deviendront la norme dans votre projet et que personne ne les violera ? Afin d'écrire toutes les règles de votre propre balisage XML, il existe des outils spéciaux. Les plus connus : DTD et XML Schema. Cet article ne parlera que du premier.

DTD

La DTD est créée pour décrire les types de documents. La DTD devient déjà obsolète et est maintenant activement abandonnée dans XML, mais il existe encore de nombreux fichiers XML qui utilisent la DTD et, en général, il est utile de la comprendre. DTD est une technologie de validation de documents XML . Une DTD déclare des règles spécifiques pour un type de document : ses éléments, quels éléments peuvent être à l'intérieur de l'élément, les attributs, s'ils sont obligatoires ou non, le nombre de leurs répétitions, ainsi que les entités. Semblable au XML, une DTD peut être visualisée avec un exemple pour une explication plus claire.
<!-- Объявление возможных элементов -->
<!ELEMENT employee EMPTY>
<!ELEMENT employees (employee+)>
<!ELEMENT office (employees)>
<!ELEMENT offices (office+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (name, offices)>

<!-- Добавление атрибутов для элементов employee и office -->
<!ATTLIST employee
        name CDATA #REQUIRED
        job  CDATA #REQUIRED
>

<!ATTLIST office
        floor CDATA #REQUIRED
        room  CDATA #REQUIRED
>

<!-- Добавление сущностей -->
<!ENTITY M "Maksim">
<!ENTITY I "Ivan">
<!ENTITY F "Franklin">
Ici, nous avons un exemple si simple. Dans cet exemple, nous avons déclaré toute notre hiérarchie à partir de l'exemple XML : employé, employés, bureau, bureaux, nom, société. Pour créer des fichiers DTD, 3 constructions principales sont utilisées pour décrire n'importe quel fichier XML : ELEMENT (pour décrire les éléments), ATTLIST (pour décrire les attributs des éléments) et ENTITY (pour remplacer le texte par des formes abrégées). ELEMENT Utilisé pour décrire un élément. Les éléments pouvant être utilisés dans l'élément décrit sont répertoriés entre parenthèses sous forme de liste. Vous pouvez utiliser des quantificateurs pour indiquer la quantité (ils sont similaires aux quantificateurs des expressions régulières) : +signifie 1+ *signifie 0+ ?signifie 0OU 1 Si aucun quantificateur n'a été ajouté, alors il est supposé qu'il ne devrait y avoir qu'un seul élément. Si nous avions besoin d’un élément parmi un groupe, nous pourrions l’écrire comme ceci :
<!ELEMENT company ((name | offices))>
Ensuite, l'un des éléments serait sélectionné : nom ou fonctions, mais s'il y en avait deux au sein de l'entreprise, alors la validation ne passerait pas. Vous pouvez également remarquer que dans employé il y a le mot EMPTY - cela signifie que l'élément doit être vide. Il y a aussi ANY - tous les éléments. #PCDATA – données texte. ATTLIST Utilisé pour ajouter des attributs aux éléments. Après ATTLIST suit le nom de l'élément souhaité, et après lui un dictionnaire du type « nom d'attribut - type d'attribut », et à la fin vous pouvez ajouter #IMPLIED (facultatif) ou #REQUIRED (obligatoire). CDATA – données texte. Il existe d'autres types, mais ils sont tous en minuscules. ENTITY ENTITY est utilisé pour déclarer les abréviations et le texte qui y sera placé. En fait, on pourra simplement utiliser en XML, à la place du texte intégral, juste le nom de l'entité avec un signe & avant et ; après. Par exemple : pour différencier le balisage HTML des seuls caractères, le crochet angulaire gauche est souvent échappé avec lt ; , il vous suffit de mettre & avant lt. Ensuite nous n’utiliserons pas de balisage, mais simplement le symbole <. Comme vous pouvez le constater, tout est assez simple : vous déclarez des éléments, expliquez quels éléments les éléments déclarés sont capables de contenir, ajoutez des attributs à ces éléments et, si vous le souhaitez, vous pouvez ajouter des entités pour raccourcir certaines entrées. Et là, il faudrait se demander : comment utiliser nos règles dans notre fichier XML ? Après tout, nous avons simplement déclaré les règles, mais nous ne les avons pas utilisées en XML. Il existe deux manières de les utiliser en XML : 1. Incorporation - en écrivant les règles DTD dans le fichier XML lui-même, écrivez simplement l'élément racine après le mot-clé DOCTYPE et placez notre fichier DTD entre crochets.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company [
        <!-- Объявление возможных элементов -->
        <!ELEMENT employee EMPTY>
        <!ELEMENT employees (employee+)>
        <!ELEMENT office (employees)>
        <!ELEMENT offices (office+)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT company (name, offices)>

        <!-- Добавление атрибутов для элементов employee и office -->
        <!ATTLIST employee
        name CDATA #REQUIRED
        job  CDATA #REQUIRED
        >

        <!ATTLIST office
        floor CDATA #REQUIRED
        room  CDATA #REQUIRED
        >

        <!-- Добавление сущностей -->
        <!ENTITY M "Maksim">
        <!ENTITY I "Ivan">
        <!ENTITY F "Franklin">
]>

<company>
    <name>IT-Heaven</name>
    <!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="&M;" job="Middle Software Developer" />
                <employee name="&I;" job="Junior Software Developer" />
                <employee name="&F;" job="Junior Software Developer" />
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer" />
                <employee name="Adam" job="Middle Software Developer" />
                <employee name="Leroy" job="Junior Software Developer" />
            </employees>
        </office>
    </offices>
</company>
2. Importer - nous écrivons toutes nos règles dans un fichier DTD séparé, après quoi dans le fichier XML, nous utilisons la construction DOCTYPE de la première méthode, uniquement au lieu de crochets, vous devez écrire SYSTEM et spécifier un chemin absolu ou relatif vers le emplacement actuel du fichier.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company SYSTEM "dtd_example1.dtd">

<company>
    <name>IT-Heaven</name>
    <!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="&M;" job="Middle Software Developer" />
                <employee name="&I;" job="Junior Software Developer" />
                <employee name="&F;" job="Junior Software Developer" />
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer" />
                <employee name="Adam" job="Middle Software Developer" />
                <employee name="Leroy" job="Junior Software Developer" />
            </employees>
        </office>
    </offices>
</company>
Vous pouvez également utiliser le mot-clé PUBLIC au lieu de SYSTEM, mais il est peu probable que cela vous soit utile. Si vous êtes intéressé, vous pouvez en savoir plus sur ce sujet (et sur SYSTEM également) en détail ici : lien . Désormais, nous ne pouvons plus utiliser d'autres éléments sans les déclarer dans la DTD, et tout XML est soumis à nos règles. Vous pouvez essayer d'écrire ce code dans IntelliJ IDEA dans un fichier séparé avec une extension .xml et essayer d'ajouter de nouveaux éléments ou de supprimer un élément de notre DTD et remarquer comment l'EDI vous indiquera une erreur. Cependant, la DTD a ses inconvénients :
  • Il a sa propre syntaxe, différente de la syntaxe XML.
  • Une DTD n'a pas de vérification du type de données et ne peut contenir que des chaînes.
  • Il n'y a pas d'espace de noms dans une DTD.
À propos du problème de votre propre syntaxe : vous devez comprendre deux syntaxes à la fois : la syntaxe XML et la syntaxe DTD. Ils sont différents et cela peut vous rendre confus. De ce fait, il est également plus difficile de suivre les erreurs dans des fichiers XML volumineux en conjonction avec les mêmes schémas DTD. Si quelque chose ne fonctionne pas pour vous, vous devez vérifier une énorme quantité de texte avec des syntaxes différentes. C'est comme lire deux livres en même temps : en russe et en anglais. Et si votre connaissance d'une langue est pire, alors comprendre le texte sera tout aussi difficile. À propos du problème de la vérification du type de données : les attributs dans les DTD ont différents types, mais ils sont tous, à la base, des représentations sous forme de chaîne de quelque chose, des listes ou des liens. Cependant, on ne peut pas exiger uniquement des chiffres, et surtout pas des chiffres positifs ou négatifs. Et vous pouvez complètement oublier les types d'objets. Le dernier problème sera abordé dans le prochain article, qui sera consacré aux espaces de noms et aux schémas XML, car en discuter ici est inutile. Merci à tous pour votre attention, j'ai fait beaucoup de travail et je continue de le faire pour terminer toute la série d'articles à temps. En gros, je dois juste comprendre les schémas XML et en proposer une explication avec des mots plus clairs pour terminer le 2ème article. La moitié est déjà terminée, vous pouvez donc vous y attendre bientôt. Le dernier article sera entièrement consacré à l'utilisation de fichiers XML à l'aide de Java. Bonne chance à tous et réussite en programmation :) Article suivant : [Concours] Bases XML pour un programmeur Java - Partie 2 sur 3
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION