Почему объявление XML начинается с ‹?xml вместо ‹!xml?

Я думал, что XML — это приложение SGML, и что синтаксис объявления SGML по умолчанию начинается с разделителя "<!".

Основываясь на этом понимании, я не понимаю, как возникает "<?".

Кто-нибудь, пожалуйста, объясните? Спасибо.


person Otosaat    schedule 18.07.2011    source источник
comment
Почему на вопросы трудно ответить. Это зависит от того, имеете ли вы в виду (а) как исторический документ, записано ли в протоколе, почему комитет принял это решение? или (б) можете ли вы придумать какую-либо вескую причину, по которой рациональный человек счел бы это хорошей идеей? Это не одно и то же...   -  person Michael Kay    schedule 18.07.2011


Ответы (1)


<! начинает объявление DOCTYPE, а <? начинает инструкцию обработки. Инструкция обработки <?xml определяется стандартом, чтобы указать, что далее следует XML, указать версию XML и кодировку текста. Он не имеет никакого отношения к фактической структуре документа, как это было бы с объявлением DOCTYPE. Я не уверен, почему объявление DOCTYPE указывается иначе, чем инструкция по обработке, но многие (возможно, большинство) XML-документов в наши дни имеют свою структуру, определенную схемой XML или RelaxNG, и только DTD можно ссылаться из DOCTYPE. Существуют и другие способы использования инструкций обработки; в основном они были введены, чтобы предоставить продавцам боковой вход для их собственных функций. Вероятно, второе наиболее распространенное использование — это ссылка на таблицы стилей XSLT или CSS.

Первоначально XML задумывался как упрощенное подмножество SGML, но с тех пор он сильно изменился. Было бы несправедливо говорить, что XML «является» SGML в каком-либо смысле, просто они связаны историей и генеалогией.

person Daniel Lyons    schedule 18.07.2011
comment
Даниэль, большое спасибо за полезное объяснение. В частности, я очень ценю вашу ссылку на инструкцию по обработке термина. Я нашел следующие две полезные ссылки, чтобы узнать больше об этом: is-thought.co.uk/book/sgml-8.htm#PI en. wikipedia.org/wiki/Processing_Instruction - person Otosaat; 18.07.2011
comment
Я бы сказал, что объявления DOCTYPE и объявления XML — это совершенно разные вещи. Не странно, что они указаны по-разному. - person mzjn; 18.07.2011
comment
Даниэль: Извините за неправильное написание вашего имени выше. :( - person Otosaat; 18.07.2011
comment
@mzjn - я просто хочу сказать, что интересно, что есть два внеполосных механизма, один общий и один специальный, вместо которых мог бы быть один. Я уверен, что есть причины. - person Daniel Lyons; 18.07.2011