> Esta traducción se ofrece por comodidad. El texto normativo es el original en inglés. # Proyección de Objeto → RDF / OWL **Especificación del Meta-Universo** **ID del documento:** MU-V2-EX-011 **Título:** Apéndice resuelto - proyectar un Objeto MUIF a RDF y OWL **Clase de documento:** informativo **Versión:** 2.0 (borrador) **Estado:** borrador de trabajo **Referencias normativas:** ninguna **Referencias informativas:** [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) **Copyright:** © Orkestron.AI **Licencia:** Apache-2.0 --- # 1. Propósito Un [Objeto](../../04-core-concepts/Object.md) MUIF es un único Punto semántico de verdad. Una [Proyección](../../04-core-concepts/Projection.md) es cómo aparece ese Objeto en un contexto dado. Un grafo RDF y una ontología OWL son dos contextos así: este apéndice muestra cómo el mismo Objeto `employee.person` se proyecta en cada uno, de modo que quien consume desde la Web semántica pueda leerlo sin aprender MUIF. Esto es una *proyección*, no una redefinición: el Objeto sigue siendo autoritativo en el meta-modelo, y las formas RDF y OWL son vistas derivadas regidas por las [Correspondencias semánticas](person-mappings.json) de este apéndice. --- # 2. El objeto de origen El ejemplo recurrente es el Objeto `employee.person` (el mismo que se usa por todo este apéndice y en [`../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 } ] } ``` Para la proyección atamos dos prefijos: ```text @prefix emp: . @prefix mu: . ``` --- # 3. Proyección (a) - tripletas RDF (Turtle) El Objeto se proyecta a RDF en dos partes: las tripletas de **esquema** (la clase y sus propiedades como términos) y una **instancia** que muestra un individuo. Las correspondencias de [`person-mappings.json`](person-mappings.json) se emiten como enlaces `owl:equivalentClass` / `rdfs:subClassOf` y `owl:equivalentProperty`, de modo que el grafo siga conectado a los estándares externos. ```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 . ``` Quien solo hable Schema.org o FOAF puede seguir los enlaces `owl:equivalentProperty` y `rdfs:subClassOf` y leer el individuo entero a través de su propio vocabulario. --- # 4. Proyección (b) - clase OWL El mismo Objeto se proyecta a una definición de clase OWL. Las propiedades MUIF obligatorias se convierten en restricciones de cardinalidad `owl:Restriction`; las opcionales no. Aquí se usa la sintaxis funcional por claridad, con los mismos prefijos que en la sección 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. Qué se preserva a través de la proyección | Concepto MUIF | Proyección RDF / OWL | |--------------|----------------------| | Objeto `employee:Person` | `emp:Person` como `owl:Class` | | `csn` / `provenance.owner` | Anotaciones `mu:csn` / `mu:owner` | | Propiedad (`required: true`) | `owl:DatatypeProperty` + restricción `exactly 1` | | Propiedad (`required: false`) | `owl:DatatypeProperty` + restricción `max 1` | | Correspondencia `relation: equivalent` | `owl:equivalentProperty` | | Correspondencia `relation: broader` (destino) | `rdfs:subClassOf` (local ⊑ externo) | La proyección es **sin pérdida para el significado y sin pérdida de nada semántico**: identidad, propiedad, obligatoriedad y las correspondencias externas sobreviven todas. Como en toda Proyección, las formas RDF y OWL son vistas derivadas; la verdad autoritativa se queda en el Objeto MUIF. --- # 6. Véase también - [`schemaorg-person.import.json`](schemaorg-person.import.json) - la importación de Schema.org que pone `schema:Person` a disposición como Paquete semántico. - [`person-mappings.json`](person-mappings.json) - las correspondencias campo a campo emitidas arriba como `owl:equivalentProperty` / `rdfs:subClassOf`. - [MMAS-Interchange](../../02-architecture/MMAS-Interchange.md) - el modelo documental MUIF del que proceden estos Objetos.