Xml версии 1 0 кодирует utf 8, чем открыть

Обновлено: 21.11.2024

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

В книге мы рассматриваем два наиболее важных аспекта SVG-as-XML:

Пространства имен XML, которые должны быть объявлены в вашей разметке с использованием атрибутов xmlns и xmlns:xlink, и должны использоваться в методах DOM с учетом пространства имен, таких как createElementNS() .

Строгий анализ синтаксиса, например, всегда закрытие элементов и заключение атрибутов в кавычки.

Но есть и другие функции XML, которые иногда могут проявляться в файлах SVG.

Хотя это и не требуется, файл SVG может начинаться с объявления XML, указывающего используемую версию XML и кодировку символов. Следующее явно объявляет синтаксис XML по умолчанию (версия 1.0) в файле с набором символов Unicode UTF-8:

Объявление XML требуется только в том случае, если вы используете кодировку символов, отличную от Unicode (технически любую, кроме UTF-8 или UTF-16). Мы всегда используем UTF-8, поэтому мы не часто используем объявление XML. Если используется, объявление всегда должно появляться в первой строке файла.

Вы можете также включить объявление SGML DOCTYPE, но это больше не рекомендуется для SVG. DOCTYPE указывает на определение типа документа формата файла SVG и используется некоторыми средствами проверки и редактирования кода. Однако некоторые из этих инструментов проверки не распознают абсолютно допустимый XML-контент из пространств имен, отличных от SVG.

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

Определения типов документов SGML (файлы DTD) — это машиночитаемые файлы, которые определяют, какие элементы разрешены для этого документа, какие атрибуты они могут иметь, есть ли у них начальный и конечный теги, и если да, то какие другие типы элементов могут быть включенным между ними. Объявление DOCTYPE указывает, какие файлы DTD использовать.

Если вы включаете DOCTYPE , он должен появиться в строке между объявлением XML и начальным , и должен точно соответствовать следующему (за исключением того, что количество пробелов может быть гибким):

Если вы копируете код SVG в другой файл, например в документ HTML 5, не включайте тип документа или объявление XML. Они допустимы только в начале файла.

DOCTYPE и объявление XML являются частью пролога XML, который включает все части файла до корневого элемента ( ).

Пролог XML также может включать комментарии (многие программы добавляют комментарий «создано») и другие инструкции по обработке XML перед открытием .

Как мы обсуждали в главе 3, одной из инструкций по обработке XML, которую вы можете использовать, является ссылка на внешнюю таблицу стилей:

Иногда вы также можете увидеть более длинное объявление DOCTYPE, которое определяет дополнительные объекты XML (такие как &custom; ) для использования в качестве переменных в остальной части кода или даже определения дополнительных элементов и атрибутов.

Файлы Adobe Illustrator SVG иногда используют пользовательские объекты XML для представления пользовательских пространств имен XML Adobe. Начало файла выглядит так (с дополнительными переносами строк):

ПО, поддерживающее XML, получит доступ к атрибуту xmlns:x в файле , и заменит полный URI пространства имен на &ns_extend; объекта и т. д. для всех остальных объектов.

Инструмент оптимизатора SVGO в настоящее время не может обрабатывать файлы этого типа. К сожалению, файл Illustrator, в котором используются эти функции, явно не оптимизирован для Интернета. Вам потребуется либо повторно экспортировать его из Illustrator (используя параметр экспорта для Интернета), либо отредактировать код напрямую, чтобы удалить все пользовательские объекты, а затем оптимизировать с помощью SVGO.

Этот веб-сайт создан и поддерживается Амелией Беллами-Ройдс с использованием материалов, созданных всеми тремя авторами книги.

Просмотрите репозиторий GitHub, чтобы загрузить файлы, предложить исправление или узнать, когда страница обновлялась в последний раз.

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

От Изучения XML:

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

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

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

6 ответов 6

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

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

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

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

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

В полном наборе 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 для обозначения кодировки. В других случаях синтаксический анализатор должен попытаться выяснить кодировку объявления. Поскольку он знает, что объявление начинается с, сделать это намного проще.

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

Получите полный доступ к XML Hacks и более чем 60 000 другим играм с бесплатной 10-дневной пробной версией O'Reilly.

Есть также прямые онлайн-мероприятия, интерактивный контент, материалы для подготовки к сертификации и многое другое.

Прежде чем что-то делать с XML-документом, необходимо понять его основные части. Этот прием исследует наиболее распространенную структуру XML

Этот прием закладывает основу для XML: как он выглядит и как он устроен. В примере 1-1 показан простой документ (start.xml), который содержит некоторые из наиболее распространенных структур XML: объявление XML, комментарий, элементы, атрибуты, пустой элемент и ссылку на символ. start.xml имеет правильный формат, что означает, что он соответствует правилам синтаксиса в спецификации XML. XML-документы должны быть правильно сформированы.

Пример 1-1. start.xml

Декларация XML

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

Как правило, XML-декларация предоставляет три элемента информации о содержащем ее документе: информацию о версии XML; используемая кодировка символов; и является ли документ самостоятельным или опирается на информацию из внешнего источника.

Информация о версии

Объявление кодировки

Отдельное объявление

Необязательная автономная декларация (не показанная в примере 1-1) может сообщить обработчику XML, зависит ли XML-документ от объявлений внешней разметки; т. е. полагается ли он на объявления во внешнем определении типа документа (DTD). DTD определяет содержимое действительных XML-документов. Это объявление может иметь значение yes или no .

Комментарии

Элементы

Легальный или совместимый XML-документ должен иметь хотя бы один элемент. Элемент может иметь либо один тег, называемый пустым элементом, либо два тега: начальный тег и конечный тег с содержимым между ними.

Первый или верхний элемент в XML-документе, например элемент времени в строке 4, называется документом элементом или корневым. элемент. Элемент документа требуется в любом XML-документе. Содержимое элемента time состоит из пяти дочерних элементов: hour , minute , second , meridiem и atomic .

Содержимое элемента включает текст (официально называемый проанализированные символьные данные), другие дочерние элементы или сочетание текста и элементов. Например, 11 — это текстовое содержимое элемента часа. Элементы могут содержать несколько других вещей, но они наиболее распространены с точки зрения содержания.

Элемент atomic в строке 9 в примере 1-1 является примером пустого элемента. Пустые элементы не имеют содержимого; т. е. они состоят из одного тега ( ). Все остальные элементы имеют начальные и конечные теги; например, является начальным тегом и является конечным тегом.

XML-документы являются структурированными документами, и эта структура в основном возникает из отношений родитель-потомок между элементами. В примере 1.1 hour , minute , second , meridiem и atomic являются дочерними элементами time , а time является родителем для hour , minute , second , meridiem и atomic . Глубина элементов может быть намного глубже, чем простые отношения родитель-потомок. Такие элементы называются элементы-предки и элементы-потомки элементы.

Смешанный контент

Документ start.xml в примере 1-1 не содержит смешанного содержимого. Документ mixed.xml в примере 1-2 показывает, как выглядит смешанный контент.

Пример 1-2. смешанный.xml

Элемент времени имеет как текст (например, "Время:"), так и содержимое дочернего элемента (например, часы, минуты и секунды).

Атрибуты

После рассмотрения этой проблемы в течение нескольких лет я пришел к выводу, что это скорее вопрос вкуса, чем что-либо еще. Короткий ответ: делайте то, что работает для вас.

Отсылки к персонажам

Разделы CDATA

При пережевывании символ & в разделе CDATA скрыт от процессора, поэтому он не интерпретируется как разметка, как это было бы в начале ссылки на объект или ссылку на символ.

Теперь вы должны понимать основные компоненты документа XML.

См. также

Изучение XML, Эрик Рэй (O’Reilly)

XML: учебник для начинающих Саймона Сен-Лорана (Hungry Minds, Inc.)

Библия XML 1.1 Эллиота Расти Гарольда (Hungry Minds, Inc.)

Получите XML Hacks прямо сейчас с онлайн-обучением O’Reilly.

Члены O’Reilly проходят онлайн-обучение в режиме реального времени, а также получают книги, видео и цифровой контент от более чем 200 издателей.

Документы XML могут содержать объявление XML, которое, если оно присутствует, должно быть первой конструкцией в документе. Объявление XML состоит из трех пар имя/значение, синтаксически идентичных атрибутам. Эти три атрибута являются обязательным атрибутом версии и необязательными атрибутами кодировки и автономными атрибутами. Порядок этих атрибутов в объявлении XML фиксирован.

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

Для всего XML-документа можно использовать только одну кодировку. Невозможно «переопределить» кодирующую часть пути. Если необходимо представить данные в разных кодировках, следует использовать внешние сущности. Если XML-документ можно прочитать без ссылки на внешние источники, говорят, что он является автономным документом. Такие документы могут быть аннотированы автономным атрибутом со значением yes в объявлении XML. Если XML-документ требует разрешения внешних источников для правильного анализа и/или построения всего дерева данных (например, документ со ссылками на внешние общие сущности), то он не является автономным документом. Такие документы могут быть помечены как standalone='no', но поскольку это значение по умолчанию, такая аннотация редко появляется в XML-документах.

Пример объявлений xml

приоритет объявления xml

Если вы используете XML-объявления, они должны стоять первыми. Объявление xml просто заявляет, что документ является документом xml, и описывает его версию. Это необязательно, но если вы его используете (и по соглашению вы должны это делать, если только вы не работаете с фрагментом документа для включения в другой документ xml), он однозначно должен быть первым оператором в документе xml:

Объявление xml является частью пролога документа, как вы узнаете позже, а не частью экземпляра документа (основной части документа, содержащего данные, с которыми вы работаете). Оно не влияет на порядок или вложенность элементов и есть, по сути. не сам элемент. Следовательно, на него не распространяется правило, согласно которому корневой элемент должен содержать все остальные элементы. Это не исключение из каких-либо правил; это часть правил. Поскольку объявление xml не квалифицируется как элемент, на него не распространяются правила, которым должны соответствовать элементы. Это тоже не инструкция по обработке, хотя и выглядит таковой. Инструкция по обработке передает инструкции другому приложению. Объявление xml этого не делает.

Предыдущая: XML CDATA
Следующая: XML-сущность

В этой статье описывается кодирование XML и методы интерфейса DOM.

Исходная версия продукта: Extensible Markup Language
Исходный номер базы знаний: 275883

Обзор

Одним из основных преимуществ данных Extensible Markup Language (XML) является то, что это независимая платформа. Однако необходимо указать правильную кодировку, чтобы обеспечить правильную передачу данных XML между различными платформами. В официальном документе Как кодировать XML-данные подробно рассматриваются общие вопросы кодирования XML: Как кодировать XML-данные.

В большинстве случаев ошибки кодирования XML возникают из-за различных параметров кодирования по умолчанию для методов и интерфейсов анализатора XML (MSXML). Четкое понимание этих настроек по умолчанию поможет предотвратить ошибки кодирования.

Кодировки XML

MSXML поддерживает все кодировки, поддерживаемые Internet Explorer. Поддержка Internet Explorer зависит от того, какие языковые пакеты установлены на компьютере; эта информация хранится в разделе реестра: HKEY_CLASSES_ROOT\MIME\Database\Charset .

MSXML имеет встроенную поддержку следующих кодировок:

Правильным местом для указания кодировки данных является объявление XML. Например, если данные закодированы по стандарту ISO-8859-1, вы можете указать это следующим образом:

Без этой информации по умолчанию используется кодировка UTF-8 или UTF-16, в зависимости от наличия метки порядка байтов (BOM) UNICODE в начале XML-файла. Если файл начинается со знака порядка следования байтов UNICODE (0xFF 0xFE) или (0xFE 0xFF), считается, что документ имеет кодировку UTF-16; в противном случае это UTF-8. Метод Save интерфейса IXMLDOMDocument поддерживает исходную кодировку документа. По умолчанию для этого метода используется кодировка UTF-8.

Ошибки MSXML DOM

В текстовом содержимом обнаружен недопустимый символ.

Переключение с текущей кодировки на указанную кодировку не поддерживается.

При использовании метода загрузки интерфейса IXMLDOMDocument эти ошибки обычно возникают при следующих условиях:

Кодировка не указана, в начале XML-файла не найдена метка порядка следования байтов, а данные содержат специальные символы

Указанная кодировка не соответствует фактической кодировке данных XML. Хорошей практикой является всегда указывать правильную кодировку внутри объявления XML, а не принимать кодировку по умолчанию.

В версиях синтаксического анализатора MSXML 2.5, 2.5 SP1 и 2.6 метод loadXML IXMLDOMDocument может загружать только данные в кодировке UTF-16 или UCS-2. Любая попытка загрузить XML-данные, закодированные в другом формате кодирования, приводит к следующей ошибке:

Переключиться с текущей кодировки на указанную кодировку не поддерживается. С выпуском MSXML 3.0 (Msxml3.dll) это ограничение снято, и следующий код выполняется без ошибок:

Свойство xml интерфейса IXMLDOMDocument записывает XML-данные в кодировке UTF-16, но без отметки порядка байтов в начале. Это может привести к проблемам с кодировкой.

Вы также можете получить эти ошибки при вызове метода transformNode интерфейса IXMLDOMNode с файлом XSL или XSLT, в котором информация о кодировке XML указана следующим образом:

Метод transformNode возвращает BSTR, который по определению представляет собой данные в кодировке UTF-16. Лучший способ сохранить кодировку — вызвать метод transformNodeToObject и сохранить результаты в потоке или в новом XML-документе, а затем сохранить его.

Читайте также: