> Перевод даётся для удобства чтения. Нормативным является английский оригинал. # Проекция Объекта → RDF / OWL **Спецификация Мета-Вселенной** **Идентификатор документа:** MU-V2-EX-011 **Название:** Разобранное приложение - проекция Объекта MUIF в RDF и OWL **Класс документа:** информативный **Версия:** 2.0 (черновик) **Статус:** рабочий черновик **Нормативные ссылки:** нет **Информативные ссылки:** [MMAS-Interchange](../../02-architecture/MMAS-Interchange.md), [Object](../../04-core-concepts/Object.md), [Projection](../../04-core-concepts/Projection.md), [Semantic-Mapping](../../03-federation/Semantic-Mapping.md) **Копирайт:** © Orkestron.AI **Лицензия:** Apache-2.0 --- # 1. Назначение [Объект](../../04-core-concepts/Object.md) MUIF есть единая семантическая точка истины. [Проекция](../../04-core-concepts/Projection.md) есть то, как этот Объект является в данном контексте. Граф RDF и онтология OWL суть два таких контекста: это приложение показывает, как один и тот же Объект `employee.person` проецируется в каждый, так что потребитель Семантической паутины может прочесть его, не изучая MUIF. Это *проекция*, а не переопределение: Объект остаётся полномочным в мета-модели, а формы RDF и OWL суть производные виды, управляемые [Семантическими отображениями](person-mappings.json) этого приложения. --- # 2. Исходный объект Сквозной пример - Объект `employee.person` (тот самый, что используется по всему приложению и в [`../federation-acme-govtax`](../federation-acme-govtax/)): ```json { "muifType": "Object", "id": "employee:Person", "csn": "employee.person", "kind": "Entity", "namespace": "employee", "provenance": { "owner": "urn:mu:universe:acme" }, "properties": [ { "name": "employee.givenName", "valueType": "string", "required": true }, { "name": "employee.familyName", "valueType": "string", "required": true }, { "name": "employee.birthDate", "valueType": "date", "required": false } ] } ``` Для проекции мы привязываем два префикса: ```text @prefix emp: . @prefix mu: . ``` --- # 3. Проекция (а) - триплеты RDF (Turtle) Объект проецируется в RDF двумя частями: триплеты **схемы** (класс и его свойства как термины) и **экземпляр**, показывающий одну особь. Отображения из [`person-mappings.json`](person-mappings.json) выдаются связями `owl:equivalentClass` / `rdfs:subClassOf` и `owl:equivalentProperty`, так что граф остаётся связанным с внешними стандартами. ```turtle @prefix emp: . @prefix mu: . @prefix schema: . @prefix foaf: . @prefix rdf: . @prefix rdfs: . @prefix owl: . @prefix xsd: . # --- schema: the Object as an RDF class --- emp:Person a rdfs:Class, owl:Class ; rdfs:label "Employee Person" ; mu:csn "employee.person" ; mu:owner ; rdfs:subClassOf schema:Person ; # employee.person is narrower than schema:Person rdfs:subClassOf foaf:Person . emp:givenName a rdf:Property, owl:DatatypeProperty ; rdfs:domain emp:Person ; rdfs:range xsd:string ; owl:equivalentProperty schema:givenName, foaf:givenName . emp:familyName a rdf:Property, owl:DatatypeProperty ; rdfs:domain emp:Person ; rdfs:range xsd:string ; owl:equivalentProperty schema:familyName, foaf:familyName . emp:birthDate a rdf:Property, owl:DatatypeProperty ; rdfs:domain emp:Person ; rdfs:range xsd:date ; owl:equivalentProperty schema:birthDate . # --- instance: one employee.person individual --- a emp:Person ; emp:givenName "Ada" ; emp:familyName "Lovelace" ; emp:birthDate "1815-12-10"^^xsd:date . ``` Потребитель, говорящий лишь на Schema.org или FOAF, может пройти по связям `owl:equivalentProperty` и `rdfs:subClassOf` и прочесть особь целиком на собственном словаре. --- # 4. Проекция (б) - класс OWL Тот же Объект проецируется в определение класса OWL. Обязательные свойства MUIF становятся ограничениями мощности `owl:Restriction`, необязательные - нет. Функциональный синтаксис взят здесь ради ясности, с теми же префиксами, что в разделе 3. ```text Class: emp:Person Annotations: rdfs:label "Employee Person", mu:csn "employee.person" SubClassOf: schema:Person, # narrower than the Schema.org concept foaf:Person, # required: employee.givenName (exactly 1 string) emp:givenName exactly 1 xsd:string, # required: employee.familyName (exactly 1 string) emp:familyName exactly 1 xsd:string, # optional: employee.birthDate (0..1 date) emp:birthDate max 1 xsd:date DatatypeProperty: emp:givenName EquivalentTo: schema:givenName, foaf:givenName Domain: emp:Person Range: xsd:string DatatypeProperty: emp:familyName EquivalentTo: schema:familyName, foaf:familyName Domain: emp:Person Range: xsd:string DatatypeProperty: emp:birthDate EquivalentTo: schema:birthDate Domain: emp:Person Range: xsd:date ``` --- # 5. Что сохраняется при проекции | Понятие MUIF | Проекция в RDF / OWL | |--------------|----------------------| | Объект `employee:Person` | `emp:Person` как `owl:Class` | | `csn` / `provenance.owner` | Аннотации `mu:csn` / `mu:owner` | | Свойство (`required: true`) | `owl:DatatypeProperty` + ограничение `exactly 1` | | Свойство (`required: false`) | `owl:DatatypeProperty` + ограничение `max 1` | | Отображение `relation: equivalent` | `owl:equivalentProperty` | | Отображение `relation: broader` (цель) | `rdfs:subClassOf` (локальное ⊑ внешнее) | Проекция **не теряет смысла и не теряет ничего семантического**: идентичность, владение, обязательность и внешние отображения - всё переживает переход. Как и во всякой Проекции, формы RDF и OWL суть производные виды; полномочная истина остаётся в Объекте MUIF. --- # 6. См. также - [`schemaorg-person.import.json`](schemaorg-person.import.json) - импорт Schema.org, делающий `schema:Person` доступным Семантическим пакетом. - [`person-mappings.json`](person-mappings.json) - отображения поле за полем, выданные выше как `owl:equivalentProperty` / `rdfs:subClassOf`. - [MMAS-Interchange](../../02-architecture/MMAS-Interchange.md) - документная модель MUIF, откуда эти Объекты происходят.