Открыть сервис

Язык описания данных

Язык описания данных — это формальный язык или набор соглашений, предназначенный для структурирования, аннотирования, определения типов и правил проверки данных, хранящихся в информационных системах, базах данных или передаваемых между ними. В отличие от языков программирования, языки описания данных (Data Description Languages, DDL) обычно не содержат инструкций для выполнения вычислений или управления потоком выполнения, а сосредоточены на статическом представлении структуры информации. Они служат основой для обмена данными между различными системами, обеспечения их целостности и интерпретируемости.

История

Концепция языков описания данных возникла в 1960-х годах с развитием систем управления базами данных (СУБД). Первым значительным стандартом стал язык описания данных КОДАСИЛ (CODASYL DDL), разработанный в 1969 году для сетевых баз данных. Он позволял определять записи, наборы и связи между ними. Параллельно развивался язык описания данных для иерархических моделей, например, в системе IMS (Information Management System) компании IBM.

В 1970-х годах с появлением реляционной модели данных, предложенной Эдгаром Коддом, возникла необходимость в новом типе DDL. Стандарт SQL (Structured Query Language), принятый в 1986 году, включил в себя операторы DDL (CREATE, ALTER, DROP) для определения таблиц, индексов, представлений и ограничений целостности. Это стало доминирующим подходом в реляционных базах данных.

С развитием интернета и обмена данными между приложениями в 1990-х годах возникла потребность в языках, не привязанных к конкретной СУБД. Появились DTD (Document Type Definition) и XML Schema (XSD) для описания структуры XML-документов. В 2010-х годах с ростом популярности JSON как формата обмена данными были разработаны JSON Schema и OpenAPI Specification (ранее Swagger) для описания API и структур данных.

Классификация

Языки описания данных можно классифицировать по нескольким признакам.

По сфере применения

  • Языки описания схем баз данных. Предназначены для определения структуры таблиц, полей, связей и ограничений в реляционных, объектно-ориентированных или графовых базах данных. Примеры: SQL DDL, DDL для NoSQL-систем (например, Cassandra Query Language DDL), язык описания данных для объектных баз данных (ODMG DDL).
  • Языки описания форматов обмена данными. Используются для задания структуры сообщений, документов или файлов, передаваемых между системами. Примеры: XML Schema (XSD), JSON Schema, Protocol Buffers (protobuf), Apache Avro, Thrift IDL.
  • Языки описания метаданных. Служат для аннотирования данных, описания их происхождения, качества и контекста. Примеры: Dublin Core, RDF Schema (RDFS), OWL (Web Ontology Language), SPARQL (для запросов к RDF-данным).
  • Языки описания интерфейсов (IDL). Определяют сигнатуры функций, типы параметров и возвращаемых значений для удалённого вызова процедур (RPC) или веб-сервисов. Примеры: CORBA IDL, WSDL (Web Services Description Language), OpenAPI Specification, GraphQL Schema Definition Language.

По степени формальности

  • Формальные языки с чётким синтаксисом и семантикой. Определяются грамматиками (например, BNF) и поддерживаются инструментами валидации. Примеры: SQL DDL, XSD, JSON Schema.
  • Полуформальные или неформальные соглашения. Используются в виде текстовых описаний, диаграмм (например, ER-диаграммы) или комментариев в коде. Не имеют строгой машинной интерпретации, но служат для человеческого понимания.

Основные характеристики

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

  • Определение типов данных. Задание атомарных типов (целые числа, строки, даты, булевы значения) и составных типов (массивы, записи, перечисления). В некоторых языках (например, в XML Schema) поддерживается наследование типов.
  • Структурирование. Определение иерархии, последовательности и повторяемости элементов. В реляционных DDL это таблицы и столбцы, в XML/XSD — элементы и атрибуты, в JSON Schema — объекты и массивы.
  • Ограничения целостности. Правила, которым должны удовлетворять данные. Включают обязательность полей, диапазоны значений, уникальность, ссылочную целостность (внешние ключи), регулярные выражения.
  • Аннотации и метаданные. Возможность добавлять описания, комментарии, версии, информацию о происхождении данных. В современных языках (например, в OpenAPI) это часто реализуется через поля description, example, deprecated.
  • Расширяемость. Возможность определять пользовательские типы, наследовать и комбинировать существующие. Например, в XML Schema можно создавать сложные типы на основе простых.

Применение

Базы данных

В реляционных СУБД (PostgreSQL, MySQL, Oracle) DDL используется для создания и изменения схемы базы данных. Оператор CREATE TABLE определяет столбцы, их типы и ограничения (PRIMARY KEY, FOREIGN KEY, NOT NULL, UNIQUE). Оператор ALTER TABLE позволяет модифицировать структуру существующих таблиц. Без DDL невозможно организовать хранение и извлечение структурированных данных.

Обмен данными между системами

При интеграции приложений, особенно в микросервисной архитектуре, языки описания данных обеспечивают контракт между сервисами. Например, с помощью JSON Schema можно описать формат запроса и ответа REST API. OpenAPI Specification (OAS) позволяет документировать весь API, включая эндпоинты, параметры, тела запросов и ответов. Protocol Buffers (разработка Google) и Apache Avro используются для сериализации данных в высокопроизводительных системах, таких как Apache Kafka.

Веб-разработка

XML Schema (XSD) широко применяется для описания структуры XML-документов, используемых в веб-сервисах (SOAP), конфигурационных файлах (например, в Spring Framework) и форматах обмена (например, RSS, Atom). JSON Schema, в свою очередь, является стандартом для описания JSON-документов, используемых в REST API, конфигурациях (например, в Docker Compose) и схемах данных NoSQL-баз (например, MongoDB).

Научные исследования и семантический веб

В научных областях, таких как биоинформатика, геоинформатика и астрономия, языки описания данных используются для стандартизации форматов обмена данными. Например, RDF Schema (RDFS) и OWL (Web Ontology Language) — это языки для описания онтологий и метаданных в семантическом вебе. Они позволяют связывать данные из разных источников и делать их машинно-читаемыми.

Примеры языков

SQL DDL

Стандартный язык описания данных для реляционных баз данных. Пример определения таблицы:

``sql CREATE TABLE Employees ( EmployeeID INTEGER PRIMARY KEY, FirstName VARCHAR(50) NOT NULL, LastName VARCHAR(50) NOT NULL, HireDate DATE, DepartmentID INTEGER, FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID) ); ``

JSON Schema

Язык описания структуры JSON-документов. Пример схемы для объекта «Пользователь»:

``json { "$schema": "http://json-schema.org/draft-07/schema#";, "type": "object", "properties": { "id": { "type": "integer" }, "name": { "type": "string" }, "email": { "type": "string", "format": "email" }, "age": { "type": "integer", "minimum": 0, "maximum": 150 } }, "required": ["id", "name", "email"] } ``

XML Schema (XSD)

Язык описания структуры XML-документов. Пример схемы для элемента «Книга»:

``xml <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">; <xs:element name="Book"> <xs:complexType> <xs:sequence> <xs:element name="Title" type="xs:string"/> <xs:element name="Author" type="xs:string"/> <xs:element name="Year" type="xs:integer"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> ``

Protocol Buffers (protobuf)

Язык описания данных для сериализации структурированных данных, разработанный Google. Пример описания сообщения:

``protobuf message Person { required int32 id = 1; required string name = 2; optional string email = 3; repeated string phone_numbers = 4; } ``

Критика и ограничения

  • Сложность и избыточность. Некоторые языки, особенно ранние версии XML Schema, критикуются за громоздкость и сложность синтаксиса, что затрудняет их написание и поддержку вручную.
  • Несовместимость. Разные языки описания данных не всегда совместимы друг с другом. Например, схема, написанная на JSON Schema, не может быть напрямую использована для валидации XML-документов.
  • Отсутствие единого стандарта. В некоторых областях (например, для описания графовых баз данных) нет общепринятого стандарта, что приводит к фрагментации.
  • Эволюция схем. Изменение схемы данных (миграция) может быть трудоёмким, особенно в распределённых системах, где требуется обратная совместимость. Некоторые языки (например, Avro) поддерживают эволюцию схем, но это не всегда тривиально.

Интересные факты

  • Первый язык описания данных для реляционной модели был предложен Эдгаром Коддом в 1970 году, но он не был реализован. Практические реализации появились позже, в 1970-х годах.
  • Язык описания данных для XML (XSD) был разработан на основе DTD, но значительно расширил его возможности, включая поддержку пространств имён, типов данных и наследования.
  • JSON Schema, несмотря на свою популярность, долгое время не имела официального стандарта. Первая версия (draft-01) была опубликована в 2011 году, а стабильная версия (draft-07) — в 2018 году. В 2020 году была опубликована версия 2020-12, которая стала основой для стандарта IETF.
  • В России языки описания данных активно используются в государственных информационных системах, например, для описания форматов электронных документов в системе межведомственного электронного взаимодействия (СМЭВ) и в Единой системе нормативно-справочной информации (ЕСНСИ).

Источники

  • Кодд, Э. Ф. (1970). A Relational Model of Data for Large Shared Data Banks. Communications of the ACM.
  • Международный стандарт ISO/IEC 9075:2016 (SQL:2016). Часть 2: Foundation (SQL/Foundation).
  • Спецификация XML Schema Part 1: Structures (W3C Recommendation, 2004).
  • Спецификация JSON Schema (draft-07, 2018).
  • Документация Protocol Buffers (Google Developers).
  • Документация OpenAPI Specification (OpenAPI Initiative).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →