Создание базовой схемы домена

Данное руководство описывает процесс создания схемы домена на примере домена индикаторов компрометации.

О доменах и сущностях

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

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

В данном руководстве описано создание схемы домена на примере индикаторов компрометации. Индикатор компрометации — это сущность, которая хранит информацию о потенциальной или подтвержденной угрозе. В описанной схеме индикатор имеет следующие основные характеристики:

  • поле «Тип, значения которого заданы фиксированным списком: IP-адрес, домен, URL, email, хэш, аккаунт, файл.

  • конкретное значение, например, 192.0.2.0, example.net, mail@example.com и т. д.

В создании схемы можно выделить следующие этапы:

Заполнение метаданных схемы

Заполните поля метаданных на верхнем уровне схемы домена:

  • id: уникальный идентификатор схемы. Идентификатор должен представлять собой FQDN — Fully Qualified Domain Name.

  • name: название схемы. Допустимы строчные и прописные буквы латинского и кириллического алфавитов, цифры, точки, подчеркивания и дефисы. В названии не должно быть пробелов.

  • version: версия схемы согласно стандартам Semantic Versioning.

  • type: укажите тип domain.

  • author (опциональное): имя и контактные данные автора.

  • description (опциональное): краткое описание назначения домена.

  • status (опционально): статус разработки текущей версии.

  • date (опционально): дата создания схемы.

  • tags (опциональное): теги для классификации. Заключаются в квадратные скобки и разделяются запятыми.

Комментарии в схеме домена начинаются с символа решетки.
Пример заполненных метаданных
id: iocs.test
type: domain
version: 0.0.1
name: IOCs Domain
description: Домен индикаторов компрометации
status: test
date: 2025-08-01
author: John Doe
tags: [iocs]

Определение сущности и типов данных

Создание сущности

Массив сущностей задается в поле entities схемы домена. Заполните поля названия и описания сущности:

  • id: уникальный идентификатор сущности. Может содержать только прописные и строчные буквы латинского алфавита, цифры и подчеркивание.

  • name (опциональное): название сущности;

  • description (опциональное): краткое описание сущности.

Пример описания сущности
entities:
  # Сущность Индикатор.
  - id: Ioc
    name: Индикатор
    description: Индикатор компрометации

Описание атрибутов сущности

Атрибут — это поле, описывающее отдельную характеристику объекта. Массив атрибутов задается в поле attributes в описании сущности.

Кроме обычных атрибутов, для каждого объекта система автоматически создает набор системных атрибутов и заполняет их значения, например, время создания и изменения объекта.

Заполните для каждого атрибута поля:

  • id: уникальный идентификатор атрибута;

  • name: название атрибута;

  • description: описание атрибута;

  • dataType: тип данных атрибута;

  • readonly (опционально): переключатель возможности редактирования атрибута.

Опишем атрибут, который может иметь произвольные значения в рамках заданного типа:

Пример описания атрибутов
entities:
  # Сущность Индикатор.
  - id: Ioc
    ...
    attributes:
      - id: value
        name: Значение
        description: Значение индикатора компрометации
        # Тип - строка.
        dataType: String
      ...

Описание атрибута с пользовательским типом данных "перечисление"

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

Пользовательские типы данных описываются в поле dataTypes на верхнем уровне схемы домена. Заполните поля:

  • id: уникальный идентификатор пользовательского типа данных;

  • name (опциональное): название типа данных;

  • description (опциональное): описание типа данных;

  • dataType: укажите тип Enum;

  • values: массив возможных значений в типе данных.

Для каждого значения в перечислении укажите:

  • id: идентификатор значения;

  • name (опциональное): название значения;

  • description (опциональное): описание значения.

Опишем перечисления для атрибута, который хранит типы индикаторов:

Пример пользовательского типа данных
dataTypes:
  - id: enumIocTypes
    name: Типы индикаторов компрометации
    dataType: Enum
    values:

    - id: Account
      name: Аккаунт
    - id: File
      name: Файл
    - id: Domain
      name: Домен
    - id: URL
      name: URL
    - id: Email
      name: Email
    - id: IP
      name: IP
    - id: IPv6
      name: IPv6
    - id: MD5Hash
      name: Хэш MD5
    - id: SHA1Hash
      name: Хэш SHA-1
    - id: SHA256Hash
      name: Хэш SHA-256

Создадим атрибут с пользовательским типом данных:

Пример атрибута с пользовательским типом данных
entities:
  # Сущность Индикатор.
  - id: Ioc
    ...
    attributes:
      ...
      - id: type
        name: Тип
        description: Тип индикатора компрометации
        # Ссылка на пользовательский тип данных.
        dataType: enumIocTypes

Настройка интерфейса

Интерфейс для работы с объектами позволяет просматривать объекты и выполнять с ними различные действия.

Действия, доступные в домене, описываются в поле actions.

Интерфейс объектов и списков объектов в различных контекстов описывается в поле views схемы домена. Сюда, например, относятся наборы отображаемых полей в модальных окнах и панелях, а также виджеты для действий над объектами. Все описания привязываются к конкретному идентификатору сущности.

Для настройки интерфейса объекта необходимо описать:

  • В поле widgets-- виджеты для отображения действий с объектами, связей между объектами и их атрибутов.

    Виджеты описываются только в интерфейсе объекта. Ссылаться на описанные виджеты можно из описаний как интерфейса объекта, так и списка объектов.
  • В поле groups — группы элементов:

    • блоки, включающие объявленные ранее виджеты;

    • вкладки, состоящие из блоков, а также формы создания и редактирования объектов;

  • В поле views — панели и модальные окна, состоящие из объявленных групп.

Настроим базовый интерфейс с таблицей объектов, кнопками для создания и удаления объектов, а также возможностью просмотра информации об объекте в боковой панели при нажатии на строку.

Отображаемое название сущности

Название сущности, отображаемое в интерфейсе, можно задать в поле label в описании сущности. Название может содержать шаблоны со ссылками на атрибуты. В интерфейсе на месте шаблонов будут подставлены значения соответствующих атрибутов объекта.

Добавим в название оба атрибута сущности:

Пример описания сущностей
entities:
  # Сущность Индикатор.
  - id: Ioc
    ...
    # Ссылки на атрибуты сущности.
    label: "{type}: {value}"
    ...

Создание представления объекта

Заполните следующие поля в описании интерфейса:

  • id: идентификатор интерфейса;

  • type: укажите тип интерфейса entity;

  • entity: ссылка на сущность.

Пример описания интерфейса объекта
views:
  # Представление Индикатора.
  - id: viewIoc
    type: entity
    # Сущность Индикатор.
    entity: Ioc
    ...

Настройка создания объекта

Чтобы настроить создание объекта в домене, опишите в схеме:

Настройка виджетов атрибутов

Виджеты атрибутов используются для отображения определенных атрибутов сущности. Виджеты ссылаются на атрибуты, объявленные ранее в схеме домена, или на системные атрибуты.

Создайте в блоке widgets записи для каждого виджета со следующими полями:

  • id: уникальный идентификатор виджета;

  • type: укажите тип виджета attribute.

  • attribute: ссылка на отображаемый атрибут.

  • description (опциональное): описание виджета.

Пример описания виджетов атрибутов
views:
  # Представление Индикатор.
  - id: viewIoc
    ...
    widgets:
      - id: editors_iocType
        type: attribute
        # Ссылка на атрибут типа.
        attribute: type
        description: Поле для ввода типа индикатора

      - id: editors_iocValue
        type: attribute
        # Ссылка на атрибут значения.
        attribute: value
        description: Поле для ввода значения индикатора
      ...

Настройка формы

Чтобы описать форму создания индикатора, создайте в поле groups запись со следующими полями:

  • id: идентификатор группы элементов;

  • description (опциональное): описание группы;

  • type: укажите тип form;

  • layout: настройки взаимного расположения элементов в группе.

    • direction — направление, в котором размещаются элементы: column — по вертикали, row — по горизонтали.

  • components: массив ссылок на элементы группы, в данном случае на виджеты, объявленные ранее.

Пример описания блока формы
views:
  # Представление Индикатора.
  - id: viewIoc
    ...
    groups:
      - id: blocks_forms_newIoc
        description: Блок формы для создания индикатора
        type: form
        layout:
          # Вертикальное расположение.
          direction: column
        components:
          # Ссылки на виджеты атрибутов Индикатора.
          - widget: editors_iocType
          - widget: editors_iocValue

Настройка модального окна

Чтобы описать модальное окно, создайте в поле views в описании интерфейса объекта запись со следующими полями:

  • id: уникальный идентификатор модального окна;

  • description (опциональное): описание модального окна;

  • type: укажите тип modal

  • form: ссылка на объявленную группу с типом form;

  • label (опциональное): заголовок модального окна.

Пример описания модального окна
views:
  # Представление Индикатора.
  - id: viewIoc
    ...
    views:
      - id: forms_newIoc
        description: Форма создания индикатора
        type: modal
        # Ссылка на Блок формы.
        form: blocks_forms_newIoc
        label: Добавление индикатора

Настройка действия создания

Создайте в поле actions запись со следующими полями:

  • id: уникальный идентификатор действия;

  • name: название действия;

  • type: укажите тип действия open_modal — открытие модального окна;

  • modal: ссылка на модальное окно, которое вызывается при данном действии;

  • entity: сущность, с которой производится действие;

  • operation: тип операции над объектом. Для действий с открытием модального окна доступны:

    • create — добавление объекта;

    • edit — изменение выбранного объекта.

    Для данного действия укажите тип create.

  • description (опциональное): описание действия.

Пример описания действия
actions:
  # Действия с индикатором.
  - id: actions_createIoc
    name: Добавить
    # Тип - открытие модального окна.
    type: open_modal
    # Ссылка на модальное окно.
    modal: forms_newIoc
    # Операция - создание.
    operation: create
    # Ссылка на сущность.
    entity: Ioc
    description: Открыть модальное окно создания индикатора
    ...

Настройка виджета действий

Виджеты действий используются для отображения действий над объектами. Виджеты ссылаются на действия, объявленные ранее в схеме домена.

Создайте в поле widgets запись для виджета со следующими полями:

  • id: уникальный идентификатор виджета;

  • type: укажите тип виджета action.

  • action: ссылка на действие, запускаемое при нажатии на виджет;

  • control: элемент управления, включает поля:

    • type: укажите тип regular_button;

    • label: название действия в интерфейсе;

  • description (опциональное): описание виджета.

Пример описания виджета действий
views:
  # Представление Индикатора.
  - id: viewIoc
    ...
    widgets:
      - id: buttons_createIoc
        type: action
        # Ссылка на действие.
        action: actions_createIoc
        description: Кнопка, которая запускает действие создания индикатора. Действие открывает модальную форму создания записи.
        control:
          type: regular_button
          label: Добавить
      ...

Настройка панели просмотра объекта

Чтобы настроить просмотр объекта, опишите в схеме домена:

Настройка блока

Чтобы описать блок с виджетами атрибутов, создайте в поле groups запись со следующими полями:

  • id: идентификатор блока;

  • description (опциональное): описание блока;

  • type: укажите тип block;

  • layout: настройки взаимного расположения элементов в блоке, включает поле direction — направление размещения.

  • components: массив ссылок на элементы блока, в данном случае на виджеты атрибутов, уже объявленные ранее.

Пример описания блока информации
views:
  # Представление Индикатора.
  - id: viewIoc
    ...
    groups:
      - id: blocks_infoIoc
        description: Информация об индикаторе
        type: block
        layout:
          # Расположение - вертикальное.
          direction: column
        components:
          # Ссылки на виджеты атрибутов Индикатора.
          - widget: editors_iocType
          - widget: editors_iocValue

Настройка вкладки

Чтобы добавить блок с виджетами на панель, создайте в поле groups запись вкладки со следующими полями:

  • id: идентификатор группы;

  • description (опциональное): описание группы;

  • type: укажите тип tab;

  • label (опциональное): заголовок вкладки.

  • components: массив ссылок на элементы группы, в данном случае на блок, объявленный ранее.

Пример описания вкладки информации
views:
  # Представление Индикатора.
  - id: viewIoc
    ...
    groups:
      - id: tabs_infoIoc
        description: Информация об индикаторе
        # Тип группы - вкладка.
        type: tab
        label: Детали
        components:
          # Ссылка на блок информации.
          - block: blocks_infoIoc

Настройка панели

Чтобы описать панель, создайте в поле views в описании интерфейса объекта запись со следующими полями:

  • id: уникальный идентификатор панели;

  • description (опциональное): описание панели;

  • type: укажите тип panel;

  • label (опциональное): заголовок панели;

    Чтобы в названии отображались значения атрибутов конкретного объекта, используйте шаблон со ссылками на атрибуты в фигурных скобках.
  • tabs: массив ссылок на объявленные вкладки.

Пример описания панели
views:
  # Представление Индикатора.
  - id: viewIoc
    ...
    views:
      - id: panels_infoIoc
        description: Детали индикатора
        type: panel
        # Шаблоны для подстановки значений атрибутов.
        label: "Ioc {type}: {value}"
        tabs:
          # Ссылка на вкладку.
          - tab: tabs_infoIoc

Настройка действия просмотра

Создайте в поле actions запись со следующими полями:

  • id: уникальный идентификатор действия;

  • name: название действия;

  • type: укажите тип действия open_panel;

  • panel: ссылка на панель, которая вызывается при данном действии;

  • entity: сущность, с которой производится действие;

  • description (опциональное): описание действия.

Пример описания действия
actions:
  # Действия с индикатором.
  ...
  - id: actions_openIocPanel
    name: Детали
    # Тип - открытие панели.
    type: open_panel
    # Ссылка на панель.
    panel: panels_infoIoc
    entity: Ioc
    description: Открыть панель с информацией об индикаторе
  ...

Настройка удаления объекта

Настройка действия удаления

Создайте в поле actions запись со следующими полями:

  • id: уникальный идентификатор действия;

  • name: название действия;

  • type: укажите тип действия bulk — массовое, так как это действие в списке объектов;

  • entity: сущность, с которой производится действие;

  • operation: укажите действие remove

  • description (опциональное): описание действия.

Пример описания действия
actions:
  # Действия с индикатором.
  - id: actions_bulkRemoveIocs
    name: Удалить
    # Тип - удаление.
    type: remove
    # Ссылка на сущность Индикатор.
    entity: Ioc
    description: Удалить индикатор

Настройка виджета действий

Создайте в поле widgets запись для виджета со следующими полями:

  • id: уникальный идентификатор виджета;

  • type: укажите тип виджета action.

  • action: ссылка на действие, запускаемое при нажатии на виджет;

  • control: элемент управления, включает поля:

    • type: укажите тип regular_button;

    • label: название действия в интерфейсе;

  • description (опциональное): описание виджета.

Пример описания виджета действий
views:
  # Представление Индикатора.
  - id: viewIoc
    ...
    widgets:
      ...
      - id: buttons_removeIoc
        type: action
        # Ссылка на действие удаления.
        action: actions_bulkRemoveIocs
        description: Кнопка для удаления индикаторов
        control:
          type: regular_button
          label: Удалить

Настройка интерфейса списка объектов

Чтобы настроить интерфейс списка объектов, опишите в схеме домена:

Создание представления списка

Заполните следующие поля в описании интерфейса:

  • id: идентификатор интерфейса;

  • type: укажите тип интерфейса list;

  • source: источник списка объектов, включает поля:

    • type: укажите тип источника operational;

    • entity: ссылка на сущность;

  • label (опциональное): название представления в интерфейсе.

Пример описания интерфейса списка объектов
views:
  # Представление список индикаторов.
  - id: lists_iocs
    type: list
    source:
      type: operational
      # Ссылка на сущность Индикатор.
      entity: Ioc
    label: Индикаторы компрометации

Настройка таблицы списка

Массив столбцов задается в поле columns внутри поля table в описании интерфейса. Описание столбца включает следующие поля:

  • id: уникальный идентификатор столбца;

  • attribute: ссылка на атрибут, значение которого отображается в столбце;

  • label: заголовок столбца;

  • layout (опциональное): настройки отображения столбца. Включает поле width со следующими настройками ширины столбца в пикселях:

    • default: ширина по умолчанию;

    • min: минимальная ширина;

    • max: максимальная ширина.

Пример описания таблицы объектов
views:
  # Представление Списка индикаторов.
  - id: lists_iocs
    ...
    table:
      columns:
        - id: type
          # Ссылка на атрибут типа.
          attribute: type
          label: Тип
          layout:
            width:
              default: 100
              min: 50
              max: 100

        - id: value
          # Ссылка на атрибут значения.
          attribute: value
          label: Значение
          layout:
            width:
              default: 100
              min: 50
              max: 150

        - id: createdAt
          # Ссылка на системный атрибут.
          attribute: createdAt
          label: Дата создания
          layout:
            width:
              default: 100
              min: 50
              max: 100
    ...

Настройка действий в таблице

Укажите в поле selection значение true, чтобы можно было выбрать строки таблицы для удаления объектов.

Создайте запись действия в поле actions внутри поля table в описании интерфейса. Запись включает следующие поля:

  • type: укажите тип действия row_click;

  • action: ссылка на объявленное действие.

Пример описания действий в таблице
views:
  # Представление Списка индикаторов.
  - id: lists_iocs
    ...
    table:
      ...
      selection: true
      actions:
        # Тип - однократное нажатие.
        - type: row_click
          # Ссылка на действие открытия панели просмотра.
          action: actions_openIocPanel

Настройка панели действий

Добавьте ссылки на объявленные в интерфейсе объекта виджеты действий в поле actionPanel в описании интерфейса списка.

Пример описания панели действий
views:
  # Представление Списка индикаторов.
  - id: lists_iocs
    ...
    actionPanel:
      # Ссылка на кнопку создания индикатора.
      - widget: buttons_createIoc
      # Ссылка на кнопку удаления индикатора.
      - widget: buttons_removeIocs
    ...

Массив пунктов меню домена задается в поле menus на верхнем уровне схемы. Создадим группу пунктов меню с названием домена, а также пункт со списком сущностей.

Заполните следующие поля:

  • id: уникальный идентификатор пункта меню;

  • route: компонент пути в адресной строке;

  • label: отображаемое название пункта меню;

  • type: укажите тип root_group для корневой группы и menu для пункта;

  • view: ссылка на представление списка объектов;

  • description (опциональное): описание пункта меню;

  • placement: расположение пункта в меню системы.

Пример описания пункта меню
menus:
  - id: menus_iocs
    # Компонент адреса в браузере, относящийся к разделу домена.
    route: /iocs
    label: "Индикаторы компрометации"
    # Тип - корневая группа.
    type: root_group
    description: Меню домена Индикаторы
    # Расположение в главном меню системы.
    placement: top
    items:
      # Идентификатор записи элемента меню для первого подраздела
      - id: IndicatorsMenu
        # Компонент адреса, относящийся к подразделу сущности в домене
        route: /iocs/indicators
        # Название пункта меню для подраздела Индикаторы.
        label: Индикаторы компрометации
        # Тип - пункт меню.
        type: menu
        # Ссылка на представление Списка индикаторов.
        view: lists_iocs
        # Описание пункта меню.
        description: Меню раздела Индикаторы.
        # Настройки отображения пункта меню

Пример схемы домена

Пример базовой схемы
id: iocs.test
type: domain
version: 0.0.1
name: IOCs Domain
description: Домен индикаторов компрометации
status: test
date: 2025-08-01
author: John Doe
tags: [iocs]

entities:
  - id: Ioc
    name: Индикатор
    label: "{type}: {value}"
    description: Индикатор компрометации

    attributes:
      - id: value
        name: Значение
        description: Значение индикатора компрометации
        dataType: String

      - id: type
        name: Тип
        description: Тип индикатора компрометации
        dataType: enumIocTypes

dataTypes:
  - id: enumIocTypes
    name: Типы индикаторов компрометации
    dataType: Enum
    values:

    - id: Account
      name: Аккаунт
    - id: File
      name: Файл
    - id: Domain
      name: Домен
    - id: URL
      name: URL
    - id: Email
      name: Email
    - id: IP
      name: IP
    - id: IPv6
      name: IPv6
    - id: MD5Hash
      name: Хэш MD5
    - id: SHA1Hash
      name: Хэш SHA-1
    - id: SHA256Hash
      name: Хэш SHA-256

menus:
  - id: menus_iocs
    route: /iocs
    label: "Индикаторы компрометации"
    type: root_group
    description: Меню домена Индикаторы
    placement: top
    items:
      - id: IndicatorsMenu
        route: /iocs/indicators
        label: Индикаторы компрометации
        type: menu
        view: lists_iocs
        description: Меню раздела Индикаторы.

actions:

  - id: actions_createIoc
    name: Добавить
    type: open_modal
    modal: forms_newIoc
    entity: Ioc
    operation: create
    description: Открыть модальное окно создания индикатора

  - id: actions_openIocPanel
    name: Детали
    type: open_panel
    panel: panels_infoIoc
    entity: Ioc
    description: Открыть панель с информацией об индикаторе

  - id: actions_bulkRemoveIocs
    name: Удалить
    type: remove
    entity: Ioc
    description: Удалить индикатор


views:
  - id: viewIoc
    type: entity
    entity: Ioc

    widgets:
      - id: editors_iocType
        type: attribute
        attribute: type
        description: Поле для ввода типа индикатора

      - id: editors_iocValue
        type: attribute
        attribute: value
        description: Поле для ввода значения индикатора

      - id: buttons_createIoc
        type: action
        action: actions_createIoc
        description: Кнопка, которая запускает действие создания индикатора. Действие открывает модальную форму создания записи.
        control:
          type: regular_button
          label: Добавить
      - id: buttons_removeIoc
        type: action
        action: actions_bulkRemoveIocs
        description: Кнопка для удаления индикаторов
        control:
          type: regular_button
          label: Удалить
    groups:
      - id: blocks_infoIoc
        description: Информация об индикаторе
        type: block
        layout:
          direction: column
          expandable: false
        components:
          - widget: editors_iocType
          - widget: editors_iocValue
      - id: tabs_infoIoc
        description: Информация об индикаторе
        type: tab
        label: Детали
        components:
          - block: blocks_infoIoc
      - id: blocks_forms_newIoc
        description: Блок формы для создания индикатора
        type: form
        layout:
          direction: column
        components:
          - widget: editors_iocType
          - widget: editors_iocValue
    views:
      - id: panels_infoIoc
        description: Детали индикатора
        type: panel
        label: "Ioc {type}: {value}"
        tabs:
          - tab: tabs_infoIoc

      - id: forms_newIoc
        description: Форма создания индикатора
        type: modal
        form: blocks_forms_newIoc
        label: Добавление индикатора

  - id: lists_iocs
    type: list
    source:
      type: operational
      entity: Ioc
    label: Индикаторы компрометации
    actionPanel:
      - widget: buttons_createIoc
      - widget: buttons_removeIoc
    table:
      columns:
        - id: type
          attribute: type
          label: Тип
          layout:
            width:
              default: 100
              min: 50
              max: 100

        - id: value
          attribute: value
          label: Значение
          layout:
            width:
              default: 100
              min: 50
              max: 150

        - id: createdAt
          attribute: createdAt
          label: Дата создания
          type: timestamp
          layout:
            width:
              default: 100
              min: 50
              max: 100

        - id: updatedAt
          attribute: updatedAt
          label: Дата изменения
          type: timestamp
          layout:
            width:
              default: 100
              min: 50
              max: 100
      selection: true
      actions:
        - type: row_click
          action: actions_openIocPanel

Была ли полезна эта страница?

Обратная связь