Linneo es una biblioteca para Java 21 o superior, sin dependencias en tiempo de ejecución, que incluye una taxonomía
de clasificación de datos y la aplica a un modelo de datos. Una Taxonomy contiene tres jerarquías de términos con
claves en notación de puntos: categorías de datos (qué contiene un campo), usos de datos (para qué se tratan)
y sujetos de datos (de quién son). La taxonomía estándar es la taxonomía por defecto de fideslang más las
extensiones de Linneo para datos no personales y datos educativos. Cada categoría de datos lleva la protección que
requiere (naturaleza jurídica, confidencialidad, integridad, secreto), que sus hijas heredan y solo pueden endurecer.
Los modelos declaran lo que contienen con anotaciones, un Classifier comprueba esas anotaciones en los tests, las
actividades de tratamiento vinculan finalidades, interesados y datos personales con sus bases jurídicas y generan el
registro de actividades de tratamiento del RGPD, y tres exportadores traducen la taxonomía para un catálogo de
datos: OpenMetadataCatalog (clasificaciones y etiquetas de OpenMetadata), DataHubCatalog (un glosario de negocio
de DataHub) y AtlasCatalog (clasificaciones de Apache Atlas). Las aplicaciones añaden sus propios términos mediante una TaxonomyExtension, y Linneo incluye una opcional para
universidades que solo se aplica si se pide.
Esta referencia describe todos los tipos públicos. Para una introducción guiada, consulta el curso.
El JAR es el módulo JPMS con nombre io.github.devbpm.linneo:
module io.github.devbpm.linneo {
exports io.github.devbpm.linneo;
exports io.github.devbpm.linneo.annotation;
exports io.github.devbpm.linneo.classify;
exports io.github.devbpm.linneo.processing;
exports io.github.devbpm.linneo.catalog.openmetadata;
exports io.github.devbpm.linneo.catalog.datahub;
exports io.github.devbpm.linneo.catalog.atlas;
exports io.github.devbpm.linneo.extension.university;
uses io.github.devbpm.linneo.TaxonomyExtension;
}
| Paquete | Exportado | Contenido |
|---|---|---|
io.github.devbpm.linneo |
sí | La taxonomía (Taxonomy, TaxonomyBuilder, TaxonomyExtension), sus términos (Term, TermInfo, DataCategory, DataUse, DataSubject), los enumerados de protección y las constantes de claves (Categories, DataUses, DataSubjects) |
io.github.devbpm.linneo.annotation |
sí | Las anotaciones que declaran qué contiene cada campo de un modelo: @Category, @DefaultCategory, @CategoryByRow, @Exempt |
io.github.devbpm.linneo.classify |
sí | Lectura y verificación de las anotaciones de un modelo: Classifier, ClassClassification, FieldClassification, Violation, ClassificationException |
io.github.devbpm.linneo.processing |
sí | Las actividades de tratamiento y el registro de actividades de tratamiento del RGPD: ProcessingActivity, Transfer, LegalBasis, SpecialCategoryCondition, CriminalDataBasis, TransferSafeguard, ProcessingChecker, CheckedActivity, ProcessingViolation, ProcessingException, ProcessingRecord |
io.github.devbpm.linneo.catalog.openmetadata |
sí | La taxonomía como clasificaciones y etiquetas de OpenMetadata: OpenMetadataCatalog, OpenMetadataMapping, OmClassification, OmTag. Sin llamadas de red |
io.github.devbpm.linneo.catalog.datahub |
sí | La taxonomía como glosario de negocio de DataHub: DataHubCatalog, DataHubMapping, DhProposal. Sin llamadas de red |
io.github.devbpm.linneo.catalog.atlas |
sí | La taxonomía como clasificaciones de Apache Atlas: AtlasCatalog, AtlasMapping, AtlasClassificationDef. Sin llamadas de red |
io.github.devbpm.linneo.extension.university |
sí | Una extensión opcional para universidades, que no se aplica por defecto: UniversityTaxonomy y sus constantes de claves UniversityCategories, UniversityDataUses, UniversityDataSubjects |
io.github.devbpm.linneo.internal |
no | StandardTaxonomy, que carga los recursos TSV incluidos, y Json, el escritor JSON mínimo que comparten los tres exportadores. No forma parte de la API pública |
La cláusula uses permite que Taxonomy.load() y TaxonomyBuilder.withExtensions() encuentren extensiones con
java.util.ServiceLoader; consulta Extender la taxonomía. El módulo no tiene cláusula provides:
las extensiones que incluye se aplican de forma explícita; consulta Extensiones.
Para usar la biblioteca desde una aplicación modular:
module com.example.app {
requires io.github.devbpm.linneo;
}
Modelo de la taxonomía (io.github.devbpm.linneo)
Taxonomy (standard, load, builder, búsquedas, obsolescencia, navegación) y
TaxonomyException.Term, TermInfo, DataCategory, DataUse, DataSubject.LegalNature, Confidentiality, Integrity, Identifiability
y la regla de herencia.Categories, DataUses, DataSubjects.TaxonomyBuilder, TaxonomyExtension, CategoryDraft, TermDraft.Extensiones (io.github.devbpm.linneo.extension.university)
UniversityTaxonomy, UniversityCategories, UniversityDataUses,
UniversityDataSubjects: todos los términos con su protección, las claves estándar que conviene usar, las reglas
de derivación y las fuentes.Anotaciones (io.github.devbpm.linneo.annotation)
@Category@DefaultCategory@CategoryByRow@ExemptClasificación (io.github.devbpm.linneo.classify)
Classifier, ClassificationException.ClassClassification, FieldClassification.Violation y cada Code.Actividades de tratamiento (io.github.devbpm.linneo.processing)
ProcessingActivity, su Builder, Transfer.LegalBasis, SpecialCategoryCondition, CriminalDataBasis,
TransferSafeguard.ProcessingChecker, CheckedActivity, ProcessingViolation y
cada Code, ProcessingException.OpenMetadata (io.github.devbpm.linneo.catalog.openmetadata)
OpenMetadataCatalog, OmClassification, OmTag, cuerpos JSON,
correspondencia de etiquetas.OpenMetadataMapping.DataHub (io.github.devbpm.linneo.catalog.datahub)
DataHubCatalog, DhProposal, nodos y términos del glosario, cuerpos de
ingestProposal, términos de cada campo.DataHubMapping.Apache Atlas (io.github.devbpm.linneo.catalog.atlas)
AtlasCatalog, AtlasClassificationDef, tipos de clasificación, cuerpos de
typedefs y de clasificaciones.AtlasMapping.Los tres exportadores publican la misma taxonomía y calculan las etiquetas de cada campo clasificado a partir del
mismo FieldClassification; se diferencian en lo que ofrece cada catálogo. Ninguno hace llamadas de red ni aplica
las etiquetas a tus tablas: construyen cuerpos de petición y nombres.
| OpenMetadata | DataHub | Apache Atlas | |
|---|---|---|---|
| Punto de entrada | OpenMetadataCatalog |
DataHubCatalog |
AtlasCatalog |
| Una categoría se convierte en | una etiqueta anidada DataCategory.<key> en una clasificación mutuamente excluyente |
un término del glosario urn:li:glossaryTerm:DataCategory.<key>, más un nodo del glosario si tiene hijas |
un tipo de clasificación DataCategory.<key> |
| El árbol se convierte en | el parent de la etiqueta |
nodos que reflejan el árbol, e isRelatedTerms hacia el término del padre |
superTypes: una búsqueda del padre encuentra sus subclasificaciones |
| Protección implícita en una categoría | no se guarda en la etiqueta; va en cada columna con tagsOf(field) (tagsOf(category) la enumera) |
relatedTerms de su término |
no se guarda en el tipo; classificationsOf(category) la enumera |
| Naturaleza jurídica | PersonalData.Personal / SpecialCategory predefinidas (los datos penales son SpecialCategory) |
PersonalData.Personal / SpecialCategory / CriminalOffence |
PersonalData.Personal / SpecialCategory / CriminalOffence |
| Sensibilidad | PII.None / NonSensitive / Sensitive predefinidas, umbral sensitiveFrom |
— | — |
| Niveles y secreto | Confidentiality.*, Integrity.*, Identifiability.*, DataHandling.Secret |
los mismos, como términos del glosario | los mismos, como clasificaciones (no son supertipos de las categorías) |
| Se crea con la taxonomía estándar | 5 clasificaciones y 137 etiquetas | 293 propuestas: 28 nodos, 140 términos y 125 aspectos de relaciones | 146 tipos de clasificación |
| Peticiones | PUT /api/v1/classifications, PUT /api/v1/tags, una por cuerpo |
POST /aspects?action=ingestProposal, una por propuesta |
un único POST /api/atlas/v2/types/typedefs |
| Volver a enviar | crea o actualiza | UPSERT (sustituye cada aspecto) |
POST responde 409 si los tipos existen; se actualizan con PUT |
| Etiquetas de un campo | tagsOf(field): nombres de etiqueta |
termsOf(field): URN de términos |
classificationsOf(field): nombres; classificationsJson(field): cuerpo de la petición |
| Aplicarlas (tu código) | la API de tablas que ya uses | por ejemplo, la mutación GraphQL addTerms con la ruta del campo como subResource |
POST /api/atlas/v2/entity/guid/{guid}/classifications |
| Nombres | OpenMetadataMapping: siete nombres y un umbral |
DataHubMapping: seis nombres de nodo |
AtlasMapping: seis nombres de raíz |