# Knowledge Discovery Metamodel

Knowledge Discovery Metamodel (en español "Metamodelo de Descubrimiento de Conocimiento") es una especificación públicamente accesible del Object Management Group (OMG), diseñada para ser la base de la iniciativa Architecture Driven Modernization (ADM) del OMG.
KDM provee una representación común intermedia para los sistemas software existentes y sus entornos operativos. Es una representación compatible, e independiente de la plataforma y lenguaje de programación. KDM es un meta-modelo MOF, que define un formato de intercambio XMI entre herramientas que trabajan con software existente, y define una API sobre la que poder construir herramientas de nueva generación de modernización y aseguramiento del software.

## Conceptos clave

Los conceptos clave de KDM son:
* KDM es un modelo MOF
* KDM es un modelo entidad-relación
* KDM define una ontología para describir sistemas software existentes
* KDM puede ser extendido para capturar entidades y relaciones específicas del lenguaje, aplicación e implementación
* KDM define múltiples jerarquías de entidades vía contenedores y grupos
* Los modelos KDM se pueden componer (es posible agrupar varias entidades en un contenedor tipado, que en adelante representará la colección entera de entidades agrupadas mediante relaciones agregadas
* El analista es capaz de refactorizar el modelo (por ejemplo moviendo entidades entre contenedores) y mapear cambios en el modelo a cambios en el software a través de enlaces de trazabilidad
* KDM está alineado con el estándar ISO/IEC 11404 Language-Independent Datatypes and SBVR

## KDM

Usualmente, el conocimiento obtenido de software existente, es presentado en forma de modelos sobre los que podemos realizar consultas. La "entidad-relación" es un formato frecuente en que representar el conocimiento obtenido del software existente. KDM define una ontología para los activos software y sus relaciones, con el propósito de realizar descubrimiento de conocimiento en código existente.
KDM estandariza aproximaciones existentes de descubrimiento de conocimiento en artefactos de ingeniería del software, también conocido como "software mining".
El propósito de KDM es asegurar la interoperabilidad entre herramientas para el mantenimiento, la evolución, evaluación y modernización. KDM es definido como un meta-modelo que puede ser visto también como una ontología para describir los aspectos clave del conocimiento relacionado con las varias facetas del software de empresa.
Apoyar KDM significa invertir en el ecosistema KDM: una comunidad cohesiva basada en estándares abiertos y en crecimiento, de vendedores de herramientas, proveedores de servicios, y componentes comerciales.
KDM es capaz de representar sistemas software empresariales completos, no solo código. KDM es una representación "entidad-relación" de amplio espectro, que describe el software existente. KDM representa elementos estructurales y de comportamiento de sistemas software existentes. El concepto clave de KDM es el contenedor: una entidad que posee otras entidades. Esto permite a KDM representar sistemas existentes en varios niveles de granularidad.
KDM define una precisa base semántica para representar el comportamiento, llamada micro-KDM. Esta provee una representación intermedia de gran fidelidad, que puede ser usada, por ejemplo, para realizar análisis estático de sistemas software existentes. Micro-KDM puede ser visto como una máquina virtual de KDM, aunque KDM no es un modelo ejecutable, o un modelo de restricciones, sino una representación de artefactos existentes, con fines analíticos.
KDM facilita el análisis incremental de los sistemas software existentes, donde la representación inicial de KDM es analizada, y más piezas de conocimiento son extraídas y hechas explícitas, conforme las transformaciones KDM a KDM, completamente realizadas en el espacio tecnológico de KDM. Los pasos del proceso de extracción de conocimiento, pueden ser realizados por herramientas, y pueden involucrar al analista.
KDM es una representación independiente de lenguaje y plataforma. Sus mecanismos de extensibilidad permiten añadir conocimiento específico de dominio, aplicación e implementación.

## Arquitectura

Los paquetes KDM están organizados en las siguientes cuatro capas:

### Capa de infraestructura

consiste en los paquetes Core, KDM y Source; que proveen un pequeño núcleo común para los demás paquetes, el inventario de modelos de artefactos de los sistemas existentes con total trazabilidad entre los elementos del meta-modelo en forma de enlaces al código fuente de los artefactos, así como el mecanismo uniforme de extensibilidad. El paquete Core determina varios de los patrones que son utilizados por otros paquetes KDM. Aunque KDM utiliza MOF, hay una alineación entre el núcleo de KDM y el Resources Description Framework (RDF).

### Capa de elementos de programa

La capa de elementos de programa consiste en los paquetes Code y Action.
El paquete Code representa los elementos de programación determinados por los lenguajes de programación, por ejemplo los tipos de datos, procedimientos, clases, métodos, variables, etc. El propósito de este paquete es similar al Common Application Meta-model (CAM), perteneciente a otra especificación del OMG llamada Enterprise Application Integration (EAI). El paquete Code de KDM provee un nivel más elevado de detalle, y se integra impecablemente con las vistas arquitecturalmente significativas del sistema software. La representación de tipos de datos en KDM está alineada con el estándar ISO/IEC 11404.
El paquete Action captura los elementos de comportamiento de bajo nivel de las aplicaciones, incluyendo los flujos detallados de control y datos entre declaraciones. Los paquetes Code y Action, en combinación, proveen una representación intermedia fiel de cada componente del sistema software empresarial.

### Capa de recursos

La capa de recursos representa el entorno operacional de los sistemas software existentes. Está relacionada con el área de la Enterprise Application Integration (EAI).
El paquete Platform representa el entorno operativo del software, relacionado con el sistema operante, el middleware, etc. incluyendo el flujo de control entre componentes tal como son determinados por la plataforma runtime.
El paquete UI representa el conocimiento relacionado con las interfaces de usuario de los sistemas software existentes.
El paquete Event representa el conocimiento relacionado con los eventos y comportamiento de las transiciones de estado de los sistemas software existentes.
El paquete Data representa los artefactos relacionados con los datos persistentes, tales como ficheros indexados, bases de datos y otros tipos de almacenes de datos. Estos activos son clave para el software empresarial, ya que representan los metadatos empresariales. El paquete KDM está alineado con otra especificación del OMG, llamada Common Warehouse metamodel (CWM).

### Capa de abstracciones

La capa de abstracciones representa las abstracciones de dominio y aplicación.
El paquete Conceptual representa el conocimiento del dominio del negocio y las reglas de negocio, en la medida en que esta información puede ser extraída de aplicaciones existentes. Estos paquetes están alineados con otra especificación del OMG, llamada Semantics of Business Vocabulary and Business Rules (SBVR).
El paquete Structure describe los elementos del meta-modelo para representar la organización lógica del sistema software en subsistemas, capas y componentes.
El paquete Build representa la vista "ingenieril" del sistema software.

## Enlaces

* Especificacíon del OMG
* Datos: Q6423288