Формат XML
XML (от англ. eXtensible Markup Language — расширяемый язык разметки) — это текстовый формат для хранения и передачи структурированных данных, разработанный консорциумом W3C (World Wide Web Consortium). XML представляет собой метаязык, позволяющий создавать собственные языки разметки для описания произвольных данных. Ключевыми особенностями формата являются строгая синтаксическая структура, независимость от платформ и программного обеспечения, а также удобочитаемость как для человека, так и для машин.
История
Предшественником XML стал язык SGML (Standard Generalized Markup Language), разработанный в 1980-х годах и ставший международным стандартом (ISO 8879). SGML обладал чрезвычайно широкими возможностями, но был сложен в реализации и использовании. В 1996 году рабочая группа W3C под руководством Джона Босаке начала работу над упрощённой версией SGML, которая должна была сочетать его гибкость с простотой, характерной для набиравшего популярность языка HTML (HyperText Markup Language).
Первая спецификация XML 1.0 была опубликована 10 февраля 1998 года. Она быстро получила широкое распространение благодаря своей универсальности. В 2004 году вышла вторая редакция XML 1.0, а в 2006 году — третья, исправлявшая неточности. Параллельно развивалась версия XML 1.1 (2004 год), которая была менее популярна из-за изменений в правилах обработки символов. На сегодняшний день XML 1.0 остаётся основной стабильной версией формата.
Синтаксис и структура
XML-документ состоит из элементов, атрибутов, текстового содержимого и специальных конструкций. Основой документа является строгая иерархическая древовидная структура.
Элементы
Элемент — основная единица XML. Каждый элемент имеет имя и может содержать текст, другие элементы или быть пустым. Синтаксис элемента:
- Открывающий тег:
<имя> - Закрывающий тег:
</имя> - Пустой элемент:
<имя />
Пример элемента с содержимым: ``xml <book>Война и мир</book> ``
Атрибуты
Атрибуты задаются внутри открывающего тега и содержат пару «имя=значение». Они используются для метаданных или дополнительных характеристик элемента: ``xml <book id="12345" lang="ru">Война и мир</book> ``
Объявление XML
Документ обычно начинается с пролога — объявления XML, указывающего версию и кодировку: ``xml <?xml version="1.0" encoding="UTF-8"?> ``
Правила корректности
XML-документ считается корректным (well-formed), если соблюдены следующие правила:
- Документ имеет ровно один корневой элемент.
- Все теги правильно вложены и закрыты.
- Имена элементов чувствительны к регистру (
<Book>и<book>— разные элементы). - Значения атрибутов заключены в кавычки (одинарные или двойные).
Пространства имён
Для предотвращения конфликтов имён при объединении данных из разных источников используется механизм пространств имён (XML Namespaces). Пространство имён задаётся атрибутом xmlns: ``xml <root xmlns:fiction="http://example.com/fiction" xmlns:nonfiction="http://example.com/nonfiction"> <fiction:book>Мастер и Маргарита</fiction:book> <nonfiction:book>Капитал</nonfiction:book> </root> ``
Схемы и валидация
XML-документ может быть не только корректным, но и валидным — то есть соответствующим определённой схеме, которая описывает разрешённую структуру, типы данных и ограничения. Основные языки описания схем:
DTD (Document Type Definition)
DTD — самый старый способ определения структуры XML. Описывает допустимые элементы, атрибуты и их вложенность. Пример DTD: ``dtd <!ELEMENT library (book+)> <!ELEMENT book (title, author, year)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> ``
XML Schema (XSD)
XML Schema Definition — более мощный и современный стандарт, поддерживающий типы данных, ограничения на значения и наследование. XSD сам является XML-документом.
RELAX NG
RELAX NG — альтернативная схема, отличающаяся простотой и гибкостью. Может быть записана как в XML-синтаксисе, так и в компактном текстовом формате.
Обработка XML
Для программной работы с XML используются различные технологии:
DOM (Document Object Model)
DOM-парсер загружает весь XML-документ в память в виде дерева объектов. Это удобно для произвольного доступа к данным, но требует много памяти при работе с большими файлами.
SAX (Simple API for XML)
SAX-парсер читает документ последовательно, вызывая обработчики событий (открытие тега, текст, закрытие тега). Экономит память, но не позволяет возвращаться к ранее прочитанным данным.
StAX (Streaming API for XML)
StAX — потоковый API, в котором приложение само управляет чтением, запрашивая следующее событие. Занимает промежуточное положение между DOM и SAX.
XSLT (eXtensible Stylesheet Language Transformations)
XSLT — язык преобразования XML-документов в другие форматы (XML, HTML, текстовые файлы). Широко используется для генерации веб-страниц и отчётов.
XPath (XML Path Language)
XPath — язык запросов для навигации по дереву XML. Позволяет выбирать узлы по пути, условиям и фильтрам. Является основой для XSLT и XQuery.
Применение
XML используется в самых разных областях информационных технологий:
Форматы файлов
Многие приложения используют XML в качестве формата хранения данных:
- Microsoft Office (DOCX, XLSX, PPTX) — архивы, содержащие XML-файлы.
- SVG (Scalable Vector Graphics) — формат векторной графики на основе XML.
- RSS/Atom — форматы для синдикации новостей и блогов.
- Android Manifest — описание приложений для ОС Android.
- Maven POM — описание проектов в системе сборки Java.
Веб-сервисы
XML долгое время был основой для веб-сервисов:
- SOAP (Simple Object Access Protocol) — протокол обмена структурированными сообщениями.
- WSDL (Web Services Description Language) — язык описания веб-сервисов.
- REST (Representational State Transfer) — архитектурный стиль, часто использующий XML для представления данных.
Промышленность и наука
- GML (Geography Markup Language) — описание географических данных.
- MathML — представление математических формул.
- XBRL (eXtensible Business Reporting Language) — стандарт для финансовой отчётности.
- HL7 — стандарт обмена медицинскими данными.
Конфигурационные файлы
XML активно применяется для конфигурации программного обеспечения:
- Apache Tomcat — файлы
web.xml,server.xml. - Spring Framework — конфигурация бинов и компонентов.
- Log4j — настройка логирования.
Критика и альтернативы
Несмотря на широкое распространение, XML имеет ряд недостатков:
Избыточность
XML-документы содержат много повторяющихся тегов и атрибутов, что увеличивает размер файлов по сравнению с более компактными форматами. Например, один и тот же массив данных может занимать в XML в 2–5 раз больше места, чем в JSON.
Сложность обработки
Строгие правила синтаксиса и необходимость парсинга делают XML менее удобным для простых сценариев, чем, например, CSV или INI-файлы.
Альтернативные форматы
С начала 2010-х годов популярность XML снизилась в пользу более лёгких форматов:
- JSON (JavaScript Object Notation) — стал стандартом для веб-API и конфигурационных файлов.
- YAML — ориентирован на удобочитаемость, часто используется в конфигурации.
- Protocol Buffers — бинарный формат от Google, обеспечивающий высокую скорость сериализации.
- MessagePack — компактный бинарный формат.
Тем не менее, XML остаётся незаменимым в областях, где важны строгая валидация, поддержка пространств имён и расширяемость — например, в документообороте, финансовой отчётности и научных публикациях.
Интересные факты
- Название «XML» было предложено сотрудником Sun Microsystems Джоном Босаке, который также стал редактором первой спецификации.
- Символы
<и&в текстовом содержимом XML должны заменяться на<и&соответственно, иначе документ считается некорректным. - XML-документы могут содержать комментарии (
<!-- комментарий -->), которые игнорируются при обработке. - Существует бинарный аналог XML — Fast Infoset (ITU-T Rec. X.891), предназначенный для уменьшения размера данных.
Источники
- W3C XML 1.0 Specification (Fifth Edition)
- W3C XML Schema Part 1: Structures
- W3C XSL Transformations (XSLT) Version 1.0
- W3C XML Path Language (XPath) Version 1.0
- Elliotte Rusty Harold, W. Scott Means. XML in a Nutshell, O'Reilly Media
- David Hunter, Jeff Rafter. Beginning XML, Wrox Press
- Документация по XML на сайте Microsoft Developer Network (MSDN)
- Стандарт ISO 8879:1986 — Information processing — Text and office systems — Standard Generalized Markup Language (SGML)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →