Действительно ли нужны имена тегов XML / HTML внутри закрывающих тегов? - PullRequest
7 голосов
/ 22 июля 2011

Это на самом деле не вопрос программирования как таковой , но мне было интересно, почему имя тега требуется в закрывающем теге в XML.Например, нельзя

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

быть записанным

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

, чтобы каждый закрывающий тег </> просто завершал последний открытый тег?

Итак, мои вопросы

  1. Будет ли это работать (то есть, есть ли какие-то угловые случаи, о которых я не думаю, в которых это было бы неоднозначно / неудачно)?
  2. Если это сработает, то почему?«Они» спроектировали это так?

Ответы [ 2 ]

5 голосов
/ 22 июля 2011

Если это сработает, почему «они» не спроектировали это таким образом?

Одной из причин является то, что SGML / XML также разработаны для удобства чтения человеком. Ваш /a/b пример читабелен, но гораздо более сложная структура была бы кошмаром для интерпретации.

Это особенно верно для смешанного контента (PCDATA и структура элементов смешаны).

2 голосов
/ 28 мая 2012

Это сработало бы, но было бы ужасно отладить проблему с вложенностью. Например:

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

Если вы убедитесь, что XML имеет правильные отступы, проблема с вложением не является проблемой (ниже приведен тот же код с правильными отступами. Тем не менее, поскольку отступы незначительны, нам нужен еще один механизм, чтобы сделать XML читаемым человеком. в этом примере человекочитаемый означает, что человек может легко увидеть, какой контент принадлежит какому элементу. Решение состоит в том, чтобы назвать, к какому элементу относится каждый закрывающий тег.

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

Когда мы присваиваем имена закрывающим тегам, даже в неправильно с отступом XML видно, что текст принадлежит элементу <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>
...