> Перевод даётся для удобства чтения. Нормативным является английский оригинал. # Композиция Мета-Моделей **Спецификация Мета-Вселенной** **Идентификатор документа:** MU-V2-ARCH-016 **Название:** Стандарт архитектуры мета-моделей - композиция, вложение и коннекторы **Класс документа:** нормативный **Версия:** 2.0 (черновик) **Статус:** рабочий черновик **Нормативные ссылки:** Конституция Мета-Вселенной (MUC), MMAS-Core, [Extension-Model](Extension-Model.md), [Semantic-Mapping](../03-federation/Semantic-Mapping.md) **Информативные ссылки:** [Relationship](../04-core-concepts/Relationship.md), [Object](../04-core-concepts/Object.md), [Projection](../04-core-concepts/Projection.md), [Connector-Catalogue](../06-ecosystem/Connector-Catalogue.md), [External-Models-Registry](../06-ecosystem/External-Models-Registry.md) **Копирайт:** © Orkestron.AI **Лицензия:** Apache-2.0 --- # 1. Назначение [Extension-Model](Extension-Model.md) определяет, как Мета-Модель **импортирует и расширяет** внешний стандарт. [Semantic-Mapping](../03-federation/Semantic-Mapping.md) определяет, как две суверенные Мета-Модели **согласуют смысл**, не сливаясь. Этот документ заполняет слой между ними: **структурную композицию** - как *Свойства* одной Мета-Модели соотносятся с *другими Мета-Моделями*, и правило, по которому для любого понятия решается, чем оно должно быть: - **литеральным Свойством** (полем), принадлежащим самой Мета-Модели; или - **встроенной** вложенной Мета-Моделью (типом Свойства *является* другая модель); или - **ссылкой** на отдельно управляемую сущность или список кодов. Без этого слоя зарегистрированные модели остаются смысловыми островками: одно и то же понятие - адрес, страна, денежная сумма, запись о происхождении - независимо перемоделируется в десятках Мета-Моделей с расходящимися формами, поэтому они дублируют поля и не могут ни составляться, ни соединяться, ни проверяться вместе. Этот документ определяет принципы, механизмы и коннекторы, превращающие каталог [внешних моделей](../06-ecosystem/External-Models-Registry.md) в связную ткань. --- # 2. Задача композиции Автор Мета-Модели раз за разом встречает понятие, которое *могло бы* быть простым полем, но на деле является вещью, которую широкая экосистема уже моделирует. Обращение с каждым таким понятием как с локальным полем ведёт к трём отказам: - **Форк** - `street`, `city`, `postcode`, `country`, смоделированные наспех в одной Мета-Модели и иначе в следующей: понятие Адреса форкнуто, и две модели не могут взаимодействовать. - **Расхождение** - список стран или валют, скопированный в локальное перечисление, молча расходится с органом, который его поддерживает. - **Протухание** - атрибуты работодателя, вписанные внутрь Человека вместо ссылки: каждый Человек несёт частную стареющую копию одной и той же Организации. Мета-Вселенная ОБЯЗАНА предпочитать **композицию дублированию** - структурный аналог принципа **расширение вместо дублирования** из [Extension-Model](Extension-Model.md) §3. Остальная часть документа делает это предпочтение работающим. --- # 3. Виды понятий Каждое понятие, появляющееся в Мета-Модели, ОБЯЗАНО для целей представления классифицироваться ровно как один из следующих видов. Вид определяет допустимый механизм композиции (§4) через решающую схему (§5). | Вид | Определение | Проверка | Представление по умолчанию | |------|------------|------|------------------------| | **Атрибут** | Литеральное значение без собственной идентичности, без внутренней структуры и без внешнего органа, управляющего его значениями. | «Это просто значение, которым владеет носитель?» | Свойство (поле) | | **Значимый объект** | Структурированный набор подзначений, которые ходят вместе и равны, когда равны их части; собственной идентичности не имеет. | «Есть ли у него ≥2 частей, осмысленных только как целое?» | EMBED | | **Сущность** | Вещь с собственной идентичностью и жизненным циклом, на которую можно ссылаться и которой можно делиться независимо от любого носителя. | «Могут ли другие Объекты на неё указывать; может ли она создаваться, версионироваться, принадлежать сама по себе?» | REFERENCE | | **Код / классификатор** | Член набора значений, классификации или схемы идентификаторов, управляемой внешним органом. | «Набор допустимых значений поддерживает кто-то другой?» | REFERENCE (на схему) | | **Фасет** | Сквозная забота, присоединяемая ко многим Объектам независимо от предметной области: происхождение, время действия, политика, метка безопасности, многоязычные подписи. | «Это *о* данных, а не *часть* предметной нагрузки?» | MIX-IN | Вид понятия - решение при моделировании, а не внутренняя истина: одно и то же слово («адрес», «организация») может быть Сущностью в одной Мета-Модели и снимком Значимого объекта в другой. Автор ОБЯЗАН фиксировать выбранный вид, чтобы валидаторы и потребители могли о нём рассуждать. --- # 4. Механизмы композиции Мета-Модели соединяют шесть механизмов. У каждого своя связанность и свой профиль суверенитета. Два из них - **EXTEND** и **MAP** - задаются в других документах и перечислены здесь лишь для полноты; этот документ задаёт **EMBED**, **REFERENCE** и **MIX-IN**. | № | Механизм | Что делает | Связанность | Суверенитет | Задан в | |---|-----------|--------------|----------|-------------|--------------| | 1 | **EMBED** (композиция) | Типом Свойства *является* другая Мета-Модель; значение путешествует внутри носителя как вложенный Объект без собственной идентичности. | Тесная - составным владеет носитель | Переиспользуется *форма* вложенной модели; её полномочия сохраняются | **этот документ** | | 2 | **REFERENCE** (ассоциация) | Свойство хранит идентификатор, разрешаемый во внешнюю сущность или схему кодов; предмет ссылки живёт и управляется в другом месте. | Слабая | Полностью сохранён - предмет ссылки остаётся суверенным | **этот документ** | | 3 | **MIX-IN** (фасет / трейт) | Свойства сквозного Пакета единообразно применяются ко многим Объектам-носителям в собственном пространстве имён. | Ортогональная | Модель фасета остаётся авторитетной | **этот документ** | | 4 | **EXTEND** (специализация) | Мета-Модель-носитель является / уточняет импортированную модель, добавляя ограничения или Свойства. | Тесная (подтип) | По правилам импорта | [Extension-Model](Extension-Model.md) §8 | | 5 | **MAP** (согласование) | Две суверенные модели объявляют эквивалентности полей без структурных изменений. | Отсутствует (структурно) | Максимальный | [Semantic-Mapping](../03-federation/Semantic-Mapping.md) | | 6 | **ANNOTATE** (пометка) | Понятие из контролируемого словаря присоединяется к Свойству ради смысла, а не структуры. | Отсутствует | Максимальный | этот документ (§4.3) | ## 4.1 EMBED EMBED применяется к **Значимым объектам**. Свойство носителя типизируется другой Мета-Моделью (предпочтительно импортированной как [Смысловой пакет](Extension-Model.md §4)), и встроенное значение: - ОБЯЗАНО сохранять пространство имён, версию и [смысловой отпечаток](Versioning.md) встроенной модели; - НЕ ДОЛЖНО расплющиваться в разовые Свойства носителя; - **не имеет собственной идентичности** в носителе - это значение, равное любому другому встроенному значению с теми же частями; - вносит свою форму в собственный смысловой отпечаток носителя, так что два носителя, «имеющих адрес», можно показать как согласные в том, что такое адрес. EMBED - правильный механизм ровно тогда, когда у понятия есть внутренняя структура, повторяющаяся по всей экосистеме (Адрес, Деньги, Количество, Географическая точка, Личное имя, Временной интервал). ## 4.2 REFERENCE REFERENCE применяется к **Сущностям** и **Кодам**. Свойство носителя хранит идентификатор, а не копию содержимого предмета ссылки. - **Ссылка на сущность** - моделируется как [Связь](../04-core-concepts/Relationship.md) с Мета-Объектом, опознаваемым по каноническому идентификатору, либо как Свойство-идентификатор, типизированное схемой идентификаторов. Атрибуты предмета ссылки НЕ ДОЛЖНЫ вписываться внутрь; их получают, разрешая ссылку (с учётом [Контракта](../04-core-concepts/Contract.md) и [Проекции](../04-core-concepts/Projection.md), когда предмет ссылки находится в другой Вселенной). - **Ссылка на код** - моделируется как Свойство, значение которого есть «термин, взятый из схемы *S*», несущее URI и версию схемы. Члены *S* НЕ ДОЛЖНЫ копироваться в локальное перечисление; хранение схемы и версии делает расхождение обнаружимым. Ссылка МОЖЕТ быть **снята снимком** - встроена как неизменяемая копия-значение, - когда аудит или неизменяемость требуют замороженного вида (например, Проекция, фиксирующая адрес таким, каким он был на некоторый момент). Снимок ОБЯЗАН быть помечен как таковой и ОБЯЗАН фиксировать идентификатор источника и Событие захвата, чтобы его никогда не приняли за живой предмет ссылки. Это законное лицо «дублирования» (§6). ## 4.3 MIX-IN и ANNOTATE **Фасет** ОБЯЗАН применяться как MIX-IN: объявленный пакет фасета, чьи Свойства вливаются в носитель под собственным пространством имён и применяются единообразно ко многим Объектам (например, происхождение `prov:*` на каждом Объекте, время действия на каждом версионируемом Объекте, политика `odrl:*` на Контракте). Фасет НЕ ДОЛЖЕН изобретаться заново в виде самодельных предметных полей и НЕ ДОЛЖЕН тонуть в предметной нагрузке - он *о* данных. ANNOTATE присоединяет к Свойству понятие из контролируемого словаря (концепт SKOS, тип schema.org), чтобы закрепить его смысл, не меняя структуры. Это самый лёгкий механизм, полностью сохраняющий суверенитет. --- # 5. Решающая схема Для любого понятия *C*, появляющегося в Мета-Модели *M*, применяйте следующие проверки **по порядку**; первая сработавшая фиксирует представление. 1. **Проверка на фасет (ортогональная, применяется первой).** Является ли *C* сквозной заботой (происхождение, время действия, политика доступа, метка безопасности, многоязычная подпись), а не предметной нагрузкой? → **MIX-IN** соответствующей модели фасета. Стоп. 2. **Проверка на идентичность.** Обозначает ли *C* вещь с собственной идентичностью и жизненным циклом, на которую можно ссылаться и которую можно создавать, версионировать или которой владеть независимо от *M*? → *C* является **Сущностью**: **REFERENCE** по идентификатору. Встраивайте только как помеченный **снимок**, когда этого требуют неизменяемость или аудит. Стоп. 3. **Проверка на полномочия.** Управляется ли набор допустимых значений *C* или его внутренняя структура уже внешним стандартом? - **Список кодов / классификация / схема идентификаторов** → **REFERENCE** на эту схему (термин + URI схемы + версия). Никогда не копируйте её членов. Стоп. - **Стандарт структурированного значимого объекта** (Адрес, Деньги, …) → предпочтите эту каноническую модель и переходите к проверке на структуру. 4. **Проверка на структуру.** Есть ли у *C* внутренняя структура - два или более подзначения, которые ходят вместе и были бы бессмысленны, будучи разнесены по носителю? → *C* является **Значимым объектом**: **EMBED** как вложенную Мета-Модель (предпочтительно импортированную каноническую). Не расплющивайте её части. Стоп. 5. **Проверка на переиспользование.** Даже если *C* сейчас атомарно, нужны ли две или более Мета-Моделей в области рассмотрения ему в той же форме (сейчас или обозримо)? → вынесите *C* как общий Значимый объект и EMBED/REFERENCE его, чтобы форма определялась один раз. Стоп. 6. **По умолчанию.** *C* является **Атрибутом**: литералом без собственной идентичности, без внешних полномочий, без внутренней структуры и без межмодельного переиспользования. Представляйте его как **Свойство (поле)**. Дублирование такого поля между Мета-Моделями допустимо (§6). ```text ┌───────────────────────────────────────────────┐ concept C │ 1. cross-cutting concern? ── yes ─▶ MIX-IN │ │ 2. own identity/lifecycle? ── yes ─▶ REFERENCE │ │ 3. governed value set? ── yes ─▶ REFERENCE │ │ 4. internal structure? ── yes ─▶ EMBED │ │ 5. reused across models? ── yes ─▶ EMBED │ │ 6. otherwise ─────────▶ FIELD │ └───────────────────────────────────────────────┘ ``` Соответствующая Мета-Модель ДОЛЖНА уметь обосновать каждое Свойство, назвав проверку, породившую его представление. --- # 6. Когда дублирование допустимо Композиция вместо дублирования - это умолчание, а не абсолют. Дублирование значения или хранение «одного и того же» понятия как обычного поля в нескольких Мета-Моделях **правильно** в следующих случаях: - **Атомарные атрибуты.** `title`, `quantity`, свободный текст `note` - литерал без общих полномочий. Две Мета-Модели, каждая со своим таким полем, не форкают понятие; у них два независимых свойства, случайно совпавших по имени. - **Неизменяемые снимки.** Проекция, запись аудита или запись [сохранения конфликта](../03-federation/Conflict-Resolution.md), намеренно замораживающая копию значения ради неизменяемости или локальности. Здесь *копия и есть смысл*; она ОБЯЗАНА быть помечена как снимок с идентификатором источника и Событием захвата (§4.2). - **Суверенитет через сопоставление.** Когда две модели управляются независимо и переходник ([Semantic-Mapping](../03-federation/Semantic-Mapping.md)) предпочтительнее структурной связанности, каждая сохраняет свои поля, а связь является MAP, а не EMBED. - **Уход от избыточной нормализации.** Когда вынесение общей модели добавило бы больше связанности, чем понятие того стоит (разовое, действительно локальное атомарное значение), сохранить поле - соразмерный выбор. Дублирование становится **дефектом** только тогда, когда оно форкает *структурированный* Значимый объект, *копирует* управляемый список кодов, *вписывает внутрь* Сущность или *изобретает заново* Фасет - четыре случая, которые решающая схема и призвана ловить. --- # 7. Композиционные роли внешних моделей Чтобы композиция была предсказуема в масштабе экосистемы, каждой внешней модели в [Реестре](../06-ecosystem/External-Models-Registry.md) можно назначить **композиционную роль**, предсказывающую, как другие модели должны с ней связываться. [Connector-Catalogue](../06-ecosystem/Connector-Catalogue.md) применяет эти роли к основополагающим коннекторам, а все 1180 каталогизированных стандартов несут роль и тип связи по умолчанию в [`external-models.csv`](../06-ecosystem/external-models.csv) (распределение см. в [External-Models-Registry §3a](../06-ecosystem/External-Models-Registry.md)). | Роль | Описание | Связь по умолчанию | Примеры | |------|-------------|--------------|----------| | **R1 Основополагающий значимый объект** | Структурирован, без идентичности, встречается повсюду | EMBED | Адрес (CIQ xAL), Деньги, Количество (QUDT), Географическая точка, Личное имя, Временной интервал | | **R2 Справочные данные / список кодов** | Курируемый набор значений или классификация | REFERENCE | ISO 3166, ISO 4217, ISO 639, UCUM, GPC, NACE, ESCO, SNOMED CT | | **R3 Схема идентификаторов** | Ключи для сущностей | REFERENCE | LEI, ISIN, GTIN, GLN, DOI, ORCID/ISNI, IBAN/BIC, DID | | **R4 Модель сущности** | Вещи с идентичностью и жизненным циклом | REFERENCE; EMBED-снимок | schema:Organization, FHIR Patient, W3C ORG, schema:Place | | **R5 Сквозной фасет** | Заботы, применяемые ко многим Объектам | MIX-IN | PROV-O, OWL-Time, ODRL, подписи SKOS-XL | | **R6 Агрегат / документ** | Составляет R1-R5 в документ | составляет (редко встраивается) | UBL Invoice, C-CDA, EPCIS Event, Order | | **R7 Верхняя онтология / основание** | Онтологическое заземление | ALIGN / ANNOTATE | BFO, DOLCE, верхний уровень ISO 15926, Common Logic | | **R8 Инструментарий сопоставления** | Реализует MAP / преобразование | нет (инструментарий) | R2RML, RML, SAWSDL | Роли - это подсказка, а не закон: модель МОЖЕТ быть встроена в одном контексте и упомянута по ссылке в другом. Роль называет *типичную* и *рекомендуемую* связь. --- # 8. Выражение композиции в MMAS У каждого механизма есть конкретное выражение в MMAS. Любая связь, независимо от механизма, ОБЯЗАНА сохранять **пространство имён, версию, происхождение и смысловой отпечаток** связанной модели и НЕ ДОЛЖНА нарушать инварианты импорта из [Extension-Model](Extension-Model.md) §18. - **EMBED** - Свойство, типизированное типом Мета-Объекта из другого Пространства имён; встроенная модель объявляется как зависимость-Смысловой пакет; отпечаток носителя вбирает встроенную форму. - **REFERENCE (сущность)** - [Связь](../04-core-concepts/Relationship.md) с Мета-Объектом либо Свойство, типизированное идентификатором; межвселенские ссылки управляются Контрактом и передаются как Проекции. - **REFERENCE (код)** - Свойство типа `термин ∈ схема`, несущее URI и версию схемы; валидаторы МОГУТ проверять членство и обнаруживать расхождение. - **MIX-IN** - пакет фасета, влитый под собственным пространством имён; применяется единообразно; объявляется в списке фасетов Мета-Модели. - **EXTEND** / **MAP** / **ANNOTATE** - как задано в документах, которым они принадлежат. Мета-Модели СЛЕДУЕТ объявлять для каждого Свойства его **вид композиции** (attribute / embed / reference / mixin), а для embed и reference - идентификатор и версию коннектора. Именно это объявление делает композицию модели машинно проверяемой. --- # 9. Разобранный пример - `employee.person` Одно понятие Человека задействует все механизмы: | Понятие | Вид | Механизм | Коннектор | |---------|------|-----------|-----------| | name | Значимый объект | EMBED | Личное имя (CIQ xNL / части имени schema) | | address | Значимый объект | EMBED | Почтовый адрес (CIQ xAL / vCard ADR) | | nationality | Код | REFERENCE | ISO 3166-1 | | primaryLanguage | Код | REFERENCE | ISO 639 (+ письменность ISO 15924) | | salary | Значимый объект | EMBED | Денежная сумма (сумма + валюта ISO 4217) | | height | Атрибут (+единица) | FIELD + REFERENCE | литеральное значение; единица ∈ UCUM | | employer | Сущность | REFERENCE | Организация по LEI ISO 17442 | | orcid | Идентификатор | REFERENCE | ORCID / ISNI ISO 27729 | | provenance | Фасет | MIX-IN | PROV-O | | validFrom/validTo | Фасет | MIX-IN | OWL-Time / время действия жизненного цикла | | accessPolicy | Фасет | MIX-IN | ODRL | Для федерации тот же `person` затем **MAP**-ится на `fhir:Patient` и `foaf:Person` через [Semantic-Mapping](../03-federation/Semantic-Mapping.md): ни одно поле Человека не дублируется ради совместимости, объявляются только соответствия. --- # 10. Антипаттерны - **Расплющенный значимый объект** - `addr_line1`, `addr_city`, `addr_zip` как поля носителя вместо встроенного Адреса. Форкает понятие; блокирует соединение и проверку. - **Скопированный список кодов** - локальное перечисление `country` вместо ссылки на ISO 3166. Расходится с органом, который его ведёт. - **Вписанная сущность** - имя, адрес и регистрация работодателя, скопированные в каждого Человека вместо ссылки. Порождает протухшие дубли; нарушает суверенитет предмета ссылки. - **Заново изобретённый фасет** - самодельные поля `created_by` / `created_at` / `source` вместо примеси PROV. Дробит происхождение по всей экосистеме. - **Избыточное встраивание** - обёртывание действительно атомарного атрибута во вложенную модель. Ненужная связанность; обратная ошибка. - **Встраивание сущности по значению** - копирование вещи, имеющей идентичность, с потерей этой идентичности, жизненного цикла и суверенитета. Они один в один отображаются на отказы, которые призвана предотвращать решающая схема (§5), и расширяют [Типичные ошибки проектирования](../05-reference-architecture/Anti-Patterns.md). --- # 11. Валидация и соответствие Соответствующей реализации СЛЕДУЕТ проверять, что: - каждое Свойство объявляет вид композиции; - Свойства embed и reference называют коннектор и версию; - Свойства с типом-кодом несут URI и версию схемы (расхождение обнаружимо); - ни один кластер Свойств не воспроизводит форму известного коннектора-Значимого объекта плоскими полями (проверка на форк); - снимки помечены и несут идентификатор источника и Событие захвата. Эти проверки рекомендуются как дополнения к уровням [Validation](Validation.md) и к [набору смысловых тестов](../tests/). Объявления композиции сами являются частью Мета-Модели и потому охватываются её смысловым отпечатком. --- # 12. Архитектурные инварианты Композиция НИКОГДА не должна нарушать: - **Конституцию Мета-Вселенной** и смысловой суверенитет - модели, на которые ссылаются или которые встроены, сохраняют собственные полномочия, идентичность и управление; - **происхождение и прослеживаемость** - каждая связь фиксирует начало, пространство имён и версию; - **целостность версий** - связи учитывают версии; изменение коннектора влечёт оценку совместимости, а не молчаливую миграцию; - **инварианты импорта** из [Extension-Model](Extension-Model.md) §18. --- # Заключение Поле - верный ответ чаще, чем нет, но не тогда, когда «поле» втайне является адресом, страной, организацией или записью о происхождении, которую остальной мир уже моделирует. Композиция Мета-Моделей даёт авторам единое правило, как их различать, три механизма (встраивание, ссылка, примесь), чтобы связать их между собой, и каталог коннекторов, к которым их связывать. Это тот слой, который превращает реестр из тысячи изолированных стандартов в составляемую ткань, где понятие моделируется один раз и переиспользуется везде, и при этом ни одна модель не отдаёт свой суверенитет.