Ir al contenido

Validar un modelo

validateArchiModel comprueba la integridad estructural de un modelo ya analizado — identificadores faltantes/duplicados y referencias cruzadas colgantes.

import { parseArchiModel, validateArchiModel } from '@cda/archi-semantic-core';
const model = parseArchiModel(xml);
const result = validateArchiModel(model);
console.log(result.valid); // boolean
for (const issue of result.errors) {
console.log(issue.code, issue.message, issue.path);
}

El validador construye un conjunto global de ids que abarca las siete colecciones con ids (carpetas, elementos, relaciones, vistas, objetos de diagrama, conexiones de diagrama, notas — Archi extrae todos los ids, semánticos y visuales, de un único conjunto compartido) y luego comprueba:

CódigoSe dispara cuando
missing-idUna entrada no tiene ningún id.
duplicate-idEl mismo id aparece en más de una entrada, en cualquier parte del modelo.
broken-relationship-sourceEl sourceId de una relación no se resuelve a ningún id conocido.
broken-relationship-targetEl targetId de una relación no se resuelve a ningún id conocido.
unrecognized-junction-typeEl atributo nativo type de un elemento Junction no es ""/está ausente (And) ni "or" (Or).
broken-diagram-object-elementEl archimateElementId de un objeto de diagrama no se resuelve a ningún id conocido.
broken-diagram-object-model-referenceEl referencedModelId de un DiagramModelReference no se resuelve a ningún id conocido.
broken-diagram-connection-relationshipEl archimateRelationshipId de una conexión no se resuelve a ningún id conocido.
broken-diagram-connection-sourceEl sourceId de una conexión no se resuelve a ningún id conocido.
broken-diagram-connection-targetEl targetId de una conexión no se resuelve a ningún id conocido.

Cada ArchiValidationIssue lleva un localizador path hacia el ArchiModel devuelto — no el XML original — de modo que un fallo puede rastrearse directamente hasta el campo que falló:

"relationships[rel-1].sourceId"
"diagramConnections[conn-7].targetId"

{ valid: true, errors: [] } significa que toda entrada con id tiene un id único no vacío y que toda referencia cruzada que este validador comprueba se resuelve. No comprueba:

  • la integridad de ArchiBounds;
  • las referencias de ArchiProfile/profiles;
  • nada relacionado con estilos o características.

Este validador no es un linter de calidad de arquitectura empresarial. Un modelo puede ser estructuralmente válido y aun así representar una mala arquitectura. Las reglas de calidad pertenecen a una capa separada (por ejemplo, una herramienta de gobernanza construida sobre ArchiModel), no al núcleo semántico. El validador tampoco evalúa las expresiones de etiqueta — la resolución es una preocupación del renderizado, no de la integridad.

El validador es una puerta natural del pipeline: ejecútelo en un hook de pre-commit o en un paso de CI y deje que el código de salida bloquee las fusiones. Consulte Validación estructural en CI para una receta completa con informes legibles por humanos.