Тип значения
Правило, которому подчиняется значение атрибута: вид значения и ограничения — границы, перечень вариантов либо справочник.
1. Назначение
Тип значения отвечает на два вопроса сразу: что можно вписать в поле и сколько значений допустимо. Второе не менее важно первого: на бумажной форме сосуществуют поля, где отмечается ровно одна клетка, и поля, где отмечается сколько угодно, — и без явного различия Сервис не отличит ошибку распознавания от верно прочитанной карты.
Тип именован и переиспользуется: «степень повреждения» — один тип на шесть полей листа сохранности, «исполнитель» — на мониторинг и таблицу экспертов. После того как общий словарь атрибутов упразднён, тип значения — единственное, что виды документов делят между собой, и делят осознанно: его выбирают, описывая атрибут.
Отсюда обязанность интерфейса ведения: показывать, где тип используется. Правка типа меняет поведение всех полей, которые на него ссылаются, — в этом его смысл, но вслепую такую правку делать нельзя.
Вид значения (kind) — не справочник, а перечень возможностей системы: добавить
седьмой вид значит написать разбор ограничений, отрисовку поля, проверку ввода
и формат в запросе к модели. Администратор такого не заводит.
2. Ограничения по видам типов
Ограничения есть у любого вида, но означают то, что осмысленно именно для него:
| Вид типа | Что означают ограничения | Откуда берутся значения | Пример |
|---|---|---|---|
| Строка | длина значения | ввод | заглавие: от 1 до 500 знаков |
| Целое | диапазон значения | ввод | количество страниц: от 1 до 5000 |
| Вещественное | диапазон значения, знаки после запятой | ввод | величина pH: от 0 до 14 |
| Дата | диапазон значения | ввод | время создания рукописи: от 900 до текущего года |
| Отметка | ограничений нет | ввод | «Реставрация задано» |
| Выбор из перечисления | количество выбранных вариантов | перечисление в самом типе | тиснение: слепое, золотое, другие виды; не более трёх |
| Выбор из справочника | количество выбранных значений | справочник | материалы основы: сколько угодно |
Через количество выражается кратность поля: не более одного значения — выбор одного (степень повреждения); не менее и не более одного — обязательный выбор одного (тип знаковой информации); более одного — множественный выбор (материалы основы, украшения).
Одиночная отметка вынесена в свой вид, а не выражена выбором из набора в одно значение: таких полей на форме больше всего, и через перечисление они читались бы хуже.
Целое и вещественное разделены по той же причине, по которой отметка отделена от выбора:
разница видна распознавателю. У количества страниц дробной части не бывает, и 5,83
в этом поле — ошибка чтения, а не значение; у величины pH, наоборот, запятая обязательна,
и прочитанное 583 разумно понимать как 5,83. Одним числовым видом это не выразить.
3. Хранение ограничений
Вид типа хранится отдельным полем, ограничения — одним значением в формате JSON. Отдельной таблицы на каждый вид значения не заводим: разложение на «тип строки», «тип даты», «тип выбора» дало бы целостность ценой соединений и пяти таблиц вместо одной.
Вид при этом наружу вынесен намеренно: без него нельзя ответить на вопрос «покажи все атрибуты-даты», не разбирая JSON в каждой записи, — а такие вопросы возникают при настройке распознавания.
Цена решения: тип перестаёт переиспользоваться так, как переиспользовался бы справочник типов. Ограничения строк и дат у каждого поля всё равно свои, а общие наборы значений остаются справочниками, поэтому потеря невелика.
4. Где живут значения набора
Значения задаются в ограничениях самого типа, парами «код — значение», в порядке, в каком они напечатаны на бланке:
вид = choice; значения = [a: «Кожа»; b: «Пергамент»; c: «Ткань»; d: «Бумага»;
e: «Другое»; 0: «Отсутствует»]; min = 0; max = 1
Код — часть данных, а не порядковый номер. У заказчика это буква подполя ИРБИС,
и в АБИС уходит именно она, поэтому код задаётся явно и не меняется. Один и тот же
a означает «Кожа» в одном типе и «Слепое» в другом — код уникален внутри своего типа,
и этого достаточно.
Прежний критерий — «набор нужен двум и более атрибутам, значит справочник» — отпал вместе со словарём атрибутов. Атрибут теперь принадлежит виду и всегда один, так что по этой букве справочником было бы всё. Переиспользование обеспечивает сам тип: «степень повреждения» — один тип на шесть полей листа сохранности.
Остался вопрос объёма и ведения. Набор из четырёх значений живёт в ограничениях
без затей. Набор из пятисот — нет: его ищут, пополняют и правят по одному значению,
а ограничения переписываются целиком. Для таких наборов оставлен вид ref: значения
ведутся снаружи, тип на них ссылается. Пока он не используется — первым кандидатом
станет язык издания, 589 значений; хранилище значений появится тогда же, когда
понадобится.
Свойства
| Свойство | Тип | Описание |
|---|---|---|
Id | Guid | Идентификатор типа. |
Code | String | Код типа, по которому на него ссылаются атрибуты. |
Name | String | Наименование типа. |
Constraints | String | Ограничения вида в виде JSON: границы, перечень вариантов, код справочника. Состав зависит от вида типа. |
Kind | ValueKind | Вид типа — отдельным полем, не внутри ограничений. |
Структурные связи
Используется
- Документ Справочники заказчика