--- layout: default title: "Especificación Técnica de la Estructura de Ontologías" parent: "Spanish (Beta)" --- # Especificación Técnica de la Estructura de Ontologías > **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta. ## Resumen Esta especificación describe la estructura y el formato de las ontologías dentro del sistema TrustGraph. Las ontologías proporcionan modelos de conocimiento formales que definen clases, propiedades y relaciones, lo que permite capacidades de razonamiento e inferencia. El sistema utiliza un formato de configuración inspirado en OWL que representa ampliamente los conceptos de OWL/RDFS, al tiempo que está optimizado para los requisitos de TrustGraph. **Convención de Nombres**: Este proyecto utiliza kebab-case para todos los identificadores (claves de configuración, puntos finales de la API, nombres de módulos, etc.) en lugar de snake_case. ## Objetivos - **Gestión de Clases y Propiedades**: Definir clases similares a OWL con propiedades, dominios, rangos y restricciones de tipo. - **Soporte Semántico Avanzado**: Permitir propiedades completas de RDFS/OWL, incluyendo etiquetas, soporte multilingüe y restricciones formales. - **Soporte para Múltiples Ontologías**: Permitir que múltiples ontologías coexistan e interactúen. - **Validación y Razonamiento**: Asegurar que las ontologías cumplan con estándares similares a OWL, con verificación de consistencia y soporte de inferencia. - **Compatibilidad con Estándares**: Soporte de importación/exportación en formatos estándar (Turtle, RDF/XML, OWL/XML) al tiempo que se mantiene la optimización interna. ## Antecedentes TrustGraph almacena ontologías como elementos de configuración en un sistema flexible de clave-valor. Si bien el formato está inspirado en OWL (Web Ontology Language), está optimizado para los casos de uso específicos de TrustGraph y no se adhiere estrictamente a todas las especificaciones de OWL. Las ontologías en TrustGraph permiten: - Definición de tipos de objetos formales y sus propiedades. - Especificación de dominios, rangos y restricciones de tipo de propiedades. - Razonamiento e inferencia lógicos. - Relaciones complejas y restricciones de cardinalidad. - Soporte multilingüe para la internacionalización. ## Estructura de la Ontología ### Almacenamiento de la Configuración Las ontologías se almacenan como elementos de configuración con el siguiente patrón: - **Tipo**: `ontology` - **Clave**: Identificador de ontología único (por ejemplo, `natural-world`, `domain-model`). - **Valor**: Ontología completa en formato JSON. ### Estructura JSON El formato JSON de la ontología consta de cuatro secciones principales: #### 1. Metadatos Contiene información administrativa y descriptiva sobre la ontología: ```json { "metadata": { "name": "The natural world", "description": "Ontology covering the natural order", "version": "1.0.0", "created": "2025-09-20T12:07:37.068Z", "modified": "2025-09-20T12:12:20.725Z", "creator": "current-user", "namespace": "http://trustgraph.ai/ontologies/natural-world", "imports": ["http://www.w3.org/2002/07/owl#"] } } ``` **Campos:** - `name`: Nombre legible por humanos de la ontología. - `description`: Descripción breve del propósito de la ontología. - `version`: Número de versión semántico. - `created`: Marca de tiempo ISO 8601 de creación. - `modified`: Marca de tiempo ISO 8601 de última modificación. - `creator`: Identificador del usuario/sistema que creó. - `namespace`: URI base para elementos de la ontología. - `imports`: Matriz de URIs de ontologías importadas. #### 2. Clases Define los tipos de objetos y sus relaciones jerárquicas: ```json { "classes": { "animal": { "uri": "http://trustgraph.ai/ontologies/natural-world#animal", "type": "owl:Class", "rdfs:label": [{"value": "Animal", "lang": "en"}], "rdfs:comment": "An animal", "rdfs:subClassOf": "lifeform", "owl:equivalentClass": ["creature"], "owl:disjointWith": ["plant"], "dcterms:identifier": "ANI-001" } } } ``` **Propiedades soportadas:** - `uri`: URI completa de la clase. - `type`: Siempre `"owl:Class"`. - `rdfs:label`: Matriz de etiquetas con etiquetas de idioma. - `rdfs:comment`: Descripción de la clase. - `rdfs:subClassOf`: Identificador de la clase padre (herencia simple). - `owl:equivalentClass`: Lista de clases equivalentes. - `owl:disjointWith`: Lista de clases disjuntas. - `dcterms:identifier`: Identificador de la clase. #### 3. Propiedades de Objetos Define las relaciones entre las clases: ```json { "objectProperties": { "hasPart": { "uri": "http://trustgraph.ai/ontologies/natural-world#hasPart", "type": "owl:ObjectProperty", "rdfs:label": [{"value": "hasPart", "lang": "en"}], "rdfs:comment": "Represents a part-whole relationship", "domain": "lifeform", "range": "lifeform" } } } ``` **Propiedades soportadas:** - `uri`: URI completa de la propiedad de objeto. - `type`: Siempre `"owl:ObjectProperty"`. - `rdfs:label`: Matriz de etiquetas con etiquetas de idioma. - `rdfs:comment`: Descripción de la propiedad de objeto. - `domain`: Clase de dominio de la propiedad de objeto. - `range`: Clase de rango de la propiedad de objeto. #### 4. Propiedades de Datos Define las características de las clases: ```json { "datatypeProperties": { "number-of-legs": { "uri": "http://trustgraph.ai/ontologies/natural-world#number-of-legs", "type": "owl:DatatypeProperty", "rdfs:label": [{"value": "number-of-legs", "lang": "en"}], "rdfs:comment": "Count of number of legs of the animal", "rdfs:range": "xsd:nonNegativeInteger", "rdfs:domain": "animal" } } } ``` **Propiedades soportadas:** - `uri`: URI completa de la propiedad de datos. - `type`: Siempre `"owl:DatatypeProperty"`. - `rdfs:label`: Matriz de etiquetas con etiquetas de idioma. - `rdfs:comment`: Descripción de la propiedad de datos. - `rdfs:range`: Tipo de datos de la propiedad de datos. - `rdfs:domain`: Clase de dominio de la propiedad de datos. ### Estructura JSON El formato JSON de la ontología consta de cuatro secciones principales: #### 1. Metadatos Contiene información administrativa y descriptiva sobre la ontología: ```json { "metadata": { "name": "The natural world", "description": "Ontology covering the natural order", "version": "1.0.0", "created": "2025-09-20T12:07:37.068Z", "modified": "2025-09-20T12:12:20.725Z", "creator": "current-user", "namespace": "http://trustgraph.ai/ontologies/natural-world", "imports": ["http://www.w3.org/2002/07/owl#"] } } ``` **Campos:** - `name`: Nombre legible por humanos de la ontología. - `description`: Descripción breve del propósito de la ontología. - `version`: Número de versión semántico. - `created`: Marca de tiempo ISO 8601 de creación. - `modified`: Marca de tiempo ISO 8601 de última modificación. - `creator`: Identificador del usuario/sistema que creó. - `namespace`: URI base para elementos de la ontología. - `imports`: Matriz de URIs de ontologías importadas. #### 2. Clases Define los tipos de objetos y sus relaciones jerárquicas: ```json { "classes": { "lifeform": { "uri": "http://trustgraph.ai/ontologies/natural-world#lifeform", "type": "owl:Class", "rdfs:label": [{"value": "Lifeform", "lang": "en"}], "rdfs:comment": "A living thing" }, "animal": { "uri": "http://trustgraph.ai/ontologies/natural-world#animal", "type": "owl:Class", "rdfs:label": [{"value": "Animal", "lang": "en"}], "rdfs:comment": "An animal", "rdfs:subClassOf": "lifeform" }, "cat": { "uri": "http://trustgraph.ai/ontologies/natural-world#cat", "type": "owl:Class", "rdfs:label": [{"value": "Cat", "lang": "en"}], "rdfs:comment": "A cat", "rdfs:subClassOf": "animal" }, "dog": { "uri": "http://trustgraph.ai/ontologies/natural-world#dog", "type": "owl:Class", "rdfs:label": [{"value": "Dog", "lang": "en"}], "rdfs:comment": "A dog", "rdfs:subClassOf": "animal", "owl:disjointWith": ["cat"] } }, "objectProperties": {}, "datatypeProperties": { "number-of-legs": { "uri": "http://trustgraph.ai/ontologies/natural-world#number-of-legs", "type": "owl:DatatypeProperty", "rdfs:label": [{"value": "number-of-legs", "lang": "en"}], "rdfs:comment": "Count of number of legs of the animal", "rdfs:range": "xsd:nonNegativeInteger", "rdfs:domain": "animal" } } } ``` ## Reglas de Validación ### Validación Estructural 1. **Consistencia de URI**: Todos los URIs deben seguir el patrón `{namespace}#{identifier}`. 2. **Jerarquía de Clases**: No debe haber herencia circular en `rdfs:subClassOf`. 3. **Dominios/Rangos de Propiedades**: Deben referenciar clases existentes o tipos XSD válidos. 4. **Clases Disjuntas**: No pueden ser subclases entre sí. 5. **Propiedades Inversas**: Deben ser bidireccionales si se especifican. ### Validación Semántica 1. **Identificadores Únicos**: Los identificadores de clase y propiedad deben ser únicos dentro de una ontología. 2. **Etiquetas de Idioma**: Deben seguir el formato de etiqueta de idioma BCP 47. 3. **Restricciones de Cardinalidad**: `minCardinality` ≤ `maxCardinality` cuando ambos están especificados. 4. **Propiedades Funcionales**: No pueden tener `maxCardinality` > 1. ## Soporte de Formato de Importación/Exportación Si bien el formato interno es JSON, el sistema admite la conversión a/desde formatos de ontología estándar: - **Turtle (.ttl)**: Serialización RDF compacta. - **RDF/XML (.rdf, .owl)**: Formato estándar de W3C. - **OWL/XML (.owx)**: Formato XML específico de OWL. - **JSON-LD (.jsonld)**: JSON para Linked Data. ## Referencias - [OWL 2 Web Ontology Language](https://www.w3.org/TR/owl2-overview/) - [RDF Schema 1.1](https://www.w3.org/TR/rdf-schema/) - [XML Schema Datatypes](https://www.w3.org/TR/xmlschema-2/) - [BCP 47 Language Tags](https://tools.ietf.org/html/bcp47)