Значение - ‹?xml version=1.0 encoding=utf-8?›

Я новичок в XML, и я пытаюсь понять основы. Я прочитал строку ниже в «Изучение XML», но для меня это все еще не ясно. Может ли кто-нибудь указать мне книгу или веб-сайт, который ясно объясняет эти основы?

Из раздела Изучение XML:

Объявление XML описывает некоторые из наиболее общих свойств документа, сообщая обработчику XML, что для интерпретации этого документа ему нужен синтаксический анализатор XML.

Что это значит?

Я понимаю часть xml version - и doc, и пользователь doc должны «разговаривать» в одной и той же версии XML. А как насчет части encoding? Зачем это нужно?


person XML Boy    schedule 06.12.2012    source источник
comment
w3.org/TR/xml   -  person hakre    schedule 16.10.2013
comment
Возможный дубликат Какая польза от "кодировки" в заголовке XML ?   -  person Jonathan Leffler    schedule 06.01.2016


Ответы (6)


Чтобы понять атрибут «кодировка», вы должны понимать разницу между байтами и символами.

Думайте о байтах как о числах от 0 до 255, тогда как символы — это такие вещи, как «a», «1» и «Ä». Набор всех доступных символов называется набором символов.

Каждый символ имеет последовательность из одного или нескольких байтов, которые используются для его представления; однако точное количество и значение байтов зависит от используемой кодировки, а существует множество различных кодировок.

Большинство кодировок основаны на старом наборе символов и кодировке под названием ASCII, которая представляет собой один байт на символ (фактически, только 7 бит) и содержит 128 символов, включая множество общих символов, используемых в американском английском.

Например, вот 6 символов в наборе символов ASCII, которые представлены значениями от 60 до 65.

Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║  Character   ║
╠══════╬══════════════║
║  60  ║      <       ║
║  61  ║      =       ║
║  62  ║      >       ║
║  63  ║      ?       ║
║  64  ║      @       ║
║  65  ║      A       ║
╚══════╩══════════════╝

В полном наборе ASCII наименьшее используемое значение равно нулю, а максимальное — 127 (оба являются скрытыми управляющими символами).

Однако, как только вам понадобится больше символов, чем обеспечивает базовый ASCII (например, буквы с диакритическими знаками, символы валюты, графические символы и т. д.), ASCII не подходит, и вам нужно что-то более обширное. Вам нужно больше символов (другой набор символов) и вам нужна другая кодировка, так как 128 символов недостаточно для размещения всех символов. Некоторые кодировки предлагают один байт (256 символов) или до шести байтов.

Со временем было создано множество кодировок. В мире Windows есть CP1252 или ISO-8859-1, тогда как пользователи Linux предпочитают UTF-8. Java изначально использует UTF-16.

Одна последовательность значений байтов для символа в одной кодировке может соответствовать совершенно другому символу в другой кодировке или даже может быть недействительной.

Например, в ISO 8859-1 â представлен одним байтом значения 226, тогда как в UTF-8 это два байта: 195, 162. Однако в ISO 8859-1 195, 162 будет состоять из двух символов: Ã, ¢.

Думайте о XML не как о последовательности символов, а как о последовательности байтов.

Представьте, что система, получающая XML, видит байты 195, 162. Откуда он знает, что это за персонажи?

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

Поскольку большинство распространенных кодировок совместимы с ASCII, что касается основных буквенных символов и символов, в этих случаях само объявление может обойтись без использования только символов ASCII, чтобы сказать, что такое кодировка. В других случаях синтаксический анализатор должен попытаться выяснить кодировку объявления. Поскольку он знает, что объявление начинается с <?xml, сделать это намного проще.

Наконец, атрибут version указывает версию XML, которых на данный момент существует две (см. версии XML в Википедии). Между версиями есть небольшие различия, поэтому синтаксический анализатор XML должен знать, с чем он имеет дело. В большинстве случаев (во всяком случае, для англоговорящих) достаточно версии 1.0.

person rghome    schedule 10.12.2014
comment
Сам заголовок использует кодировку ASCII: я думаю, вы имеете в виду объявление XML. Он закодирован, как и остальная часть документа; UTF-16 или что-то еще. Процессор XML может сделать несколько попыток, пока не сможет прочитать спецификацию кодирования. - person Tom Blodget; 11.12.2014
comment
У меня сложилось впечатление, что преамбула/пролог должны быть закодированы в UTF-8, и это говорит синтаксическому анализатору, как преобразовать оставшиеся байты (фактический XML-документ) в правильную кодировку. Опять неправильно! :-) - person Kelly Beard; 04.08.2016
comment
Вот рекомендуемое чтение: joelonsoftware.com/2003/10/08/ - person Sudip Bhandari; 25.05.2017

Объявление XML требуется не во всех XML-документах; однако авторам документов XHTML настоятельно рекомендуется использовать объявления XML во всех своих документах. Такое объявление требуется, когда кодировка символов документа отличается от используемой по умолчанию UTF-8 или UTF-16, и никакая кодировка не была определена протоколом более высокого уровня. Вот пример документа XHTML. В этом примере включено объявление XML.

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Virtual Library</title>
  </head>
  <body>
    <p>Moved to <a href="http://example.org/">example.org</a>.</p>
 </body>
</html>

См. стандарты W3 для XML.

person Pavan    schedule 06.12.2012
comment
что xml ссылается на xhtml. Вы имели в виду ссылку на xml w3.org/TR/xml или назовите ссылку xhtml? - person jrwren; 12.06.2013
comment
Xhtml относится к документации xml. Объявление типа документа не требуется для правильно сформированного xml. - person xvan; 15.11.2016
comment
Пожалуйста, обратитесь к стандартам W3 для XML. IOW, прочтите faqing faq, который представляет собой длинный и длинный документ. Почему люди не могут просто объяснить, что такое ? есть и зачем оно??? - person Blessed Geek; 08.01.2017

Это необязательная преамбула XML.

  • version="1.0" означает, что это стандарт XML, которому соответствует этот файл
  • encoding="utf-8" означает, что файл закодирован с использованием кодировки Unicode UTF-8.
person Oded    schedule 06.12.2012

Объявление кодировки указывает, какая кодировка используется для представления символов в документе.

Подробнее о декларации XML здесь: http://msdn.microsoft.com/en-us/library/ms256048.aspx

person robasta    schedule 06.12.2012

Может ли кто-нибудь указать мне книгу или веб-сайт, который ясно объясняет эти основы?

Вы можете ознакомиться с этим учебником по XML с примерами.

Но как насчет части кодирования? Почему это необходимо?

W3C предоставляет объяснение кодирования:

«Набор символов документа для XML и HTML 4.0 — это Unicode (также известный как ISO 10646). Это означает, что HTML-браузеры и процессоры XML должны вести себя так, как если бы они использовали Unicode для внутреннего использования. Но это не означает, что документы должны передаваться в Unicode. Пока клиент и сервер согласовывают кодировку, они могут использовать любую кодировку, которую можно преобразовать в Unicode..."

person O.Badr    schedule 20.07.2014

Объявление XML в карте документа состоит из следующего:

The version number, ?xml version="1.0"?. 

Это обязательно. Хотя это число может измениться для будущих версий XML, текущая версия — 1.0.

Декларация кодировки,

encoding="UTF-8"?

Это необязательно. Если используется, объявление кодировки должно появиться сразу после информации о версии в объявлении XML и должно содержать значение, представляющее существующую кодировку символов.

person kshama singh    schedule 27.04.2013