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

1.15. Структурированные данные

Всем

Структурированные данные

Что представляют собой структурированные данные?

Структурированные данные – данные, имеющие стандартизированный формат, что обеспечивает как человекочитаемость, так и машиночитаемость. Это информация, представленная в чётко организованной форме, в которой каждая единица имеет своё имя, тип, расположение и роль в общей модели. Такие данные можно обрабатывать автоматически: извлекать, фильтровать, сопоставлять и проверять на соответствие правилам без участия человека.

Структура — это организация данных по заранее определённым правилам, включающая именованные части (элементы или поля), связи между ними и порядок их следования. Структура задаёт контекст: где начинается запись, какие поля она содержит, как эти поля связаны друг с другом и каким значениям разрешено находиться в каждом из них.

Обычный текст — это сплошная последовательность символов без явных границ между смысловыми фрагментами. В структурированных данных каждая часть имеет метку (например, тег <Name>, ключ "age" или позицию в столбце), тип (строка, число, дата), и отношение к другим частям (вложенность, принадлежность к записи, порядок в списке). Благодаря этому машина понимает, где имя, где возраст, где город — и может оперировать ими как отдельными сущностями.

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


XML

XML (eXtensible Markup Language) – иерархический формат для структурированных данных, использует теги и атрибуты, применяется в конфигурациях, веб-сервисах (SOAP) и машиночитаемых документах.

Теги открываются через наименование в фигурных скобках «<Element>» и закрываются таким же тегом, но с добавлением «/» - «</Element>», и всё, что будет между «>» и «<» - будет значением элемента.

У элементов может быть атрибут, который устанавливается внутри фигурных скобок, и имеет значение, отображаемое через знак равенства "=" и заключаемое в кавычки: «<Element Attribute="Value">»:

<ParentElement>
<Child>Значение элемента</Child>
<Child2 Attribute="Значение атрибута">Значение элемента</Child2>
</ParentElement>

SGML

SGML (Standard Generalized Markup Language) был одним из первых языков разметки, стандартизированном ещё в 1986 году, и на его основе был создан HTML (HyperText Markup Language) в начале 1990-х годов.

К середине 1990-х стало понятно, что нужен более гибкий и универсальный формат, чем HTML или SGML, который можно использовать для обмена данными между системами, в конфигурационных файлах, веб-сервисах и в документообороте. Тогда, в 1996 году группа экспертов начала работу над новым стандартом, и в 1998 году W3C (World Wide Web Consortium) выпустила первую официальную спецификацию XML 1.0.

XML-файлы можно валидировать с помощью DTD или XML Schema (XSD), чтобы гарантировать целостность данных, можно использовать пространства имён, чтобы избежать коллизий имён тегов, а также комментарии, и даже экранирование символов.


XSLT

XSLT (XML Transformations) – язык преобразования XML-документов, используемый для конвертации между форматами, генерации HTML из XML, маппинга или фильтрации данных.

После появляения XML, со временем сильно накипело то, что у этого формата не было встроенного механизма визуализации или трансформации данных — то есть, как только данные были описаны в XML, требовалось что-то ещё, чтобы отобразить их в удобном виде (например, в браузере). Чтобы решить эту задачу, W3C создала XSL (eXtensible Stylesheet Language) — набор технологий для работы с XML, включающий XSLT для преобразования, XPath для навигации и XSL-FO для форматирования в печатный формат PDF.

Первая версия XSLT 1.0 была выпущена W3C в ноябре 1999 года.


XSD

XSD (XML Schema Definition) – XML-схема, описывающая структуру документа, которая создаёт модель документа и включает:

  • словарь (названия элементов и атрибутов);
  • модель отношений между элементами и атрибутами и их структуру;
  • типы данных элементов и атрибутов.

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


JSON

JSON (JavaScript Object Notation) – легковесный формат обмена данными, является альтернативой XML для веб-приложений, широко используется в веб-API. Пример:

{
"ключ-текст": "значение",
"ключ-число": 30,
"ключ-массив": ["значение 1", "значение 2"]
}

Формат не был изобретён с нуля — он вырос из практики использования JavaScript для передачи данных в браузерах (объектный литерал, JS Object), и Дуглас Крокфорд систематизировал и популяризировал его. Так что сейчас это независимый формат.


CSV

CSV (Comma-Separated Values) – табличный формат данных, где строки – записи, столбцы разделены запятыми (или другими символами). Пример:

Name,Age,City
John,30,New York
Alice,25,"Los Angeles, CA"

Формат CSV не имеет единого стандарта, и появился ещё в 1970-х, когда возникла потребность в простом способе экспорта и импорта информации между различными системами. Он жив до сих пор за счёт своей простоты и машиночитаемости.


YAML

Файл с расширением .yaml или .yml содержит структурированные данные в человекочитаемом текстовом формате, основанном на отступах и двоеточиях. Такой файл описывает настройки: переменные окружения, параметры сервисов, структуру CI/CD-пайплайнов, манифесты Kubernetes. YAML поддерживает списки, словари, скаляры, многострочные строки и ссылки. Используется в Docker Compose, Ansible, GitHub Actions, Helm и многих современных инструментах.


TOML

Файл с расширением .toml содержит параметры в формате TOML (Tom’s Obvious, Minimal Language) — простом, недвусмысленном текстовом стандарте, сочетающем удобство чтения с однозначностью разбора. Такой файл состоит из секций в квадратных скобках, пар «ключ = значение», поддерживает комментарии, даты и массивы. Применяется в конфигурации Rust-проектов (Cargo.toml), Python-сборщиках (Poetry), инструментах DevOps и настройке приложений.


.md, .markdown

Файл с расширением .md содержит текст с лёгкой разметкой: # для заголовков, */- для списков, ` для кода, [ссылка](url) для гиперссылок. Такой формат легко читается как «как есть» и преобразуется в HTML, PDF или другие форматы. Применяется для документации (README.md), статей, заметок, публикаций на GitHub и Docusaurus — как в этом проекте.


.proto — файл спецификации Protocol Buffers

Файл с расширением .proto содержит описание структуры данных и интерфейсов сервисов в формате Protocol Buffers от Google. Такой файл определяет сообщения (со вложенными полями и типами), перечисления и gRPC-сервисы. Из .proto генерируются классы на разных языках (Java, Python, Go и др.), обеспечивающие эффективную сериализацию и RPC-взаимодействие. Используется в микросервисных архитектурах и высоконагруженных системах.