Онтология¶
Онтология представляет собой живой словарь поверх вашей модели данных. Каждый физический столбец сопоставляется термину, а столбцы с одним значением делят один термин, как бы по-разному оно ни было записано. У каждого термина могут быть определение, типизированные связи с другими терминами, список экспертов в предметной области и теги вроде pii, которые несёт каждый столбец с этим значением.
Это граф понятий, их определений и связей между ними. Provisa сопоставляет его с таблицами и столбцами, в которых хранятся значения, и благодаря этому может отвечать на вопросы о ваших данных. Термин остаётся черновиком, пока стюард его не утвердит, а достигает ли он данных, выводится из графа. Онтология отделена от метрик: термин говорит, что такое понятие, метрика говорит, как вычисляется число.
Этот общий словарь связывает язык бизнеса с физическими данными. ИИ-агенту, который знает, что «customer» обозначает каждый столбец с идентификатором клиента, не нужно гадать, какой из cust_id, customerId и CUSTOMER_KEY правильный. Все они сопоставляются одному термину, и термин несёт определение.
Классы, свойства и понятия¶
У каждого термина ровно одна роль, выведенная из того, что он привязывает. Вы никогда не задаёте её сами.
| Роль | Привязан к | Пример |
|---|---|---|
| Класс | Одной или нескольким таблицам или представлениям. Его экземпляры — их строки. | customer, привязывающий customers и crm_contacts |
| Свойство | Столбцам, которые не являются ключами. | customer email, содержащий customers.email |
| Понятие | Ничему напрямую. Оно достигает данных через свои связи. | revenue с рёбрами PART_OF от order amount и refund amount |
Термин бывает либо тем, либо другим. Provisa отказывается привязывать таблицу к термину, содержащему неключевые столбцы, и отказывается переносить неключевой столбец на термин, привязанный к таблицам. Каждый отказ называет термин и то, что он уже содержит.
Каждая таблица с ключом предлагает класс¶
Когда сохраняется таблица с первичным ключом, Provisa привязывает её к черновому термину класса, названному по понятию таблицы: orders предлагает order, order_lines предлагает order line. Таблицы одного понятия делят один класс. Таблица без первичного ключа не может быть классом, и её привязка отклоняется с указанием таблицы.
Привязка, которую вы делаете сами, в UI, в конфигурации или через Polly, считается курируемой. Синхронизация никогда её не переносит, а привязка таблицы к курируемому термину заменяет её черновое предложение. Если понятие уже является свойством с неключевыми столбцами, его таблицы не получают предложения; вместо этого онтология перечисляет их в разделе На проверку.
Ключи принадлежат классу¶
У первичного ключа нет собственного термина. Каждый его столбец, включая части составного ключа, ставит свою ссылку на класс своей таблицы.
Внешний ключ работает так же. Каждый столбец стороны «многие» объявленной связи ставит свою ссылку на класс целевой таблицы, как бы ни назывался столбец. manager_id в employees, указывающий обратно на employees, попадает на employee; роль «manager» живёт в имени связи. Столбец без объявленной связи является свойством, даже если его имя совпадает с классом.
Provisa размещает ссылки ключей только путём вывода: при каждой синхронизации таблицы, изменении связи или изменении класса таблицы. Ключевой столбец нельзя перенести вручную, и отказ называет столбец, его таблицу и его класс. Привяжите таблицу к другому термину, и её ключи сразу последуют за ней.
Одна сущность в нескольких таблицах¶
Экземпляры из разных таблиц различны, пока вы не скажете иное. Когда customers и crm_contacts описывают одного и того же клиента, отметьте связь между ними как одна сущность. Она должна соединять две таблицы, привязанные к одному классу, один к одному, по ключу каждой: первичному ключу или объявленному ограничению уникальности.
Пока на таблице есть связь «одна сущность», её класс нельзя отозвать или заменить. Сначала снимите отметку со связи.
Класс, привязанный к нескольким таблицам, которые связи «одна сущность» соединяют не все, отмечается в разделе На проверку как несвязанные таблицы.
Как выводятся термины¶
Provisa автоматически создаёт черновой термин из каждого имени столбца по детерминированному правилу нормализации: приведение регистра, разбиение по разделителям и camelCase, раскрытие сокращений и удаление замыкающих токенов-заместителей.
Раскрытие сокращений сопоставляет распространённые корпоративные сокращения их полным формам: cust → customer, txn → transaction, qty → quantity и так далее. И id, и key раскрываются в identifier. Таблица фиксирована и осторожна. Неоднозначные сокращения вроде st, min и no остаются как есть, чтобы ничего не было угадано неверно.
Удаление токенов-заместителей убирает замыкающий токен identifier, code, index или reference. Столбец с именем cust_id называет не сам идентификатор; он называет клиента через суррогатное значение. После удаления заместителя cust_id и customerId попадают на термин customer. Удаляются только замыкающие токены и никогда не удаляется последний оставшийся, поэтому одиночный столбец id раскрывается в identifier и на этом останавливается.
Дедупликация и есть цель. Правило детерминировано, поэтому cust_id, customerId и CUSTOMER_KEY все дают customer. Каждый столбец получает ссылку на этот единственный термин, и у курирования есть одно место для определения вместо трёх.
Ключевые столбцы пропускают это правило. Их ссылки идут к классу, как описано выше.
Общие фразы¶
Некоторые нормализованные фразы слишком общие, чтобы быть понятием сами по себе. Одиночный столбец name, date или identifier называет атрибут понятия своей таблицы, которого вне этой таблицы не существует. У сотрудников есть имена и у товаров есть имена, но это не одно и то же.
Когда фраза попадает в общий набор и доступен контекст таблицы, термин уточняется до <table concept> <phrase>: employees.first_name нормализуется в employee first name.
Общий набор включает существительные-атрибуты (name, date, status, type, amount, quantity), фразы журнала аудита (created_at, modified_by, submitted_timestamp) и ещё несколько, которые встречаются почти в каждой таблице.
Термины следуют бизнес-имени¶
Выведенный термин следует бизнес-имени столбца: его псевдониму, если разработчик модели задал его, и физическому имени в противном случае. Когда у usr_nm псевдоним user name, выведенный термин — user name, тогда как раскрытие usr_nm могло бы дать user number.
Задать столбцу псевдоним — более сильное исправление. Псевдоним доходит до каждой поверхности, читающей столбец (SQL, GraphQL, ИИ-агенты, каталог), так что модель везде описывает себя правильно. Переименование термина исправляет одну запись каталога и оставляет столбец с именем usr_nm для следующего читателя. Баннер «Черновик» в UI говорит об этом: сначала задайте столбцу псевдоним, а термин переименовывайте только тогда, когда имя столбца верно, а словарь нет.
Смена псевдонима столбца заново выводит его черновой термин, поэтому онтология следует за моделью и никогда не просит одно и то же исправление дважды. Как только куратор добавил к термину определение, связь, эксперта или тег, правка псевдонима оставляет столбец на месте, потому что эта работа принадлежит куратору и сохраняется.
Имена таблиц как путь доступа¶
Некоторые имена таблиц описывают путь доступа, а не понятие: user_by_name — это пользователь, найденный поиском по имени, а не отдельный вид сущности. Выводя понятие таблицы, Provisa обрезает имя на соединительном слове, поэтому user_by_name становится user, а orders_by_customer становится order.
Без обрезки user_by_name предложил бы класс user name, который столкнулся бы с настоящим атрибутом users.name. Обрезка применяется только к понятиям таблиц. В имени столбца by — часть составного существительного, поэтому pet_by_name и pet_name нормализуются в один термин, pet name.
Почему важны утверждение и привязка¶
Агенты и другая автоматизация находят данные, с которыми работают, через онтологию и ссылаются на неё. Агент начинает с термина, который утвердил человек. Он идёт по маршруту вниз к данным, надёжность которых он видит: привязанным или ещё ожидающим утверждения. Он приходит к таблицам и столбцам, которые читает с правами, правилами строк и масками своей роли. У каждого шага этого маршрута есть имя, которое агент может поставить в ссылку.
Поэтому два факта о термине определяют, что агент может с ним сделать. Люди задают его статус. Provisa вычисляет его привязку. Страница показывает их двумя отдельными чипами, и вы фильтруете по каждому.
Статус¶
Статус термина задаёт человек. Одновременно у термина один статус.
| Статус | Значение | Как термин его получает |
|---|---|---|
| Черновик | Ещё не утверждён. | Каждый выведенный термин начинается здесь, как и каждый созданный вами термин. |
| Утверждён | Решение стюарда: это словарь, с которым работают. | Стюард утверждает его. Для утверждения нужно определение. |
| Устаревший | На выходе. | Куратор делает устаревшим утверждённый термин, или курируемый термин теряет последний столбец. |
| Выведен из обращения | Вне работы, хранится как запись. | Куратор выводит его из обращения и называет преемника. |
Одно лишь определение ничего не утверждает. Утверждайте термин, когда его определение говорит, что бизнес под ним понимает.
Привязка¶
Привязка говорит, достигает ли термин данных. Её никто не задаёт: Provisa вычисляет её из связей термина каждый раз, когда меняется граф.
Привязка термина смотрит вниз по его собственным путям к данным. Путь идёт от термина по его связям к первому термину, который содержит столбец или таблицу: к термину на конце данных, который держит привязку к ним. Учитываются только термины строго между двумя концами. Сам термин никогда не идёт в счёт против собственной привязки, как и всё, что выше него.
| Привязка | Метка | Значение |
|---|---|---|
| Привязан | зелёный значок ⏚ | На каком-то пути вниз нет черновых терминов между термином и концом данных. |
| Привязан · путь ожидает утверждения | приглушённый значок ⏚ | На каждом пути вниз между ними есть черновой термин. Наведите указатель на значок: там написано «Достигает данных, но только через ещё не утверждённые термины». |
| Не привязан | нет | Ни один путь не достигает данных. |
Значок — это электрический символ заземления. Он стоит в списке терминов рядом с числом столбцов, на странице термина, перед именем термина в графах и в легенде графа. Всплывающий текст привязанного термина говорит, как далеко он достаёт, например «Привязан: достигает данных в 3 столбцах»; экранный диктор читает те же слова.
Некоторые случаи прямо следуют из правила:
- Черновое понятие, которое вы составляете над утверждённой цепочкой, привязано. Его чип статуса по-прежнему говорит «Черновик», а термины под ним не меняются.
- Термин, выведенный из столбца, — черновик на конце данных. Он никогда не делает ожидающей цепочку над собой.
- Черновой термин посреди единственного пути делает каждый термин над ним приглушённым ⏚. Утверждение этого одного черновика привязывает их.
- Второго чистого пути достаточно. Черновик рядом ничего не меняет.
- Устаревшие и выведенные из обращения термины разрывают цепочку. Термин, единственный путь которого шёл через такой термин, перестаёт быть привязанным, и его чипы и фильтры говорят об этом.
Что видит агент¶
Поиск терминов MCP, словарь SPARQL и любая другая поверхность для агентов показывают агенту один и тот же срез онтологии:
- утверждённый термин на пути к данным;
- определённый черновой термин на пути к данным, который содержит хотя бы один утверждённый термин, с пометкой «черновик»;
- неопределённый термин на таком пути только как анонимный шаг, без имени и определения. Каждый шаг остаётся отдельным, поэтому форма маршрута не меняется.
Больше ничего до агента не доходит. Цепочка без утверждённых терминов остаётся скрытой, как и термины, не достигающие данных, и устаревшие или выведенные из обращения термины. Люди видят каждый термин на странице «Онтология» вместе с его статусом и привязкой.
Каждый результат поиска несёт статус и привязку термина, его столбцы и таблицы, его экспертов и его пути вниз к данным. Каждый шаг пути — это именованный термин или анонимный шаг, а конец данных перечисляет, к чему он привязан. Именно по этому маршруту агент идёт и на него ссылается.
Как сделать термин устаревшим¶
Делайте утверждённый термин устаревшим, когда он на выходе. Вы указываете причину, она обязательна, и при желании плановую дату вывода из обращения, сегодня или позже. В эту дату планировщик выводит его из обращения. Устаревший термин разрывает проходящую через него цепочку с того момента, как вы его отметили, поэтому сначала стоит прочитать предпросмотр последствий.
Термин, срок вывода которого наступил, но который ещё содержит столбцы или таблицы, нельзя вывести из обращения по дате, потому что забрать их может только преемник. Он ждёт, и раздел На проверку перечисляет его как вывод заблокирован, пока вы не выведете его с преемником.
Курируемый термин, потерявший последний столбец, автоматически становится устаревшим и сохраняется. Он выходит из работы, сохраняет содержимое, которое внесли его редакторы, и возвращается, если тот же столбец появится снова. Некурируемый термин без столбцов удаляется.
Как вывести термин из обращения¶
Вывод термина из обращения переносит всё, что к нему прикреплено, на преемника, а затем выводит его из работы.
- Столбцы свойства переходят к преемнику. Он должен быть свойством или понятием.
- Таблицы класса переходят к преемнику, и их ключи следуют за ними. Он должен быть классом или понятием.
- Понятие ничего не содержит, поэтому преемник для него необязателен.
Для вывода нужна причина, и он записывает ребро REPLACES от преемника к выведенному термину. Выведенный термин остаётся инертной записью: его определение, теги, связи, эксперты и причина. Он ничего не проводит. Преемник сохраняет собственный статус; вывод из обращения никогда его не утверждает.
Поскольку его столбцы теперь принадлежат преемнику, панель выведенного термина показывает, к чему он применялся в последний раз: его столбцы и таблицы в том виде, в каком модель держала их в коммите перед выводом. Панель также ссылается на термин, который его заменяет.
Как восстановить термин¶
Восстановить отменяет то, что утвердил куратор. Устаревший термин снова становится утверждённым. Выведенный термин возвращается как пустое понятие и черновик, поскольку его столбцы ушли к преемнику, а его ребро REPLACES удаляется.
Что делает термин курируемым¶
Термин, рождённый нормализацией столбцов, начинается пустым. Он становится курируемым, когда у него есть что-либо из этого:
- сохранённое определение
- ребро связи
- назначенный эксперт в предметной области
- тег, например
pii - вывод из обращения
Курируемые термины сохраняются, когда их столбцы уходят. Синхронизация никогда не выводит столбцы курируемого термина заново в другом месте.
Повторная синхронизация из таблиц¶
Каждый раз, когда таблица сохраняется или перезагружается, Provisa сверяет столбцы этой таблицы с онтологией. Новые столбцы создают или связывают термины, ушедшие столбцы отпускают свои ссылки, а любой термин, оставшийся без ссылок, удаляется или становится устаревшим по правилу выше. Ключевые столбцы идут к своему классу, а таблица с ключом без класса предлагает класс.
Заново выводятся только некурируемые термины. Если вы задаёте столбцу псевдоним и его черновой термин меняется, столбец переходит к новому термину. Если термин курируемый, столбец остаётся, потому что правка псевдонима не отменяет выбор куратора.
Когда удаление термина оставило бы понятие без пути к данным, Provisa вместо этого делает этот термин устаревшим, чтобы построенная вами структура сохранилась, пока вы её не перестроите.
Связи¶
Термины связываются с другими терминами типизированными рёбрами.
| Тип | Значение |
|---|---|
KIND_OF |
Исходный термин является разновидностью целевого. |
PART_OF |
Исходный термин является составной частью целевого. |
SYNONYM_OF |
Два термина взаимозаменяемы в этом домене. |
RELATED_TO |
Две разные темы, которые идут вместе, когда ни один другой тип не подходит. Держит место и не привязывает. |
VALID_VALUE_OF |
Источник является допустимым значением целевого перечисления или домена. |
DERIVED_FROM |
Источник вычисляется или получается из цели. |
REPLACES |
Источник заменяет цель. Вывод термина из обращения записывает такое ребро от его преемника. |
PREFERRED_TERM_FOR |
Источник — предпочтительный термин по сравнению с нежелательной целью. |
TRANSLATION_OF |
Источник — перевод цели на другой язык или локаль. |
ANTONYM_OF |
Источник — смысловая противоположность цели. |
Связи направлены. UI показывает и исходящие рёбра (этот термин → другой), и входящие рёбра (другой термин → этот термин), подписывая каждое направление собственной фразой на простом языке.
Рёбра хранятся в ассоциативной таблице, объявленной как связь-соединение. Её столбец типа связи служит дискриминатором, поэтому каждый тип выше — отдельный тип связи Cypher между двумя узлами-терминами. Ничего специфичного для онтологии здесь нет: она объявлена так же, как вы объявили бы соединение над собственными таблицами, и её читает тот же код.
Как построить глоссарий, который привязывает¶
Термин помогает агенту только тогда, когда он привязан, то есть когда какой-то путь связей ведёт от него к столбцу или таблице. Агенты видят только термины на таких путях, как описано в разделе Что видит агент. Привязанный термин говорит вам, где живут его данные. Непривязанный называет идею и оставляет вас искать данные самостоятельно.
Выбранные вами типы связей решают, существует ли этот путь. Привязка идёт от более широкого термина вниз к более узкому. revenue достигает данных, потому что order amount — его часть, а order amount содержит столбец. В обратную сторону она не идёт никогда, поэтому order amount ничего не получает от того, что он часть revenue.
Проверяйте каждый тип, прежде чем выбрать его¶
Читайте ребро так: X — термин, от которого оно начинается, Y — термин, на который оно указывает. Затем применяйте проверки в этом порядке и берите первую, которая проходит.
| Тип | Проверка | Пример | Что привязывает |
|---|---|---|---|
| Разновидность | Каждый X является Y. | Каждый корпоративный клиент является клиентом. | Y достигает данных X. |
| Часть | У Y есть X. | У заказа есть сумма заказа. | Y достигает данных X. |
| Допустимое значение для | X — одно из допустимых значений Y. | Платиновый — это уровень клиента. | Y достигает данных X. |
| Синоним | X и Y означают одно и то же. | Клиент и покупатель. | Каждый достигает данных другого. |
| Связан с | X и Y — разные темы, которые идут вместе, и ни одна не является разновидностью, частью или значением другой. | Торт и свечи. | Ничего. |
Производный от, Заменяет, Предпочтительный термин для, Перевод для и Антоним к фиксируют каждый по одному факту о двух терминах. Ни один из них не привязывает.
Свойство, которое описывает понятие, является его частью. Начало смены описывает смену, поэтому оно Часть понятия «покрытие смен». Просто связанным с ним оно не бывает никогда.
Когда вы добавляете связь или меняете её тип, список выбора типа показывает сначала «Разновидность», «Часть» и «Допустимое значение для», каждый с проверкой под ним. «Связан с» идёт последним, со своей проверкой и напоминанием, что он не привязывает. Ссылка Как выбрать связь, которая привязывает под списком открывает этот раздел.
«Связан с» держит место¶
«Связан с» — последнее средство. Поскольку эта связь не привязывает, термин, единственные связи которого — «Связан с», не достигает данных, сколько бы их ни было. Считайте каждую такую связь заглушкой для пары, которую вы ещё не разрешили.
Чтобы разобрать заглушки, отметьте Связан с над списком терминов, рядом с Устаревший и На проверку. Список сужается до терминов, у которых есть хотя бы одна связь «Связан с» на любом из концов. Значок книги рядом с флажком открывает этот раздел.
Термин, который не достигает данных и имеет только связи «Связан с», показывает на своей странице заметку. Заметка говорит, что паре, возможно, не хватает промежуточного термина, и называет формы, которые её разрешили бы. Это только подсказка. Ничего в термине не блокируется.
Разрешите пару одним новым термином¶
Большинству пар «Связан с» не хватает промежуточного термина. Один новый термин превращает заглушку в два ребра, которые привязывают, и это делают пять форм. Вот они для торта и свечей, начиная с самой узкой:
| Форма | Новый термин | Рёбра |
|---|---|---|
| Тип компонента | украшение торта | свечи Разновидность украшение торта; украшение торта Часть торт |
| Специализация | праздничный торт | свечи Часть праздничный торт; праздничный торт Разновидность торт |
| Общее целое | праздник | торт Часть праздник; свечи Часть праздник |
| Общий род | товары для праздника | торт Разновидность товары для праздника; свечи Разновидность товары для праздника |
| Общее перечисление | тип праздничного товара | торт Допустимое значение для тип праздничного товара; свечи Допустимое значение для тип праздничного товара |
Проследите привязку вниз в каждой строке. В первых двух формах торт достигает данных свечей через новый термин. В последних трёх новый термин — более широкий конец обоих рёбер, поэтому он достигает данных обоих. Ни торт, ни свечи не достигают данных друг друга.
Иногда промежуточный термин уже существует, и нужно только сменить тип связей. В поставляемой демо-модели приюта есть понятие shift coverage, определённое как промежуток времени и место, где сотрудник стоит в графике. Его части shift start, shift end и schedule location содержат по одному столбцу. Пока они были связаны с ним через «Связан с», shift coverage не достигало данных. Теперь каждая из трёх связана как «Часть» shift coverage, и понятие привязано через все три столбца. Это общее целое, и целое было на месте с самого начала.
Предпочитайте самую узкую форму¶
Чем шире новый термин, тем меньше его привязка говорит читателю. «Праздник» связывает торт и свечи так же надёжно, как «украшение торта». Но такой широкий узел стоит и над списком гостей, местом проведения и музыкой, поэтому его привязка уже не говорит, какие данные отвечают на вопрос о свечах. «Украшение торта» даёт агенту короткий путь к нужным столбцам. «Праздник» даёт ему длинный путь ко многим.
Начинайте с типа компонента и спускайтесь по списку, только если более узкая форма не подходит. Используйте общий род или общее перечисление, когда у пары нет ничего более узкого общего.
Когда вы выбираете «Связан с»¶
Выбор Связан с для добавляемой связи открывает диалог, например «Связать свечи и торт через «Связан с»?». Смена типа существующей связи на «Связан с» тоже его открывает. Прерывание сделано намеренно, потому что в этот момент исправить связь дешевле всего.
Сначала диалог объясняет, почему «Связан с» — наименее полезное ребро. Оно не привязывает, поэтому термин по-прежнему не может достичь данных через него. Ниже он рисует пять форм для двух ваших терминов, начиная с самой узкой. Каждая форма показывает имя для нового термина, предложенное ИИ-моделью вашей организации, например свечи → украшение торта → торт. Если модель не предлагает имён, диалог говорит почему, и вы вводите имя сами.
Затем вы выбираете одно из трёх действий.
- Начать рядом с формой открывает форму нового термина. Предложенное имя уже заполнено, а Связи, добавляемые вместе с ним перечисляет оба ребра. Переименуйте термин, добавьте определение и его домены, затем нажмите Создать. «Создать» добавляет термин. Ребро, касающееся редактируемого вами термина, попадает в вашу форму и сохраняется вместе с ней. Другое ребро записывается сразу.
- Всё равно добавить «Связан с» добавляет связь одним щелчком. Она присоединяется к заглушкам, которые показывает фильтр Связан с.
- Отмена ничего не меняет.
Как выбирает помощник по связям¶
Связи в меню ✨ запрашивает у ИИ-модели вашей организации связи между всеми терминами ваших доменов. Инструкции модели содержат те же проверки. Она предпочитает «Разновидность», «Часть» и «Допустимое значение для» везде, где подходит хоть один из них, и связывает свойство с понятием, которое оно описывает, через «Часть». «Связан с» она предлагает, только когда два термина явно идут вместе и ни один другой тип не подходит.
Помощник связывает уже существующие термины и никогда не добавляет термин. Для каждой добавленной связи «Связан с» он называет термины-кандидаты для каждой подходящей формы. Когда он заканчивает, окно Связи «Связан с» на проверку перечисляет каждую такую пару с её формами, начиная с самой узкой, и кандидатами для каждой. Щёлкните любой из двух терминов, чтобы открыть его. Нужен ли паре новый термин и как его назвать, решаете вы.
Измеряйте глоссарий¶
Отчёт Ontology quality измеряет глоссарий по модели, в разрезе доменов и стюардов. Откройте его в средстве просмотра отчётов. Он показывает:
- долю привязанных терминов среди находящихся в работе, отдельно считая полностью привязанные и ожидающие утверждения;
- долю утверждённых и привязанных, то есть терминов, которыми агент может пользоваться;
- неразрешённые заглушки, то есть связи «Связан с» и термины, единственные связи которых — «Связан с»;
- точность привязки: число шагов от каждого термина до данных и число путей, проходящих через широкий узловой термин;
- термины, привязанные только через черновики, каждый с термином, утверждение которого привязало бы его полностью;
- неопределённые термины на путях к данным;
- дрейф: термины, которые потеряли или получили привязку с прошлого периода.
Каждая строка ссылается на свой термин, а каждая строка заглушки — на связи «Связан с» этого термина для проверки. Как и любой отчёт, он читается через управляемый конвейер от имени вашей роли, и его можно экспортировать.
Понятия¶
У понятия нет собственных столбцов или таблиц. Используйте его для бизнес-идеи, охватывающей несколько конкретных терминов, а затем свяжите его с терминами, которые содержат данные. revenue, например, может быть понятием с рёбрами PART_OF от order amount, adjustment amount и refund amount.
Понятие, которое не может достичь ни одного столбца или таблицы через граф связей, не называет данных. Оно не появляется ни в поиске терминов для агентов, ни в экспорте метаданных, а раздел На проверку перечисляет его как нет данных. Домены применяются только к понятию. Любой другой термин берёт домены у таблиц, которые он привязывает, или у столбцов, которые он содержит.
PII по значению¶
PII — свойство того, что означает столбец, поэтому Provisa позволяет отметить его один раз, на термине, и охватывает каждый столбец с этим значением, включая зарегистрированные позже.
Тег pii ставится на столбец или на термин-свойство, но никогда на источник, таблицу, класс или понятие. Чтобы получить его, термин должен быть определён и не выведен из обращения. Отметка чернового термина отклоняется с сообщением «Определите термин, чтобы отметить его», и вы не можете очистить определение помеченного термина, пока не снимете отметку.
Каждый столбец помеченного термина несёт pii, а вместе с ним sensitive, везде, где читаются теги: в управлении, маскировании, чувствительности, экспорте и представлениях тегов. На столбцы ничего не копируется. Столбец, перенесённый на термин, сразу несёт тег, а перенесённый с него больше не несёт. Каждый столбец говорит, откуда его тег: задан на столбце, с причиной, или получен через термин, который он называет.
Когда вы отмечаете столбец, термин которого является свойством, UI спрашивает, отметить ли другие столбцы с тем же значением.
- Да ставит тег на термин.
- Только этот отмечает один столбец и спрашивает почему.
Столбец, который является PII через свой термин, нельзя разметить отдельно. Снимите отметку с термина или перенесите столбец на термин, который соответствует его содержимому.
Переносы, при которых теряются теги¶
Перенос столбца на другой термин может снять с него тег: перенос customers.email с customer email (с тегом pii) на термин без тега оставил бы столбец с адресами электронной почты без защиты. Каждый перенос, который делает человек, проверяется заранее. Это касается захвата или переноса столбца, вывода термина из обращения, а также сохранения или удаления связи, которая переназначает ключевые столбцы.
Если столбец полностью перестал бы нести pii, перенос отклоняется, пока вы не решите. UI показывает одну сводку того, что каждый переносимый столбец теряет и получает, сначала потери.
- Перенести выполняет перенос с подтверждением каждого потерянного тега.
- Перенести и отметить переносит потерянные теги на термин, куда уходят столбцы, в том же изменении.
- Отмена ничего не переносит.
Столбцу, который сохраняет тег благодаря собственной отметке, подтверждение не нужно. Переносы, которые модель делает сама, например повторный вывод столбцов черновика, никогда не меняют унаследованный тег.
На проверку¶
Онтология сообщает о том, что требует вашего внимания, в виде замечаний. Термин с любым замечанием находится На проверку, и список терминов фильтруется по этому признаку. Простой черновик замечанием не является; черновики — обычное состояние онтологии. Термин, который достигает данных только через черновики, является замечанием, потому что одно утверждение вывело бы его к агентам.
| Замечание | Что оно означает | Исправление |
|---|---|---|
| Несвязанные таблицы | Класс привязывает несколько таблиц, которые связи «одна сущность» соединяют не все. | Отметьте связи «одна сущность» между ними. |
| Класс и атрибут | Класс содержит столбцы, не являющиеся его ключами, или у таблицы с ключом нет класса, потому что её понятие является свойством. | Перенесите столбцы на свойство или привяжите таблицу заново. |
| Тег не на том виде | Термин, не являющийся свойством, несёт тег, который передаёт столбцам только свойство. | Снимите тег. |
| Вывод заблокирован | Устаревший термин прошёл плановую дату вывода, но ещё содержит столбцы или таблицы. | Выведите его с преемником. |
| Нет данных | Черновое понятие не достигает данных. | Свяжите его с термином, который содержит данные. |
| Утверждён, не привязан | Утверждённый термин не достигает данных, поэтому ни один агент его не видит. | Свяжите его с термином, который содержит данные. |
| Привязан · путь ожидает утверждения | Каждый путь к данным проходит через черновик. Замечание называет черновик, утверждение которого привяжет термин. | Откройте этот термин и утвердите его. |
Замечания сообщают; они ничего не меняют, пока вы не начнёте действовать.
Экспорт метаданных¶
Онтология публикуется во внешние каталоги данных в рамках экспорта метаданных. Публикуются утверждённые термины, каждый со своей привязкой: grounded, grounded_pending или not_grounded. Черновик никогда не покидает Provisa. Привязка для экспорта оценивается по столбцам и таблицам, которые действительно публикуются. Термин, все столбцы которого не попадают в экспорт, потому что их таблицы не являются продуктами данных или их исключают технические фильтры, не попадает в экспорт вместе с ними.
Утверждённый термин, который куратор с тех пор сделал устаревшим, публикуется со своим статусом, причиной и плановой датой вывода, чтобы каждый каталог мог сопоставить его со своей собственной отметкой устаревания.
Рёбра связей публикуются, только когда публикуются оба концевых термина. Ресурсы столбцов экспортируются независимо, поэтому исключение термина не скрывает лежащие в основе данные.
Как исключить термин из экспорта¶
Некоторые столбцы несут служебную обвязку: идентификаторы пакетов ETL, версии строк и метки времени загрузки. Термин, выведенный из такого столбца, может иметь точное определение и всё же не быть бизнес-словарём. Переключатель Исключить из экспорта метаданных не пускает термин, а также все рёбра связей, которые на нём заканчиваются, в каталоги, куда публикует Provisa. Сами столбцы по-прежнему экспортируются как ресурсы.
Важно, пользуется ли бизнес этим словом. У идентификатора пакета ETL ясное значение, которое для инженеров уместно в онтологии, но не в бизнес-каталоге рядом с customer и revenue.
Работа с онтологией¶
Откройте Онтология на панели навигации. Левая панель перечисляет каждый термин с его ролью, статусом, если он не утверждён, и чипом привязки. Фильтры Статус и Привязка сужают список по каждому признаку, флажок Устаревший показывает или скрывает устаревшие термины, На проверку сужает его до терминов с замечаниями, а Связан с сужает его до терминов со связью «Связан с». Щёлкните термин, чтобы открыть его панель.
Панель показывает рядом роль, статус и привязку термина, а для свойства — его отметку PII с числом охватываемых столбцов. Термин с приглушённым ⏚ называет черновики, утверждение которых привязало бы его. Устаревший или выведенный из обращения термин показывает, кто изменил его статус и почему. Термин с замечаниями открывается с разделом На проверку: щёлкните замечание, чтобы увидеть, что найдено, и действие, которое это исправляет.
Сводка стюардинга¶
Когда ни один термин не открыт, панель показывает сводку стюардинга. Она перечисляет термины, которые видят агенты, термины с приглушённым ⏚, каждый из которых ждёт одного утверждения, вместе с термином, который нужно утвердить, и утверждённые термины, не достигающие данных. Утвердить определённые привязанные черновики перечисляет каждый черновик, у которого есть определение и который привязан; снимите отметку с тех, чьё определение неверно, и утвердите остальные вместе. Кнопка буфера обмена в заголовке возвращает сводку.
Сначала увидеть последствия¶
Утверждение, вывод из обращения и привязка термина меняют то, что достигает данных. Перед каждым из этих действий страница показывает, что оно изменит: сколько терминов станут привязанными, приглушёнными ⏚ или непривязанными и к скольким таблицам агенты получат или потеряют путь. Например: «Утверждение region привязывает 3 термина и даёт агентам путь ещё к 2 таблицам». Утвердить открывает предпросмотр с кнопкой подтверждения, Вывести из обращения показывает его под выбранным вами преемником, а привязка таблицы в форме редактирования показывает его под таблицей до сохранения.
Изменить открывает весь термин одной формой. Сохранение применяет все изменения вместе.
- Переименуйте термин, чтобы изменить формулировку, не перенося его столбцы.
- Добавьте определение, введя его, или нажмите кнопку ИИ-черновика, чтобы получить отправную точку по имени термина, его столбцам и связям. Черновик не сохраняется, пока вы не сохраните форму.
- Заберите столбцы, чтобы перенести столбцы с других терминов на этот, или выберите Перенести на термин рядом с одним из его собственных столбцов. Каждый столбец принадлежит одному термину. Ключевые столбцы следуют за своим классом и не переносятся.
- Привяжите таблицы к классу или удалите их.
- Отметьте PII на свойстве.
- Добавьте связь, выбрав её тип. Меняйте тип существующего ребра на месте, а не удаляйте и добавляйте его заново.
- Назначьте экспертов по ID пользователя, как
expertилиauthor.
Рядом с «Изменить» панель предлагает действия со статусом, которые допускает термин: Утвердить определённый черновик, Сделать устаревшим утверждённый термин, Вывести из обращения любой термин в работе и Восстановить устаревший или выведенный.
В меню ✨ пункт Определения заполняет каждое пустое определение за один проход и никогда не перезаписывает текст человека. Связи добавляет типизированные рёбра по всему списку терминов; предложения с неизвестными терминами, одним и тем же термином дважды или нераспознанным типом отбрасываются. Каждая добавленная им связь «Связан с» попадает в список на проверку, как описано в разделе Как выбирает помощник по связям.
Баннер Черновик на термине говорит, нужно ли ему ещё определение (задайте столбцу псевдоним или добавьте определение) или только ваше утверждение. Отдельный баннер говорит, когда термин не достигает данных: свяжите его с термином, у которого есть данные.
Запросы к онтологии¶
Онтология — это схема, к которой можно обращаться с запросами, под именем ontology, рядом со схемой meta, описывающей структуру модели. Её таблицы начинаются с подчёркивания, поэтому собственная таблица класса никогда не совпадает по имени ни с одной из них.
| Таблица | Одна строка на |
|---|---|
_terms |
Термин, с его статусом, привязкой, определением и тем, является ли он классом, свойством или и тем и другим |
_term_refs |
Привязку свойства к столбцу, с таблицей и доменом столбца |
_term_edges |
Связь между двумя терминами |
_domains |
Домен, к которому относится термин |
_experts |
Эксперта или автора, назначенного термину |
_axioms |
Утверждение онтологии в RDFS, OWL и SKOS |
_closure |
Термин в паре с каждым термином, разновидностью которого он является, на любой глубине, и с самим собой |
Привязка связывает термин со столбцом в схеме meta, поэтому можно соединить ontology._term_refs с meta.table_columns и meta.registered_tables. Таблицы онтологии доступны только для чтения. Они меняются по мере того, как вы курируете термины.
Вы читаете термин, только если достигаете одного из его доменов. Термин без домена виден всем, как и общекорпоративный термин (*). Связь или аксиома видна, когда видны оба её термина.
Онтология в SPARQL¶
SPARQL отдаёт онтологию в стандартных словарях, поэтому RDF-инструмент читает её так же, как любую онтологию OWL:
- класс — это
owl:Class, а связь «разновидность» между классами —rdfs:subClassOf; - свойство — это
owl:DatatypePropertyилиowl:ObjectProperty, если каждый привязанный им столбец является ключом к таблице с классом; rdfs:domainсвойства — класс каждой таблицы, столбец которой оно привязывает, а егоrdfs:range— класс, к которому ведут его ключи, или тип XML Schema его столбцов;- связь «разновидность» между свойствами —
rdfs:subPropertyOf; - у каждого термина имя служит
skos:prefLabel, а определение —skos:definition.
Термин называется своим IRI словаря, <your Provisa address>/vocab/term/<name>, — тем IRI, который типизирует строки привязанных им таблиц. Выведенный из обращения термин ничего не утверждает.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?class ?parent ?label WHERE {
?class a owl:Class ; rdfs:subClassOf ?parent .
?parent skos:prefLabel ?label .
}
Запрос может соединить онтологию со строками, которые вы читаете. Экземпляры класса включают экземпляры каждого класса, являющегося его разновидностью, на любой глубине:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX term: <https://your-provisa/vocab/term/>
SELECT ?party ?class WHERE {
?party a ?class .
?class rdfs:subClassOf* term:Party .
}
Свойство работает так же: ?x ?p ?v . ?p rdfs:subPropertyOf* term:amount читает значения каждого свойства, являющегося разновидностью amount. Вы получаете экземпляры таблиц, которые читаете, поэтому класс, таблицы которого вам недоступны, не добавляет ни одного.
Те же утверждения — это строки ontology._axioms в SQL, а пары «разновидность», замкнутые на любую глубину, — строки ontology._closure. GraphQL, Cypher и другие языки запросов эти две таблицы не предоставляют.
См. также¶
- Экспорт метаданных описывает, как термины и связи публикуются во внешние каталоги данных.
- Происхождение на уровне столбцов описывает обозреватель происхождения и то, как физический столбец сообщает о привязанных к нему терминах.
Схема онтологии¶
Системная схема ontology позволяет запрашивать словарь из SQL, GraphQL, Cypher, REST и MCP — через те же поверхности, что и ваши собственные данные. Она стоит рядом с meta, которая хранит структуру модели; ontology хранит её смысл.
Схема состоит из двух частей: представлений определений и таблиц классов.
Представления определений¶
Пять представлений раскрывают содержимое глоссария:
| Представление | Содержимое |
|---|---|
_terms |
Каждый термин: его имя, роль (класс, свойство, понятие), определение, статус и привязка. |
_term_refs |
Каждая привязка термина к столбцу: имя термина, источник, таблица и столбец. |
_term_edges |
Каждое ребро связи: исходный термин, тип ребра и целевой термин. |
_domains |
Принадлежность доменам: имя термина и каждый домен, к которому он относится. |
_experts |
Назначения экспертов: имя термина, ID пользователя и роль (expert или author). |
Шестое представление, _axioms, содержит каждую тройку RDFS/OWL/SKOS, которую может выразить схема, по одной строке на тройку, со столбцами subject, predicate, object, object_iri и object_literal. object называет объект, когда это термин; object_iri содержит его, когда это IRI, а object_literal — когда это литерал. В каждой строке значение содержит один из трёх. Инструменты, предпочитающие тройки табличным строкам, читают отсюда.
Привязка термина — термин, привязанный к столбцу и записанный в _term_refs, — отличается от привязки команды. Привязка термина говорит, что означает столбец; привязка команды встраивает функцию в конвейер запросов.
Таблицы классов¶
Каждый термин класса, не выведенный из обращения, становится представлением в схеме ontology, названным по этому термину, с подчёркиваниями вместо пробелов. Класс, привязанный к одной таблице, даёт одно представление; класс, привязанный к нескольким таблицам, даёт объединение этих таблиц.
В представлении-объединении появляются строки каждой исходной таблицы. Столбец _source_table указывает, из какой таблицы пришла каждая строка: он содержит полное имя таблицы, domain.table. Столбец свойства, который какая-то исходная таблица не привязывает, для её строк равен NULL. Свойство, привязанное к нескольким столбцам одной таблицы, становится столбцом-массивом.
Каждый столбец в представлении класса соответствует привязанному свойству. Представление управляется тем же конвейером, что и любое другое чтение.
Пример. Класс customer, привязанный к sales.customers и crm.contacts, со свойством name, привязанным к customers.name и contacts.full_name, и свойством segment, привязанным только к customers.segment:
-- rows from both tables; segment is NULL for crm.contacts rows
SELECT _source_table, name, segment
FROM ontology.customer
WHERE segment = 'enterprise';
Права на чтение¶
Здесь действуют те же правила управления, что и для ваших собственных таблиц.
Термин появляется в представлениях определений, только если вы достигаете хотя бы одного из его доменов. Термин без домена виден всем. Строка привязки появляется, только когда её столбец вам отдаётся. Ребро появляется, только когда оба его термина вам видны. Столбец свойства в представлении класса появляется, только когда отдаются лежащие в его основе столбцы.
Особый доступ не нужен. Если вы можете запрашивать таблицу, вы можете запрашивать привязанные к ней термины классов.
SPARQL¶
Конечная точка SPARQL отдаёт схему ontology как стандартную онтологию RDFS/OWL/SKOS. Каждый термин класса становится owl:Class, каждое ребро «разновидность» — rdfs:subClassOf, каждый термин свойства — owl:DatatypeProperty или owl:ObjectProperty с rdfs:domain и rdfs:range, рёбра подсвойств — rdfs:subPropertyOf, имена — skos:prefLabel, определения — skos:definition. Действуют те же права на чтение.
Базовый IRI для всех терминов выводится из настройки server.public_url, под путём /vocab/term/. У термина класса с именем customer IRI {public_url}/vocab/term/customer.
Три запроса, которые написал бы онтолог:
Найти все подтипы Party на любой глубине:
PREFIX : <{public_url}/vocab/term/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?c WHERE {
?c rdfs:subClassOf* :Party .
}
Найти клиентов со значением сегмента, используя IRI термина:
Перечислить все свойства, объявленные на Customer, с их областями значений:
PREFIX : <{public_url}/vocab/term/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?p ?range WHERE {
?p rdfs:domain :Customer ;
rdfs:range ?range .
}
Замените {public_url} публичным адресом вашего развёртывания, как он настроен в server.public_url.