Описание структуры данных

Материал из Гостопедии
Перейти к навигации Перейти к поиску

Структурой данных здесь будем называть информационное средство, подобное объекту JSON или документу XML по своей логике и внутреннему устройству. Поступим так во избежание избыточного формализма, а также учитывая, что речь пойдет в первую очередь именно о них. Ключевые черты таких структур — иерархичность и разветвленность. Любую структуру данных, например, объект в оперативной памяти, созданный программой на языке JavaScript или Python, можно удовлетворительно описать с помощью предлагаемых ниже приемов. То же касается других способов представления иерархий, таких, как YAML.

Общий подход

Прямолинейное описание иерархии, даже не слишком «развесистой», обычно выходит громоздким и сложным для восприятия. Альтернатива ему — расположение материала в документе каскадом от простого к сложному.

Разделим структуру данных на части, каждая из которых представляет собой «плоский» набор параметров, и выделим их описания в обозримые блоки. В каждом блоке опишем семантику набора параметров в целом и каждого параметра в отдельности. Описания параметров должны опираться на описания типов данных.

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

Разместим блоки в документе по следующим правилам.

  • Каждый смысловой блок должен быть вынесен в самостоятельный раздел документа.
  • Чем ниже уровень иерархии смыслового блока в структуре данных, тем раньше он должен быть описан.
  • Технический блок должен быть описан внутри блока «родительского» уровня иерархии.

Примеры

Описание структуры объекта JSON

Структуры данных

Посадочное место в кинозале

Посадочное место в кинозале представлено объектом со следующей структурой.

Свойство Тип Значение Пример Кратность или значение по умолчанию
rowNo Number Номер ряда 10 Обяз.
seatNo Number Номер кресла в ряду 22 Обяз.

Пример

{
    "rowNo":  10,
    "seatNo": 22
}

Билет на киносеанс

Билет на киносеанс представлен объектом со следующей структурой.

Свойство Тип Значение Пример Кратность или значение по умолчанию
ticketNo String Уникальный номер билета ABC12345 Обяз.
screeningDateTime Время киносеанса Дата и время начала киносеанса в часовом поясе кинотеатра 2024-08-12 21:00 Обяз.
spectators Массив объектов типа «права зрителя» Предоставленные зрителям права на посещение киносеанса Не менее одного элемента
usedFlag Boolean Флаг, означающий, что билет уже был использован false Обяз.

Объект типа «права зрителя» отражает набор прав, предоставляемых зрителю при посещении киносеанса. Структура объекта приведена ниже.

Свойство Тип Значение Пример Кратность или значение по умолчанию
setOfPrivileges Набор привилегий Предоставленный зрителю набор привилегий vip regular
seat Объект типа «Посадочное место в кинозале» Предоставленное зрителю посадочное место в кинозале Обяз.

Пример

{
    "ticketNo": "ABC12345",
    "cinema": "Прогресс",
    "address": "Россия, г. Глюкославль, ул. Красных айтишников 32",
    "screanongDateTime": "2024-08-11 12:00",
    "spectators": [
        {
            "setOfPrivileges": "regular",
            "seat": {
                "rowNo":  10,
                "seatNo": 22
            }
        },
        {
            "setOfPrivileges": "preferential",
            "seat": {
                "rowNo":  10,
                "seatNo": 23
            }
        }
    ]
}

Описание документа XML

Структуры данных

Посадочное место в кинозале

Посадочное место в кинозале представлено элементом <seat/> со следующей структурой.

Атрибут Тип Значение Пример Кратность или значение по умолчанию
@rowNo positiveInteger Номер ряда 10 Обяз.
@seatNo positiveInteger Номер кресла в ряду 22 Обяз.

Пример

<seat rowNo="10" seatNo="22"/>

Билет на киносеанс

Билет на киносеанс представлен элементом <ticket/> со следующей структурой.

Атрибут или дочерний элемент Тип Значение Пример Кратность или значение по умолчанию
@ticketNo string Уникальный номер билета ABC12345 Обяз.
@screeningDateTime dateTime Дата и время начала киносеанса в часовом поясе кинотеатра 2024-08-12 21:00:00 Обяз.
<spectator/> Права зрителей Предоставленные зрителям права на посещение киносеанса Не менее одного элемента
@usedFlag string Флаг, означающий, что билет уже был использован false Обяз.

Элемент <spectator/> отражает набор прав, предоставляемых зрителю при посещении киносеанса. Структура элемента приведена ниже.

Атрибут или дочерний элемент Тип Значение Пример Кратность или значение по умолчанию
@setOfPrivileges Набор привилегий Предоставленный зрителю набор привилегий vip regular
<seat/> Посадочное место в кинозале Предоставленное зрителю посадочное место в кинозале Обяз.

Пример

<ticket
    ticketNo="ABC12345"
    cinema="Прогресс"
    address="Россия, г. Глюкославль, ул. Красных айтишников 32"
    screanongDateTime="2024-08-11 12:00:00"
>
    <spectator setOfPrivileges="regular">
        <seat rowNo="10" seatNo="21"/>
    </spectator>
    <spectator setOfPrivileges="preferential">
        <seat rowNo="10" seatNo="22"/>
    </spectator>
</ticket>