8 votes

Les noms de balises XML/HTML à l'intérieur des balises fermantes sont-ils vraiment nécessaires ?

Il ne s'agit pas vraiment d'une question de programmation en soi Mais je me demandais pourquoi le nom de la balise est nécessaire dans une balise de fermeture en XML. Par exemple, est-ce que

<a>
    <b>stuff</b>
</a>

Être écrit

<a>
    <b>stuff</>
</>

De sorte que chaque balise de fermeture </> a simplement terminé la dernière balise ouverte ?

Mes questions sont donc les suivantes

  1. Cela fonctionnerait-il (c'est-à-dire y a-t-il des cas particuliers auxquels je n'ai pas pensé et dans lesquels cela serait ambigu ou échouerait) ?
  2. Si cela fonctionnait, pourquoi ne l'ont-ils pas conçu ainsi ?

5voto

Daniel Haley Points 19098

Si cela fonctionnait, pourquoi ne l'ont-ils pas conçu ainsi ?

L'une des raisons est que le SGML/XML est également conçu pour être lisible par l'homme. Votre /a/b est lisible, mais une structure beaucoup plus complexe serait un cauchemar à interpréter.

Cela est particulièrement vrai pour les contenus mixtes (PCDATA et structures d'éléments mélangés).

2voto

Rose Perrone Points 14478

Cela fonctionnerait, mais ce serait terrible de déboguer un problème d'imbrication. Par exemple :

<one><two><nine></><ten></><eight><three></><four>
<five></><six></></>
<seven></>To what element does this text belong?</></></>

Si vous vous assurez que le XML est correctement indenté, le problème de l'imbrication ne se pose pas (vous trouverez ci-dessous le même code avec une indentation correcte). Cependant, comme l'indentation est insignifiante, nous avons besoin d'un autre mécanisme pour que le XML reste lisible par l'homme. Dans cet exemple, l'expression "lisible par l'homme" signifie qu'un humain peut facilement voir quel contenu appartient à quel élément. La solution consiste à nommer l'élément auquel chaque balise fermante fait référence.

<one>
<two>
    <nine>
    </nine>
    <ten>
    </ten>
    <eight>
        <three>
        </>
        <four>
            <five>
            </>
            <six>
            </>
        </>
        <seven>
        </>
        To what element does this text belong?
    </>
</>
</>

Lorsque nous donnons des noms aux balises fermantes, il est clair, même dans un XML mal indenté, que le texte appartient à l'élément <eight> .

<one><two><nine></nine><ten></ten><eight><three></three><four>
<five></five><six></six></four><seven>
</seven>To what element does this text belong?</eight></two></one>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X