- Введение в xml¶
- Описание типов документов: языки схем
- Xml-файл: что это такое
- Excel
- Notepad
- Xmlgrid
- Визуализация без использования стилей css
- Где используются файлы .xml
- Действительный документ. проверяющие и непроверяющие процессоры
- Как открыть файл xml на телефоне android
- Кодировки¶
- Литература
- Объявление xml
- Объявление типа документа
- Особенности языка
- Поиск информации в xml файлах (xpath)¶
- Понимание xml
- Программы для открытия xml
- Решение проблемы неоднозначности разметки
- С помощью браузера
- Символы разметки
- Стандартный «блокнот»
- Сущности¶
- Физическая и логическая структуры документа
- Физическая структура
- Чтение xml: три варианта api
- Эффективность использования xml
- Язык xml
Введение в xml¶
XML ( англ. eXtensible Markup Language) — расширяемый язык разметки,
предназначенный для хранения и передачи данных.
Простейший XML-документ выглядит следующим образом:
Первая строка — это XML декларация. Здесь определяется версия XML (1.0) и кодировка файла. На следующей строке описывается корневой элемент документа <book> (открывающий тег).
Следующие 4 строки описывают дочерние элементы корневого элемента ( title, author, year, price).
Документ XML состоит из элементов (elements). Элемент начинается открывающим тегом (start-tag) в угловых скобках, затем идет содержимое (content) элемента, после него записывается закрывающий тег (end-teg) в угловых скобках.
Информация, заключенная между тегами, называется содержимым или значением элемента: <author>ErikT.Ray</author>. Т.е. элемент author принимает значение ErikT.Ray. Элементы могут вообще не принимать значения.
Элементы могут содержать атрибуты, так, например, открывающий тег <titlelang=»en»> имеет атрибут lang, который принимает значение en. Значения атрибутов заключаются в кавычки (двойные или ординарные).
Некоторые элементы, не содержащие значений, допустимо записывать без закрывающего тега. В таком случае символ / ставится в конце открывающего тега:
Описание типов документов: языки схем
Для описания типов документов используются языки схем (англ. schema language).
Поскольку XML является подмножеством языка SGML, то он унаследовал разработанный для SGML язык Document Type Definition (DTD).
Xml-файл: что это такое
Аббревиатура XML означает Extensible Markup Language, или в переводе Расширяемый Язык Разметки. XML и HTML в чем-то похоже, ведь они оба являются языками разметки. Однако созданы они для разных целей, так HTML – это разметка для контента веб-страниц, XML – это разметка для структурирования данных.
XML – это один из самых популярных форматов для передачи данных от одних систем к другим. Хотя сейчас появились новые усовершенствованные языки разметки для организации и передачи данных (тот же XHTML), все же формат .xml имеет большое влияние. Во-первых, его по-прежнему активно используют, а во-вторых, он лег в основу таких форматов, как RSS или SVG.
Excel
Если данные документа представлены в виде таблицы, используйте другую программу из пакета Microsoft Office – инструмент Excel.
Открыть документ в Excel можно таким же образом, как и в Word. Кликнуть по файлу правой клавишей, а затем в списке «Открыть с помощью» выбрать Excel.
Если Excel в списке не оказалось, используйте другой метод запуска:
- Если у вас Windows 10, нажмите на иконку в виде лупы справа от кнопки «Пуск». Вбейте в поисковую строку слово «excel».
- В верхней области панели появятся результаты поиска – нажмите на «Microsoft Excel», чтобы запустить программу.
- В интерфейсе приложения нажмите на «Файл». Выберите пункт «Открыть».
- В «Проводнике Windows» найдите документ xml. Выделите его левой кнопкой мыши и нажмите «Открыть».
- Выберите способ открытия файла, например, XML-таблица. Нажмите на «ОК».
- Подождите, пока загрузится таблица. Если она большая, процесс займет некоторое время.
Notepad
В NotePad можно читать и редактировать готовые xml-документы, а также создавать новые. Приложение также работает с другими форматами веб-файлов, например, с YML.
При установке программы можно выбрать русский язык интерфейса. Плюс NotePad в том, что она выделяет корневую структуру кода, что упрощает работу с документом. В «Блокноте», к примеру, теги идут чуть ли не сплошным текстом.
Как открыть XML-файл в NotePad :
- Запустите приложение и нажмите на раздел «File» («Файл»). В меню выберите «Open» («Открыть»).
- Либо сразу после запуска программы зажмите комбинации клавиш Ctrl O. Также можно нажать на вторую иконку «Open» на панели инструментов, которая находится чуть ниже.
- В «Проводнике Windows» найдите документ xml. Выберите его левой кнопкой мыши и нажмите на «Открыть».
- Подождите, пока загрузится файл со структурой кода.
Xmlgrid
Сервис простой и функциональный. Здесь можно создавать свои файлы xml, редактировать готовые документы. Документ можно загрузить двумя способами: вставить ссылку на файл в интернете либо загрузить физический документ с жесткого диска ПК.
Интерфейс у сервиса на английском языке, но разобраться в нем сможет каждый:
- Откройте веб-сервис. Нажмите на «Open File», если документ находится на жестком диске вашего ПК. В «Проводнике Windows» найдите файл, выделите его левой кнопкой мыши – нажмите «Открыть».
- Кликните «Submit», чтобы система начала загрузку файла. Подождите некоторое время, пока она завершится.
- Если у вас есть ссылка на файл в интернете, кликните по «By URL». Вставьте скопированную ссылку в поле и нажмите «Submit».
- Подождите, пока откроется структура файла (список главных веток).
- Чтобы изменить название ветки, просто нажмите на ее название. Включится режим редактирования: удалите старую надпись и введите новую.
- Чтобы отредактировать текст, откройте ветку, в которой он находится. Для этого нажмите на стрелку слева от ее названия. Теперь выберите левой кнопкой синее поле для редактирования.
- Выберите пункт «Edit» в контекстном меню.
- Введите нужный текст в синее поле.
- Чтобы увидеть результат редактирования (структуру текста в целом), нажмите на стрелку над таблицей.
- В меню выберите «Show XML Source Code».
- Подождите, пока откроется дополнительное окно с текстом и тегами. Чтобы закрыть окно, нажмите на крестик в правом верхнем углу.
- Когда закончите редактирование, нажмите на иконку «Save» справа от кнопок «Validate» и «Textview». Выберите папку на жестком диске для сохранения файла.
Визуализация без использования стилей css
Без использования CSS или XSL XML-документ отображается как простой текст в большинстве веб-браузеров. Некоторые браузеры, такие как Internet Explorer, Mozilla Firefox и Opera (встроенный инструмент Opera Dragonfly) отображают структуру документа в виде дерева, позволяя сворачивать и разворачивать узлы с помощью нажатий клавиши мыши.
Где используются файлы .xml
Применения этих файлов очень широко. Часто они используются для работы приложений, программ, сложных документов или веб-сайтов.
Хороший пример – парсер. Здесь XML содержит информацию о структуре другого документа, чтобы корректно передать данные другому приложению, программе или сайту. То есть по сути файл .xml выполняет роль связующего моста.
Еще один пример – создание выписок или справок. Здесь XML–файл подтягивает различную информацию из базы данных, чтобы сформировать нужный отчет. В жизни вы можете встретить такой отчет, например, при получении кадастровой выписки из Росреестра.
Действительный документ. проверяющие и непроверяющие процессоры
Документ является действительным, если с ним связано определение типа документа и если этот документ отвечает представленным в определении типа документа ограничениям.
XML-процессоры делятся на два класса: проверяющие и непроверяющие.
Проверяющие процессоры проверяют действительность документа и должны сообщать (по выбору пользователя) о нарушении ограничений, сформулированных в определении типа документа.
Непроверяющие процессоры не проверяют действительность документа, но обязанности по предварительной обработке документа, упомянутые выше, остаются за ними.
Как открыть файл xml на телефоне android
Как правило, смартфоны iPhone и Android уже имеют встроенные текстовые редакторы. Поэтому, кликнув на файл, гаджет самостоятельно откроет вам файл .xml нужным приложением. Однако после перепрошивки на телефоне могут остаться только основные приложения. Обычно это случается именно с Андроидами, поэтому о них мы и говорим.
Чтобы открыть и отредактировать документ вам нужно соответствующее приложение. Для этого зайдите в магазин приложений, которым вы пользуетесь, например, Google Play, Samsung Apps или HUAWEI AppGallery. Далее в строке поиска начните набирать XML…, а далее Viewer (если вы хотите просмотреть документ) или Editor (если хотите редактировать его).
Большинство бесплатных программ умеют редактировать только простейшие документы с форматом юникода utf-8. Для более сложных задач придется покупать подписку на платные приложения.
Кодировки¶
И еще один важный момент, который стоит рассмотреть — кодировки. Существует множество кодировок, о них подробнее можно прочитать в статье Набор
символов.
Самыми распространенными кириллическими кодировками являются Windows-1251 и UTF-8. Последняя является одним из стандартов, но большая часть ФНС отчетности имеет кодировку Windows-1251.
В XML файле кодировка объявляется в декларации:
Часто можно столкнуться с ситуацией, когда текстовый редаткор некорректно распознает кодировку и отображает кракозябры. В такой случае, необходимо выбрать кодировку вручную, для этого выполните:
Литература
- Дэвид Хантер, Джефф Рафтер, Джо Фаусетт, Эрик ван дер Влист, и др. XML. Работа с XML, 4-е издание = Beginning XML, 4th Edition. — М.: «Диалектика», 2009. — 1344 с. — ISBN 978-5-8459-1533-7.
- Дэвид Хантер, Джефф Рафтер и др. XML. Базовый курс = Beginning XML. — М.: Вильямс, 2009. — 1344 с. — ISBN 978-5-8459-1533-7.
- Роберт Тейбор. Реализация XML Web-служб на платформе Microsoft .NET = Microsoft .NET XML Web Services. — М.: Вильямс, 2002. — 464 с. — ISBN 0-672-32088-6.
Объявление xml
Объявление XML указывает версию языка, на которой написан документ. Поскольку интерпретация содержимого документа зависит от версии языка, то Спецификация предписывает начинать документ с объявления XML. В первой (1.0) версии языка использование объявления не было обязательным, в последующих версиях оно обязательно. Таким образом, версия языка определяется из объявления, и если объявление отсутствует, то принимается версия 1.0.
Кроме версии XML объявление может также содержать информацию о кодировке документа и «оставаться ли документу со своим собственным DTD, или с подключённым».
Пример:
или:
Во всех этих примерах отсутствовал атрибут «standalone», который как раз и определяет, подключить ли документу описания разметки извне. По умолчанию он равен «no»:
если XML-документ ссылается на другие DTD-файлы, которые описывают, что документ может содержать, вы должны указать standalone=»no»
если XML-документ не ссылается на другие файлы и будет пользоваться своим DTD, вы должны указать standalone=»yes»
Объявление типа документа
Для объявления типа документа существует специальная инструкция !DOCTYPE. Она позволяет задать при помощи языка DTD, какие в документ входят элементы, каковы их атрибуты, какие сущности могут использоваться и кое-что ещё.
Например, вот корректный документ:
В нём есть корневой элемент <greeting>Hello, world!</greeting>, и с логической точки зрения документ существует. Однако он недействителен (англ. not valid)[8].
При помощи Объявления типа документа (DTD) возможно описывать его содержание и логическую структуру, а также связывать с определённым элементом пару «имя — значение».
Вот как выглядит пролог в записи Бэкуса — Наура[9]:
prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' VersionInfo ::= S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"') Eq ::= S? '=' S? VersionNum ::= '1.' [0-9] Misc ::= Comment | PI | S doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>' DeclSep ::= PEReference | S intSubset ::= (markupdecl | DeclSep)* markupdecl ::= elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment extSubset ::= TextDecl? extSubsetDecl extSubsetDecl ::= ( markupdecl | conditionalSect | DeclSep)*
Особенности языка
Обеспечить открытие файлов xml универсальными средствами, без использования дополнительных инструментов, позволяет принцип кодировки Юникод (UTF-8 и UTF-16). Благодаря этому документ доступен для ознакомления, в нём несложно разобраться с символами, содержанием прописанных инструкций и последовательностью запускаемых событий.
Язык разметки отличается гибкостью и легко подстраивается под нужды пользователя. Главное — знать и соблюдать основные правила. Начало документа xml, его первая строка должны содержать обязательную конструкцию, указывающую на версию xml, принцип кодировки и подключаемые для этого библиотеки.
Поиск информации в xml файлах (xpath)¶
XPath ( англ. XML Path Language) — язык запросов к элементам
XML-документа. XPath расширяет возможности работы с XML.
XML имеет древовидную структуру. В документе всегда имеется корневой
элемент (инструкция <?xmlversion=”1.0”?> к дереву отношения не имеет).
У элемента дерева всегда существуют потомки и предки, кроме корневого
элемента, у которого предков нет, а также тупиковых элементов (листьев
дерева), у которых нет потомков.
Это очень похоже на организацию каталогов в файловой системе, и строки
XPath, фактически, — пути к «файлам» — элементам. Рассмотрим пример
списка книг:
XPath запрос /bookstore/book/price вернет следующий результат:
Сокращенная форма этого запроса выглядит так: //price.
С помощью XPath запросов можно искать информацию по атрибутам. Например,
можно найти информацию о книге на итальянском языке: //title[@lang=»it»] вернет <titlelang=»it»>EverydayItalian</title>.
Чтобы получить больше информации, необходимо модифицировать запрос //book[title[@lang=»it»]] вернет:
В приведенной ниже таблице представлены некоторые выражения XPath и
результат их работы:
Понимание xml
Узнайте, как Расширяемый язык разметки (Extensible Markup Language — XML) облегчает универсальный доступ к данным. XML — основанный на Unicode метаязык: язык для описания языков разметки. Он не привязан ни к одному языку программирования, операционной системе или поставщику программного обеспечения. XML обеспечивает доступ к огромному количеству технологий по манипулированию, структурированию, трансформированию и запрашиванию данных.
Расширяемый язык разметки (XML) изначально был задуман как язык для описания новых форматов документов World Wide Web. XML происходит от Стандартного обобщенного языка разметки (Standard Generalized Markup Language — SGML) и может считаться метаязыком: языком для определения языков разметки. SGML и XML — это ориентированные на текст форматы, которые обеспечивают механизмы описания структур документов с помощью тэгов разметки (слов, взятых в угловые скобки ‘<‘ и ‘>’). Web-разработчики могут заметить некоторую схожесть между HTML и XML, обусловленную тем фактом, что они оба происходят от SGML.
Поскольку применение XML возросло, сейчас общепринято считать, что XML полезен не только при описании новых форматов документов для Web, но также подходит для описания структурированных данных. Примеры структурированных данных включают информацию, которая обычно содержится в крупноформатных таблицах, файлах конфигурации программы и сетевых протоколах.
XML является предпочтительным для существовавших ранее форматов данных, потому что XML может запросто представить и табличные данные (такие как реляционные данные из базы данных или больших таблиц), и псевдоструктурированные данные (такие как Web-страницы или деловые документы). Популярные ранние форматы, такие как файлы с разделяемыми запятой значениями (CSV), или подходят для табличных данных и плохо описывают псевдоструктурированные данные, или, как RTF, слишком специализированы для псевдоструктурированных текстовых документов. Это привело к широкому распространению XML как языка для обмена информацией.
Кроме способности представлять и структурированные, и псевдоструктурированные данные, XML имеет несколько характеристик, которые обусловили его широкое использование в качестве формата представления данных. XML — расширяемый, плотформо-независимый и поддерживает локализацию, т.к. полностью совместим с Unicode. Тот факт, что XML — текстовый формат, означает, что при возникновении необходимости XML-документы можно читать и редактировать, используя стандартные инструменты редактирования текстов.
Расширяемость XML проявляется многими способами. Прежде всего, в отличие от HTML, у него нет фиксированного словаря. С XML каждый может определить специальные словари для конкретных приложений или различных отраслей промышленности. Во-вторых, приложения, обрабатывающие или использующие форматы XML, более устойчивы к изменениям в структуре предлагаемого им XML, чем приложения, которые используют другие форматы. Например, приложение, которое зависит от обработки элемента <Customer> с атрибутом customer-id, обычно не должно прерываться, если другой атрибут, такой как last-purchase-date, был добавлен в элемент <Customer>. Такая гибкость несвойственна другим форматам данных и является существенным преимуществом использования XML.
XML не привязан ни к одному языку программирования, операционной системе или поставщику программного обеспечения. Кстати, создавать или потреблять XML, используя различные языки программирования — слишком прямолинейно. Независимость от платформ делает XML очень полезным в качестве средства достижения возможности взаимодействовать между различными платформами программирования и операционными системами.
Преимущества представления данных в виде XML были признаны многими и привели к распространению XML-источников данных. Деловые документы, базы данных и межделовое общение — все это примеры информационных источников, которые переходят или перешли к использованию XML как формата представления. Такие продукты Microsoft как Microsoft Office®, Microsoft SQL Server™ и Microsoft .NET Framework дают возможность конечным пользователям и разработчикам создавать и использовать документы, сетевые сообщения и другие данные в виде XML.
Как было упомянуто ранее, рекомендация W3C XML 1.0 описывает текстовый формат для описания структурированных и псевдоструктурированных данных, используя синтаксис, подобный HTML.
И HTML, и XML документы состоят из элементов, каждый из которых включает «начальный тэг» (<order>), «конечный тэг» (</order>) и информацию, заключенную между этими двумя тэгами (которая называется содержимым элемента). Элементы могут быть аннотированы атрибутами, содержащими метаданные об элементе и его содержимом.
Однако между HTML и XML есть существенные отличия. XML чувствителен к регистру, в то время как HTML — нет. Это значит, что в XML начальные тэги <Table> и <table> различны, тогда как в HTML — это одно и то же. Другое различие между HTML и XML в том, что XML представляет концепцию правильного построения. Правила построения XML устраняют некоторую неопределенность, присущую обработке таких языков разметки как HTML, вводя такие постулаты, как то, что все значения атрибутов должны быть заключены в кавычки, и что у всех элементов должны быть или начальный и конечный тэги, или явное указание того, что это пустые элементы. Краткое описание правил построения дается в XML FAQ в разделе D.2.
Самое существенное различие между HTML и XML в том, что в HTML есть предопределенные элементы и атрибуты, поведение которых предопределено, в то время как в XML такого нет. Вместо этого, авторы документа могут создавать собственные XML-словари, предназначенные именно для их приложения или деловых нужд. В настоящее время существуют XML-словари для огромного количества отраслей промышленности и приложений: от финансовых картотек (XBRL) и финансовых операций (FpML) до Web-документов (XHTML) и сетевых протоколов (SOAP). Отсутствие предопределенных элементов и атрибутов, которые определяют, как формируется или отображается XML-документ, дает возможность авторам сосредоточиться на создании документов, которые содержат только существенную семантическую информацию в их конкретной предметной области. Отделение содержимого от представления, ставшее возможным с XML-словарями, существенно увеличивает возможности повторного использования информации и перенацеливания содержимого.
Ниже приведен пример XML-документа, который представляет заказ покупателя в магазине музыкальных CD. На что надо обратить внимание — это то, как просто документ представляет и строго структурированные данные, которые описывают информацию о компакт дисках, и псевдоструктурированные данные, содержащие специальные инструкции и комментарии по определенному покупателю.
Документ начинается с необязательного описания XML, в котором указывается, какая версия XML и кодирование символом используются. Далее следует инструкция обработки xml-stylesheet, которая используется для связывания таблицы стилей, содержащей инструкции по форматированию, с XML-документом. Таблица стилей используется для формирования привлекательного внешнего вида документа в пользовательских приложениях, таких как Web-браузеры. Инструкции обработки обычно используются для введения информации о приложении в XML-документ. Например, большинство приложений, обрабатывающих содержимое приведенного выше документа, вероятно, проигнорируют инструкцию обработки xml-stylesheet. С другой стороны, приложения, используемые для отображения XML-документа, такие как Web-браузер, могли бы использовать информацию инструкции обработки для того, чтобы определить, где располагается таблица стилей, содержащая специальные инструкции для отображения документа.
Сочетание тех фактов, что синтаксис XML 1.0 — текстовый и слишком простой для синтаксического разбора, привело к использованию XML как нового формата обмена данными в случаях, когда требуется возможность межплатформенного взаимодействия. Широкая доступность синтаксических анализаторов XML для большинства популярных операционных систем упрощает для неравноправных сторон на разных платформах стандартизацию XML как формата преобразования в случае необходимости совместного использования информации.
То, что XML основан на Unicode, делает его подходящим для совместного использования информации через глобальные сети, такие как World Wide Web.
Хотя возможность взаимодействовать и расширяемость платформ, получаемые при использовании текстового синтаксиса XML, и являются прекрасным примером выгоды от применения XML как формата представления данных, это всего лишь одно из преимуществ, которые XML предоставляет разработчикам приложений. Другое важное преимущество от использования XML — он предоставляет единый подход к множеству технологий по манипулированию, структурированию, преобразованию и запрашиванию данных.
Рекомендация информационного множества W3C XML (W3C XML Information Set recommendation) описывает абстрактное представление XML-документа. XML Infoset, главным образом, изначально выступает в роли набора определений, используемых XML-технологиями для формального описания того, с какими частями XML-документа они работают. В терминах XML Infoset описаны несколько W3C XML-технологий, включая SOAP 1.2, XML Schema и XQuery.
XML Infoset — древовидное иерархическое представление XML-документа. Информационное множество XML-документа состоит из ряда единиц информации, которые являются абстрактным представлением компонентов XML-документа. Существуют единицы информации, представляющие документ, его элементы, атрибуты, инструкции обработки, комментарии, символы, нотации, пространства имен, неразбираемые синтаксическим анализатором сущности, неразвернутые ссылки на сущности и объявление типа документа. XML Infoset — официальная попытка определить то, что должно считаться важной информацией в XML-документе. Например, Infoset не делает различий между двумя формами пустого элемента. Таким образом, следующее
согласно XML Infoset, считается эквивалентным. Аналогично, не имеет значения и тип кавычек, используемых для атрибутов; таким образом, элементы
согласно XML Infoset, эквивалентны. Список аспектов синтаксиса XML 1.0, которые не рассматриваются XML Infoset, приведен в Приложении D рекомендации Информационного множества W3C XML.
Рекомендация Информационного множества W3C XML описывает концепцию синтетических информационных множеств, которые создаются средствами, отличными от синтаксического разбора текстового XML-документа. Синтетические информационные множества подготавливают почву для обработки с помощью XML-технологий не-XML-данных, которые могут быть преобразованы в XML Infoset. Примером обработки синтетического информационного множества является ObjectXPathNavigator (http://msdn.microsoft.com/library/en-us/dnexxml/html/xml03172003.asp), который обеспечивает возможность запрашивать объекты в .NET Framework, используя XPath, или преобразовывать их, используя XSLT.
Язык XML-схемы используется для описания структуры и содержимого XML-документа. Например, схема может использоваться для определения документа, состоящего из одного или более элементов compact-disc, каждый из которых включает в качестве дочерних элементы price, title и artist. Во время обмена документами XML-схема описывает контракт между производителем и потребителем XML, поскольку она описывает то, что составляет действительное XML-сообщение передаваемое между двумя сторонами. Хотя для XML существует несколько языков схемы, от DTD до XDR, ведущим является Язык описания XML-схемы W3C (W3C XML Schema Definition Language), сокращенно XSD.
XSD уникален среди языков XML-схемы, потому что он первым пытается вывести роль XML-схемы за рамки традиционного ее применения для описания контракта между двумя сущностями, обменивающимися документами. XSD представляет концепцию Post Schema Validation Infoset (PSVI). Совместимый XSD-обработчик принимает XML Infoset как входные данные и после проверки преобразовывает его в Информационное множества после проверки схемы (PSVI). PSVI — это исходные входные данные XML Infoset с добавленными к существующим новыми единицами информации и новыми свойствами. В Рекомендации XML-схема W3C приведен список дополнений в Информационное множества после проверки схемы (PSVI).
Одним важным классом дополнений PSVI является аннотации типов. Элементы и атрибуты получают строгий контроль типов и имеют ассоциированную информацию о типе данных. Такие XML со строгим контролем типов весьма универсальны, потому что теперь они с помощью таких технологий как XmlSerializer (http://msdn.microsoft.com/library/en-us/dnexxml/html/xml01202003.asp) из .NET Framework могут быть преобразованы в объекты, с помощью технологий SQLXML (http://msdn.microsoft.com/sqlxml) и DataSet (http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDataDataSetClassTopic.asp) из .NET Framework они могут быть преобразованы в реляционные таблицы или их можно обработать с помощью языков запросов XML, таких как XPath 2.0 и XQuery, которые используют преимущество строгого контроля типов.
Ниже показан пример фрагмента схемы, который описывает элемент items документа-образца, приведенного в разделе Анатомия XML-документа.
API, использующие модель дерева
Древовидная модель API представляет XML-документ как дерево узлов, которые обычно загружаются в память все сразу. Самая популярная древовидная модель API для XML — Объектная модель документа W3C (W3C Document Object Model — DOM). DOM обеспечивает возможность программно читать, манипулировать и изменять XML-документ.
Ниже приведен пример использования класса XmlDocument (http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemXmlXmlDocumentClassTopic.asp) в .NET Framework для получения имени исполнителя и названия первого compact-disc в элементе items.
Курсорные API в XML можно представить как лупу, которая проходит по XML-документу, согласно указаниям фокусируясь на отдельных аспектах документа. Класс XPathNavigator в .NET Framework — это пример курсорного API в XML. Преимущество курсорных API над древовидной моделью API в том, что для них не требуется, чтобы весь XML-документ был загружен в память, что открывает двери оптимизациям со стороны создателя XML, в которых документ загружается «по мере надобности».
Вот пример использования класса XPathNavigator (http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemXmlXPathXPathNavigatorClassTopic.asp) в .NET Framework для получения имени исполнителя и названия первого compact-disc в элементе items.
Потоковые API для обработки XML позволяет обрабатывать XML-документ, сохраняя в памяти только содержимое обрабатываемого в данный момент узла. Такие API делают возможной обработку больших XML-файлов без использования слишком больших объемов памяти. Существует два основных класса потоковых API для обработки XML: передающие XML-анализаторы и принимающие XML-анализаторы.
Передающие синтаксические анализаторы, такие как SAX, проходят по XML-потоку, а затем при встрече с XML-узлами «выталкивают» события в зарегистрированные обработчики событий (методы обратного вызова). Принимающие анализаторы, такие как класс XmlReader (http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemXmlXmlReaderClassTopic.asp) в .NET Framework, работают в XML-потоке как однонаправленные курсоры.
Ниже представлен пример использования класса XmlReader в .NET Framework для получения имени исполнителя и названия первого compact-disc в элементе items.
Часто надо преобразовать XML-документы из одного словаря в другой. Иногда так можно сгенерировать их в готовом для печати формате или в Web-браузере; также с помощью преобразования можно превратить документы, полученные извне, в более привычный формат.
XSLT (http://www.w3.org/TR/xslt) — первый язык XML-преобразования. Преобразование, выраженное в XSLT, описывает правила преобразования исходного дерева в результирующее дерево. Преобразование достигается путем ассоциирования шаблонов. Шаблон — это выражение XPath, может рассматриваться как регулярное выражение, ставящее части исходного дерева XML в соответствие частям строки. Шаблон ставится в соответствие элементам исходного дерева. В случаях совпадения создается экземпляр шаблона для создания части результирующего дерева. При создании результирующего дерева элементы исходного дерева могут быть отфильтрованы и реорганизованы, а произвольная структура может быть добавлена.
Следующая таблица стилей XSLT преобразовывает элемент items в Web-страницу XHTML, содержащую таблицу с информацией о компакт дисках.
XHTML-документ, созданный с использованием этой таблицы стилей, показан ниже:
XML — это больше, чем просто текстовый формат для описания документов. Это механизм для описания структурированных и псевдоструктурированных данных, который обеспечивает доступ к богатому семейству технологий обработки таких данных. Мощные абстракции, такие как Информационное множество XML, открывают двери к обработке нетекстовых данных, таких как файловые системы, реестр Windows®, реляционные базы данных и даже объекты языков программирования, с помощью XML-технологий. XML еще на один шаг приблизил нас к универсальному доступу к данным.
Программы для открытия xml
Популярный и активно используемый формат классифицируется как текст и без труда открывается в простом текстовом редакторе. Если пользователь ещё не знаком с подобными файлами и не знает, чем открыть xml, то система может сделать это по умолчанию. Однако следует отметить, что всем известный MS Office Word для этих целей не подходит.
- Notepad . Признан лучшим текстовым редактором для работы с документами xml. Программа обладает расширенным функционалом, дружественным интерфейсом и максимально удобным для пользователя способом отображения на экране. Дополнительная подсветка синтаксиса существенно облегчает и упрощает просмотр. Полезное и удобное приложение входит в перечень обязательных для установки на любом компьютере и его возможности стоит попробовать.
- Блокнот Windows. Вполне подходит для быстрого просмотра и редактирования XML-файлов. Простенькая программка относится к системным. Для открытия документа в блокноте достаточно вызвать контекстное меню, щёлкнув по файлу правой кнопкой мыши. Осталось перейти в «Открыть с помощью…» и в открывшемся списке программ выбрать «Блокнот». Возможности приложения минимальные и здесь не будет подсветки синтаксиса, облегчающей восприятие написанной информации. Но для оперативной обработки такой способ вполне подойдёт.
- Браузер. Для чтения и ознакомления с файлами xml успешно используется любой браузер. Возможности создавать документ и вносить правки у него нет, но в информационных целях его можно использовать. Подойдёт самый простой Internet Explorer, «Яндекс» или Google. Если открытие файла не произошло автоматически, то нужно повторить предыдущую процедуру для вызова окна «Открыть с помощью». В списке приложений выбрать свой любимый веб-обозреватель. В некоторых случаях отображение информации происходит согласно тегам. Для «комфортного» представления достаточно воспользоваться комбинацией клавиш CTRL U и на экране появится исходный код документа. Несложно заметить, что картинка более вменяемая, а информация xml-файла представлена в удобном для чтения виде, по сравнению со стандартным блокнотом.
Вывод. Для открытия xml-файлов существует несколько программных возможностей, заложенных в самой ОС Windows. Новичкам этого вполне достаточно, а продвинутые пользователи знают, что в сети есть множество доступных онлайн-сервисов для работы с файлами с расширением xml.
Решение проблемы неоднозначности разметки
Употребление разметочных символов в символьных данных затрудняет распознавание конструкций разметки и может создать проблему неоднозначности структуры. В XML эта проблема решается следующим образом: <, > и & не могут присутствовать в символьных данных и в значениях атрибутов в их непосредственном виде, для их представления в этих случаях зарезервированы специальные сущности:
Кроме того, для употребления апострофов и кавычек внутри значений атрибутов используются следующие сущности:
Правило замены разметочных символов на их обозначающие сущности не распространяется на символьные данные в секциях «CDATA», зато выполняется во всех остальных местах документа.
Так же для написания символа «» необходимо использовать «\» (в XML, находящемся внутри формата DOCX этого делать не нужно).
С помощью браузера
Если вы хотите только лишь посмотреть данные в файле XML, то знайте, что практически каждый браузер может открывать XML-файл.
Так, например, в Opera просто откройте новую вкладку и перетащите XML-файл туда. Этот же способ подойдет для Firefox и Chrome.
Есть другой вариант: кликните правой кнопкой мыши на файл .xml и выберите опцию «Открыть с помощью», а из предложенного списка выберите удобный для вас браузер.
Чтобы открыть такой формат файла, браузеру не нужен доступ к Интернету, поскольку все данные уже хранятся на вашем ПК.
Символы разметки
Разметка всегда начинается символом < и заканчивается символом >.
Наряду с символами < и >, специальную роль для разметки играет также символ &. Угловые скобки обозначают границы элементов, инструкций обработки и некоторых других последовательностей. Амперсанд позволяет выполнить замену текста при помощи сущностей (англ. entities)[6].
Стандартный «блокнот»
В «Блокноте» откроется текст, обернутый в теги. При необходимости вы сможете его отредактировать в окне.
Запустить файл можно через то же контекстное меню документа. Выбираете «Открыть с помощью», нажимаете на «Блокнот».
Если «Блокнота» в списке приложений не оказалось, используйте другой способ:
- Откройте пустое окно «Блокнота». Для этого найдите программу через поиск Windows 10. Введите название приложения в строке поиска – выберите «Блокнот» в результатах запроса.
- Теперь зажмите мышкой файл xml (на рабочем столе либо в папке в «Проводнике») и перетащите его на пустое окно «Блокнота».
- Подождите, пока документ откроется.
Сущности¶
Некоторые символы в XML имеют особые значения и являются служебными. Если вы поместите,
например, символ < внутри XML элемента, то будет
сгенерирована ошибка, так как парсер интерпретирует его, как начало
нового элемента.
В примере ниже будет сгенерирована ошибка, так как в значении «ООО<Мосавтогруз>» атрибута НаимОрг содержатся символы < и >.
Также ошибка будет сгенерирована и в слудющем примере, если название организации взять в обычные кавычки (английские двойные):
Чтобы ошибки не возникали, нужно заменить символ < на его
сущность. В XML существует 5 предопределенных сущностей:
Таким образом, корректными будут следующие формы записей:
или
В последнем примере английские двойные кавычки заменены на французские кавычки («ёлочки»), которые не являются служебными символами.
Физическая и логическая структуры документа
С физической точки зрения документ состоит из сущностей (англ. entities), из которых каждая может ссылаться на другую сущность. Единственный корневой элемент — документная сущность.
Содержание сущностей — символы.
С логической точки зрения документ состоит из комментариев (англ. comments), объявлений (англ. declarations), элементов (англ. elements), ссылок на сущности (англ. character references) и инструкций обработки (англ. processing instructions). Всё это в документе структуризуется разметкой (англ. markup).
Физическая структура
Сущность — мельчайшая часть в документе. Все сущности что-нибудь содержат, и у всех них есть имя (существуют исключения, напр. документная сущность). Проще говоря, термин «сущность» описывает «сущую вещь», «что-то»[6].
Документ состоит из сущностей, содержание которых — символы. Все символы разделены на два типа: символы данных (англ. character data) и символы разметки.
К разметке относятся:
Чтение xml: три варианта api
Для чтения XML есть три варианта API[12].
Событийный API (event-driven API, push-style API) — XML-процессор читает XML; при определённом событии (появлении открывающего или закрывающего тега, текстовой строки, атрибута) вызывается callback-функция.
Пример кода (C , выдуманный API)
enumclassPlace{ROOT,DOCUMENT,THING,N}PlaceparentPlace[static_cast<int>(Place::N)]={ROOT,ROOT,DOCUMENT};classMyEvent:publicXml::Event{private:Placeplace=Place::ROOT;Thing*currThing=nullptr;public:/// @return true — тег нужен; false — пропустить его и всё, что внутриboolonTagOpen(conststd::string&aName)override;voidonTagClose()override;voidonAttr(conststd::string&aName,conststd::string&aValue)override;voidonText(conststd::string&aText)override;}boolMyEvent::onTagOpen(conststd::string&aName){switch(place){casePlace::ROOT:if(aName=="document"){place=Place::DOCUMENT;returntrue;}break;casePlace::DOCUMENT:if(aName=="thing"){place=Place::THING;currThing=&things.emplace_back();returntrue;}break;}returnfalse;}voidMyEvent::onTagClose(){place=parentPlace[place];}voidMyEvent::onAttr(conststd::string&aName,conststd::string&aValue){if(place==Place::THING&&aName=="name")currThing->name=aValue;}voidMyEvent::onText(conststd::string&aText){if(place==Place::THING)currThing->value=aText;}xml::eventDrivenRead("in.xml",MyEvent());
Потоковый API (также pull-style API) — устроен на манер потоков ввода-вывода. Прикладной код запрашивает у процессора части XML, тот умеет только двигаться по XML вперёд, забывая уже пройденные части.
Объектный API (Document Object Model, DOM, «объектная модель документа») — считывает XML и воссоздаёт его в памяти в виде объектной структуры.
- − Расходует много памяти — намного больше, чем сам XML занимает на диске. На pugixml расход памяти втрое и более превышает длину XML.
- Прост для прикладного программиста.
- Библиотека проста в программировании.
- Позволяет произвольный доступ к XML[12]. Это, например, упрощает работу с перекрёстными ссылками. Зачастую удаётся распознать «почти верные» XML с перепутанным порядком тегов.
- При ошибке в XML в памяти остаётся полусозданная структура XML, которая будет автоматически уничтожена самой библиотекой.
- Общий API для чтения и записи.
- ± Естественный выбор, когда объектом предметной области является сам XML: например, в веб-браузере[12], XML-редакторе, в импортёре к программе-локализатору, который извлекает строки из XML произвольной структуры.
- ± Естественный выбор, когда нужно загрузить XML, слегка переработать и сохранить[12]. Те части, которые трогать не нужно, не требуют никакого кода.
- Примеры библиотек: JDOM, TinyXML, pugixml
Бывают и гибридные API: внешние и маловажные части читаются потоковым методом, а внутренние и важные — объектным.
Эффективность использования xml
XML — язык разметки, другими словами, средство описания документа. Именно в нише документов, текстов, где доля разнотипных символьных данных велика, а доля разметки мала — XML успешен. С другой стороны, обмен данными в открытых системах не сводится к обмену документами.
Избыточность разметки XML (а в целях разработки языка прямо указано, что лаконичность не является приоритетом проекта) сказывается в ситуациях, когда данные не вписываются в традиционную модель документа. Лента новостей, например, оформляемая с использованием синтаксиса XML (форматы RSS, Atom), представляет собой не документ в традиционном понимании, а поток однотипных мини-документов — многословная и избыточная разметка в этом случае составляет существенную часть передаваемых данных.
W3C озабочен эффективностью применения XML, и соответствующие рабочие группы занимаются этой проблемой (к началу 2022 года нормативные документы не разработаны).
Другая ситуация, когда форматы XML могут оказаться не лучшим решением — работа с данными с простой структурой и небольшим объёмом символьных данных (поля данных). В этом случае доля разметки в общем объёме велика, а программная обработка XML может оказаться неоправданно затратной по сравнению с работой с данными более простой структуры.
Язык xml
Спецификация XML описывает язык и ряд вопросов, касающихся кодировки и обработки документов. Материал этой секции представляет собой сокращённое изложение описания языка в Спецификации XML, адаптированное для настоящей статьи.
Нормативным считается английский вариант документа, поэтому основные термины приводятся с их английскими оригиналами.
Перевод основных терминов в основном следует доступному в интернете переводу Спецификации на русский язык, исключение составляют термины tag и declaration. Для термина tag здесь используется перевод тег. Для термина declaration отдано предпочтение распространённому переводу объявление (против также распространённой кальки декларация).
В литературе и интернете могут встречаться и иные переводы основных терминов.