Перейти к основному содержимому

XML

Разработчику Аналитику Тестировщику
Архитектору Инженеру


XML

Основы XML

XML (eXtensible Markup Language) — открытый стандарт W3C для хранения и передачи структурированных данных в текстовом виде. Файл читается человеком и машиной, открывается в любом редакторе, работает на любой платформе. XML лёг в основу конфигураций, веб-сервисов (SOAP, RSS), отраслевых форматов (СМЭВ, UBL, HL7), документов Office Open XML и множества API.

Полезно смотреть на XML на трёх уровнях:

УровеньСмысл
ХранениеПротокол упаковки информации разметкой — теги задают границы, роли и связи частей
ТехнологииСемейство стандартов вокруг данных: XPath, XSD, XSLT, XInclude, цифровая подпись
ПодходФилософия "чистых" данных: структура отделена от оформления, имена отражают смысл

На первом уровне важно — XML — метаязык, набор правил для создания языков разметки, а не готовый словарь тегов вроде HTML. Вы (или отраслевой комитет) определяете <invoice>, <chapter> или <Patient> — XML задаёт синтаксис, а словарь выбираете вы.

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

Истоки — SGML и HTML

История XML — ответ W3C на компромисс между мощью и сложностью:

  • SGML — Generalized Markup Language: гибкий, но громоздкий; DTD, сущности, сложная настройка.
  • HTML — фиксированный набор тегов для веб-страниц; браузеры "прощают" ошибки, что усложняет автоматическую обработку.
  • XML — "маленькое подмножество SGML" — строгие правила, однозначная структура, любой словарь тегов.
  • XHTML — HTML, переписанный как XML-приложение (закрытые теги, один корень, lowercase).

HTML задавал как выглядит страница (<b>, <font>); XML поощряет имена по назначению (<emphasis>, <price>), а вид задаёт CSS или XSLT отдельно.

Принципы XML (задачи стандарта)

W3C заложил в XML несколько опорных идей — они объясняют, почему формат до сих пор жив в интеграциях:

ПринципСуть
Свои словариСтандарт не навязывает <p> и <table> — вы создаёте или берёте готовое XML-приложение (DocBook, UBL, свой формат)
Однозначная структураОдин способ прочитать дерево; парсеры не "угадывают", как HTML-браузеры
Представление отдельноCSS, XSLT, XSL-FO хранятся вне данных; одни данные — разные виды вывода (веб, PDF, печать)
ПростотаМинимум правил, читаемый синтаксис; проще писать обработчики
Проверка ошибокWell-formed обязателен; valid по DTD/XSD — опционально, но мощно для контрактов

Разметка даёт программе то, чего нет у "сплошного текста" — границы (где начинается и кончается фрагмент), роли (абзац, заголовок, цена), вложенность, связи с внешними ресурсами (через атрибуты, XLink, XInclude).

Самодокументируемость — свойство формата данных или языка разметки, при котором структура и содержание документа позволяют понять его назначение, состав и логику без обращения к внешним пояснениям. В XML это достигается за счёт использования осмысленных имён тегов и атрибутов, которые явно отражают суть описываемых сущностей и их отношений. Например, тег <заказ> с атрибутом дата="2026-01-24" и вложенными элементами <товар>, <цена>, <количество> делает структуру документа понятной даже при первом чтении.

DTD (Document Type Definition) - стандартный способ описания структуры XML, и определяет, какие элементы (теги) могут использоваться, какие атрибуты могут быть у элементов, и каков порядок и вложенность элементов.

XSD (XML Schema Definition) - схема, которая описывает структуру документа. В отличие от DTD, XSD использует сам XML для описания правил.

Пример XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Test1">
<xs:complexType>
<xs:sequence>
<xs:element name="Test2" type="xs:string"/>
</xs:sequence>
<xs:attribute name="Attribute1" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>

Эта схема описывает, что элемент Test1 должен содержать обязательный строковый атрибут Attribute1, и вложенный элемент Test2.

Play ITЗагрузка интерактивного демо…

Теги - основные элементы XML, которые "окружают" данные. Они определяют начало и конец элемента:

<note>
<to>Alice</to>
<from>Bob</from>
</note>

Здесь note, to, from - теги, а Alice и Bob - значения элементов.

Атрибуты - дополнительные параметры, которые добавляются к тегам для описания их свойств. Расширим наши note:

<note priority="high">
<to>Alice</to>
<from>Bob</from>
</note>

Здесь priority – это атрибут, а high - значение атрибута.

Узел - любая часть XML-документа, включая элементы, атрибуты, текст и комментарии. XML это дерево узлов, упорядоченных иерархично. В нашем документе будет:

  • note - корневой узел;
  • to - дочерний узел;
  • Alice - текстовый узел.

Синтаксис и правила XML

XML — строго структурированный язык разметки. Его синтаксис определяет чёткие правила построения документа, которые обеспечивают однозначность интерпретации и надёжность обработки. Нарушение любого из этих правил делает документ недействительным.


1. Единственный корневой элемент

Каждый XML-документ обязан содержать ровно один корневой элемент. Он охватывает всё содержимое документа и служит точкой входа для парсера. Все остальные элементы находятся внутри него и считаются его дочерними.

Пример:

<note priority="high">
<to>Alice</to>
<from>Bob</from>
</note>

Здесь note — корневой элемент. Он не несёт самостоятельного семантического значения, но организует структуру: внутри него расположены элементы to и from, описывающие получателя и отправителя сообщения.

Если в документе окажется два или более элемента на верхнем уровне, парсер выдаст ошибку. Это правило гарантирует древовидную иерархию без разветвлений на корневом уровне.


2. Правильное закрытие тегов

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

Существуют два способа записи элементов:

  • Парные теги — используются, когда элемент содержит текст или другие элементы:
<title>Введение в XML</title>
  • Пустые (одиночные) теги — применяются, когда элемент не содержит содержимого:
<page size="A4"/>

Запись с / перед > — самозакрывающийся элемент. Эквивалентна <page size="A4"></page>, но короче. (Тег <br> — из HTML, в произвольном XML так не пишут.)

Открывающий тег начинается с символа <, за которым следует имя элемента. Закрывающий тег начинается с </, затем следует то же имя и завершается >. Имена в открывающем и закрывающем тегах должны совпадать точно, включая регистр.


3. Чувствительность к регистру

XML различает заглавные и строчные буквы в именах элементов и атрибутов. Элементы <Message> и <message> считаются разными. Это требование обеспечивает точность и предотвращает случайные коллизии имён.

Следствие: если схема или приложение ожидает элемент с именем User, использование user приведёт к ошибке валидации или игнорированию данных.


4. Экранирование специальных символов

Некоторые символы имеют особое значение в XML и не могут использоваться напрямую в текстовом содержимом или значениях атрибутов. К ним относятся:

  • < — начало тега
  • > — конец тега
  • & — начало сущности
  • " — ограничитель значений атрибутов в двойных кавычках
  • ' — ограничитель значений атрибутов в одинарных кавычках

Чтобы включить эти символы в данные, их заменяют на предопределённые сущности:

СимволСущность
<&lt;
>&gt;
&&amp;
"&quot;
'&apos;

Пример:

<description>Цена &lt; 1000 руб.</description>

Без экранирования парсер попытается интерпретировать < 1000 как начало тега и выдаст ошибку.

Альтернативный способ — использовать секции CDATA, если требуется вставить большой фрагмент текста с множеством специальных символов:

<code><![CDATA[if (x < y && y > 0) { return "ok"; }]]></code>

Всё содержимое внутри <![CDATA[ ... ]]> обрабатывается как чистый текст, без анализа тегов и сущностей.


Well-formed и valid

ТерминЧто проверяетсяПример ошибки
Well-formed (синтаксически корректный)Один корень, закрытые теги, экранирование, правильные именаДва корневых элемента на верхнем уровне
Valid (валидный по схеме)Well-formed и соответствие DTD/XSDВ документе нет обязательного атрибута из XSD

Парсер XML сначала проверяет well-formedness; XSD/DTD добавляют правила предметной области (какие теги и атрибуты допустимы).

Контекстная ошибка (пропущен обязательный <author> в книге) well-formed checker не поймает — для этого нужен validator (DTD, XSD, Schematron). Типичный конвейер качества:

  1. Редактирование в IDE с подсветкой синтаксиса.
  2. xmllint --noout или встроенная проверка — well-formed.
  3. Валидация по XSD — valid + типы данных.
  4. Бизнес-правила (Schematron, код приложения) — семантика.

Комментарии, CDATA и инструкции обработки

Помимо элементов и атрибутов, в документе встречаются служебные конструкции:

КонструкцияСинтаксисНазначение
Комментарий{/* текст */}Пояснения для человека; парсер игнорирует. Внутри нельзя --
CDATA<![CDATA[ ... ]]>"Сырой" текст без разбора < и & — код, формулы
PI (Processing Instruction)<?target data?>Подсказка приложению, не парсеру XML

Частые PI:

<?xml-stylesheet type="text/css" href="catalog.css"?>
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>

xml-stylesheet связывает документ с CSS или XSLT; браузер или процессор решает, применять ли таблицу стилей. Другие цели (<?php ...?>, <?asciidoc ...?>) обрабатывает только целевое ПО.


Сущности (entities)

Сущность — именованная подстановка: при разборе &name; заменяется на объявленное значение.

ТипГде объявляетсяПример
ВстроенныеСпецификация XML&lt;, &gt;, &amp;, &quot;, &apos;
Общие (general)DTD: <!ENTITY copy "&#169;">&copy; → ©
ПараметрическиеDTD: <!ENTITY % draft "INCLUDE">Только внутри DTD, %draft;
Внешние<!ENTITY ch1 SYSTEM "chapter1.xml">Вставка другого XML-фрагмента
НеанализируемыеSYSTEM "logo.png" NDATA PNGСсылка на бинарный ресурс (legacy)

В современных системах внешние сущности в DTD — риск XXE; в production их отключают (DtdProcessing.Prohibit, disallow-doctype-decl). Для включения фрагментов предпочтите XInclude или сборку на уровне приложения. Подробности — справочник по XML.

В CDATA-секциях сущности не разворачиваются — всё внутри CDATA остаётся буквальным текстом.


Структура XML

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


Пролог

Пролог — необязательная, но рекомендуемая часть документа, которая располагается в самом начале. Он задаёт базовые параметры интерпретации содержимого:

<?xml version="1.0" encoding="UTF-8"?>

Эта строка содержит две ключевые директивы:

  • version="1.0" указывает, что документ соответствует первой версии спецификации XML. На сегодняшний день это единственная широко используемая версия.
  • encoding="UTF-8" определяет кодировку текста. UTF-8 поддерживает все символы Unicode и является стандартом для современных систем. Если кодировка не указана, парсер предполагает UTF-8 или UTF-16 в зависимости от байтового порядка (BOM).

Пролог может также включать атрибут standalone, который принимает значения "yes" или "no" и сигнализирует, зависит ли документ от внешних сущностей (например, DTD). В большинстве случаев этот атрибут опускается.

Если пролог отсутствует, парсер применяет значения по умолчанию: версия 1.0 и кодировка UTF-8. Однако явное указание пролога повышает читаемость и исключает неоднозначности при обработке в разных средах.


Корневой элемент

Все данные XML-документа находятся внутри одного корневого элемента. Это требование гарантирует древовидную структуру без разрывов на верхнем уровне.

Пример:

<catalog>
<book id="101">
<title>Основы XML</title>
<author>Иван Петров</author>
</book>
<book id="102">
<title>Современные форматы данных</title>
<author>Анна Смирнова</author>
</book>
</catalog>

Здесь catalog — корневой элемент. Он объединяет все записи каталога и служит контекстом для дочерних элементов book. Каждый book, в свою очередь, содержит собственные вложенные элементы и атрибуты.

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


Элементы XML

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

  • родитель — элемент, внутри которого он вложен;
  • дочерние элементы — вложенные теги;
  • текстовое содержимое — символы между открывающим и закрывающим тегом;
  • атрибуты — пары "имя=значение" в открывающем теге.

Отношения между элементами на одном уровне вложенности:

ТерминЗначение
РодительЭлемент, содержащий данный
ПотомокЛюбой вложенный элемент или текст внутри
ПредокРодитель, дед, и так далее до корня
Потомок по оси descendantЛюбой узел ниже по дереву
Сосед (sibling)Элемент с тем же родителем

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

<br/>
<page size="A4"/>

Порядок дочерних элементов в XML значим: <a/><b/> и <b/><a/> — разные документы, если схема не задаёт иное.


Атрибуты — элемент или атрибут?

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

КритерийАтрибутДочерний элемент
Сложная структураНетДа (вложенность, списки)
ПовторяемостьОдин раз на имя в элементеСколько угодно однотипных тегов
ПорядокНе важен для парсераЧасто важен
Типичное использованиеИдентификатор, флаг, единица измеренияОсновные бизнес-данные

Пример: идентификатор книги логично держать в атрибуте, а заголовок и автора — в элементах:

<book id="101" lang="ru">
<title>Основы XML</title>
<author>Иван Петров</author>
</book>

В XSD можно ограничить: какие атрибуты обязательны (use="required"), какие элементы допустимы и в каком порядке.


Пространства имён (XML Namespaces)

Когда в одном документе смешиваются теги из разных словарей (SOAP, SVG, пользовательская схема), имена могут совпасть. Пространство имён (namespace) — URI, идентифицирующий словарь; в документе он сокращается префиксом.

<root xmlns="http://example.com/default"
xmlns:meta="http://example.com/metadata">
<title>Заголовок</title>
<meta:created>2026-05-25</meta:created>
</root>
  • xmlns="..." — пространство имён по умолчанию для элементов без префикса (атрибуты без префикса в него не входят).
  • xmlns:meta="..." — префикс meta для элементов и атрибутов с этим префиксом.
  • Префиксы xml и xmlns зарезервированы спецификацией.

QName (qualified name) — пара "пространство имён + локальное имя", например {http://example.com/metadata}created. Парсер сравнивает полные имена, а не только локальную часть created.

Зачем это нужно на практике:

  • обмен сообщениями (SOAP, REST с XML-телом);
  • конфигурации .NET (xmlns в .csproj, app.config);
  • отраслевые форматы (UBL, HL7, СМЭВ) с собственными NS.

Подробные правила имён и NS — в справочнике по XML.


XML-приложения

XML-приложение (application) — согласованный словарь тегов и правил поверх синтаксиса XML. Один синтаксис — много "диалектов":

ПриложениеНазначениеСхема
XHTMLВеб-разметка по правилам XMLDTD / XSD W3C
DocBookТехническая документация (книги, man-страницы)DTD / XSD / RELAX NG
SVGВекторная графикаXSD
MathMLМатематические формулыXSD
Office Open XML.docx, .xlsx (ZIP + XML внутри)ISO/IEC 29500
UBL, HL7 FHIR, СМЭВB2B, медицина, гособменXSD отраслевые

DocBook иллюстрирует идею "семантика в данных, вид снаружи" — элементы <chapter>, <para>, <emphasis> не задают шрифт — XSLT + CSS (или XSL-FO → PDF) формируют HTML или печать. Тот же источник можно собрать в сайт, PDF и EPUB разными таблицами стилей.

Отраслевой формат обычно публикует XSD и примеры сообщений; интеграция = "наш XML соответствует их схеме".


Жизненный цикл документа

Работа с XML редко ограничивается "написал файл". Типичный маршрут:

ЭтапИнструментыРезультат
СозданиеVS Code, Oxygen, генерация из классов (xsd.exe, JAXB).xml по договорённой схеме
Проверкаxmllint, IDE, CI-пipelineОтчёт об ошибках с номером строки
ПросмотрCSS к XML, XSLT → HTMLЧитаемый вид для человека
ТрансформацияXSLT, код (DOM, LINQ to XML)Другой формат, фильтр, сводка

Трансформация не меняет исходник — строит новый документ (HTML для legacy-браузера, упрощённый XML для другой системы, оглавление по заголовкам). Это "кухонный комбайн" для данных — тот же каталог → HTML-витрина, CSV-выгрузка, PDF через XSL-FO.


Советы по разметке

При проектировании собственного формата (или чтении чужого XSD) ориентируйтесь на практику, проверенную SGML/XML-сообществом:

  • Осмысленные имена<orderDate>, <totalAmount>; избегайте <X1>, <J-9>.
  • Древовидная структура — "куст" с разумной глубиной лучше плоского списка из сотни атрибутов на одном элементе.
  • Данные в элементах, метаданные в атрибутах — повторяемые и составные поля только в дочерних тегах; id, код языка, флаги — в атрибутах.
  • Порядок значим — если последовательность <name> затем <price> важна для контракта, зафиксируйте её в XSD (xs:sequence).
  • Стиль отдельно — не дублируйте в тегах то, что решает CSS/XSLT (<font>, <big> в духе старого HTML).

Подробные правила DTD/XSD, модули, xs:keyсправочник.


Просмотр и редактирование XML

XML — обычный текст: файл открывается в любом редакторе. Для удобства используют инструменты с подсветкой, сворачиванием дерева и проверкой синтаксиса:

СредаВозможности
IDE (Visual Studio, IntelliJ, VS Code с расширениями)Дерево узлов, XSD-подсказки, форматирование
БраузерОтображение дерева; без стилей — "сырой" XML
Специализированные редакторы (Oxygen XML, XMLSpy)Валидация, XSLT-отладка, сравнение файлов
CLI (xmllint, xmlstarlet)Проверка well-formed, валидация по XSD, XPath в терминале

При редактировании важно сохранять well-formedness — закрытые теги, экранирование, одну кодировку (обычно UTF-8). Автоформатирование в IDE помогает выровнять отступы, но не заменяет валидацию по схеме.


Отображение XML с помощью CSS

Сам по себе XML в браузере не оформлен. Связка XML + CSS задаёт, как элементы выглядят при просмотре (цвет, отступы, скрытие узлов).

В прологе или корневом элементе указывают инструкцию обработки:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="catalog.css"?>
<catalog>
<book><title>Пример</title></book>
</catalog>

Фрагмент catalog.css:

catalog { display: block; font-family: sans-serif; }
book { display: block; margin-left: 1em; border-left: 3px solid #ccc; padding-left: 0.5em; }
title { display: block; font-weight: bold; }
title::before { content: """; }
title::after { content: """; }

Селекторы ориентированы на имена элементов XML, а не на HTML-теги. Для сложного представления (таблицы, агрегация, другой разметки) чаще применяют XSLT — см. главу XSLT.


Валидация XML-документов

ЭтапЧто проверяетсяИнструмент / стандарт
1Синтаксис (well-formed)Любой XML-парсер
2Структура и типы (valid)DTD или XSD
3Бизнес-правилаSchematron, assert в XSD 1.1, код приложения

DTD — устаревающий, но встречающийся формат ограничений (часто в legacy и SGML-наследии). XSD — основной выбор для новых схем — типы данных, пространства имён, расширяемость.

Типичный процесс в разработке:

  1. Описать XSD (или сгенерировать из классов — xsd.exe в .NET).
  2. Проверить образец документа (xmllint --schema, IDE, <ExternalPlayEmbed example="data-markup/xsd-validation-demo" title="XSD — валидация XML" minHeight={480} /> ниже).
  3. Включить валидацию при приёме файлов в API или ETL.

Ошибка валидации должна возвращать понятное сообщение (путь к элементу, ожидаемый тип) — это ускоряет интеграции (госуслуги, банки, EDI).

Play ITЗагрузка интерактивного демо…

Полные таблицы сущностей, типов XSD и команд — справочник по XML.


Связанные технологии

XML редко используют изолированно. Три стандартных спутника:

ТехнологияНазначениеМатериал в энциклопедии
XPathЗапросы и выбор узлов в деревеXPath, чит-лист
XSLTПреобразование XML → HTML, другой XML, текстXSLT, справочник
XML DOMПрограммный доступ к узлам (API в браузере и на сервере)XML DOM

Кратко: XPath отвечает на вопрос "какие узлы выбрать"; XSLT — "как из них собрать новый документ"; DOM — "как читать и менять дерево из кода".


XSLT — преобразование XML в HTML

XSLT (eXtensible Stylesheet Language Transformations) — язык таблиц стилей для построения нового документа из исходного XML. В связке с XPath вы указываете, какие узлы взять (select, match) и как их вывести. Подробный курс — в главе XSLT; здесь — готовый пример "библиотека → HTML-страница".

Исходные данные:

<?xml version="1.0" encoding="UTF-8"?>
<library>
<book id="1">
<title>Война и мир</title>
<author>Лев Толстой</author>
</book>
<book id="2">
<title>Мастер и Маргарита</title>
<author>Михаил Булгаков</author>
</book>
</library>

Таблица стилей XSLT 1.0:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<h1>Список книг</h1>
<ul>
<xsl:for-each select="library/book">
<li>
<xsl:value-of select="title"/>
(<xsl:value-of select="author"/>)
</li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Элемент XSLTРоль в примере
xsl:stylesheetКорень таблицы; version="1.0" — версия процессора
xsl:template match="/"Правило для всего документа (корень дерева)
xsl:for-each select="library/book"Цикл по каждой книге (XPath)
xsl:value-of select="title"Текст дочернего элемента в результат

Запуск вне браузера: xsltproc library.xsl library.xml > out.html (libxslt), или Transform в .NET (System.Xml.Xsl).

Play ITЗагрузка интерактивного демо…


XPath — выборка узлов

Перед XSLT или DOM почти всегда нужен XPath — адресация узлов в дереве. Примеры для документа <library> выше:

ВыражениеЧто выберет
/library/bookВсе элементы book — прямые дети library
/library/book[1]/titleЗаголовок первой книги
/library/book[@id='2']Книга с атрибутом id="2"
//authorВсе author на любой глубине
//book[author = 'Лев Толстой']/titleЗаголовок книги с заданным автором

Play ITЗагрузка интерактивного демо…


Применение XML

XML позволяет структурировать информацию и сделать её машиночитаемой. Например, в государственном секторе заявление с портала превращается в XML по опубликованной XSD: отправитель и получатель (СМЭВ, ведомство) согласуют одну версию схемы.

Пользователь заполняет форму; бэкенд собирает поля и сериализует их в XML. Плоский вариант:

<application formId="gos-42">
<name>Иван</name>
<surname>Иванов</surname>
<patronymic>Иванович</patronymic>
<birthdate>1999-01-01</birthdate>
</application>

Структурированная дата (как в примере 2: XSD заявления в начале статьи) удобнее для валидации по частям:

<application formId="gos-42">
<applicant>
<surname>Иванов</surname>
<name>Иван</name>
<patronymic>Иванович</patronymic>
<birthDate>
<day>1</day>
<month>1</month>
<year>1999</year>
</birthDate>
</applicant>
<submittedAt>2026-05-26</submittedAt>
</application>

Файл уходит по защищённому каналу; получатель валидирует по XSD и только затем кладёт данные в свои таблицы. Смена версии схемы — отдельный релиз интеграции: старые клиенты не должны слать поля, которых нет в новой XSD.

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

XML получил широкое распространение благодаря такой простой схеме, но в последние годы уступил место JSON в большинстве новых систем, из-за производительности — XML надёжный, но медленнее текстового JSON. Сильные стороны XML:

  • XSD — язык описания структуры документа — допустимые элементы, атрибуты, типы (xs:date, xs:integer) и кардинальность. Сначала документ разбирают как well-formed (синтаксис XML), затем проверяют по XSD — до бизнес-логики приложения. Для JSON аналог — JSON Schema и схемы в OpenAPI; они тоже внешние к самому JSON, но широко используются в API.

  • Пространства имён — в одном документе можно смешивать теги из разных стандартов (SOAP, пользовательская схема) без коллизий имён. В JSON нет встроенных NS: избегают конфликтов префиксами в ключах ("order:id") или вложенными объектами по договорённости.

  • Комментарии в XML ({/* ... */}) помогают сопровождать интеграционные форматы. В стандарте JSON комментарии запрещены; для конфигов с # берут YAML или диалекты JSONC/JSON5 в редакторах (не для публичного API).

  • Самодокументируемость: осмысленные имена тегов и ссылка на XSD (xsi:schemaLocation) снижают неоднозначность. В JSON смысл поля "status": 1 задаёт контракт (OpenAPI, JSON Schema) или документация — иначе код остаётся магическим числом.

Microsoft долгое время использовала XML в ключевых технологиях — MSBuild, WPF, App.config, SOAP-сервисы. Даже после перехода .NET Core на JSON для конфигурации, XML сохранился в форматах проектов (.csproj), где важна расширяемость и точность.

XML применяется для обмена данными между системами, конфигурационных файлов, а порой и для хранения данных в виде файлов. К примеру, Microsoft Office форматы (тот же Word, Excel) это на самом деле XML.

Спецификации и карта стандартов

Актуальные тексты рекомендаций — W3C XML, XML 1.0 Fifth Edition, XML Schema 1.1. Карта связанных стандартов — справочник по XML.

Практическое задание

Попробуйте составить XML-файл. Создайте родительский тег и закройте его. Добавьте дочерний элемент и закройте его. Добавьте значение дочернего элемента. Добавьте атрибут дочернего элемента. Добавьте значение атрибута.