From 1719ec1934c33e4926ce8ba672fe2387c405d163 Mon Sep 17 00:00:00 2001 From: Bastien Gourdon Date: Wed, 5 Aug 2026 09:29:23 +0200 Subject: [PATCH] governance: rulebook v1.2 - TN-022 restreint le shortLabel aux cas ou il differe du label, annexe Display exhaustive sur 44 classes ; retrait de la copie dupliquee des shapes --- generated/PR_TBox_Rulebook.md | 57 +++++++++++++---- generated/PR_TBox_Rulebook.xlsx | Bin 28360 -> 29502 bytes governance/migration/migrate_tbox_v2_0.py | 16 +++-- governance/rules.yaml | 74 ++++++++++++++++------ 4 files changed, 110 insertions(+), 37 deletions(-) diff --git a/generated/PR_TBox_Rulebook.md b/generated/PR_TBox_Rulebook.md index c6d97e4..e79eadd 100644 --- a/generated/PR_TBox_Rulebook.md +++ b/generated/PR_TBox_Rulebook.md @@ -1,6 +1,6 @@ # Pernod Ricard Data MetaModel — T-Box Rulebook -**Version 1.1** — Draft for review — generated 2026-08-03 +**Version 1.2** — Draft for review — generated 2026-08-03 > Generated from `rules.yaml`. Do not edit this document: edit the source and regenerate (EV-007, EV-008). @@ -444,7 +444,7 @@ The label is derived, not authored. Anything a reader needs that the derivation ## TN-022 — The short label carries the spoken form -**Statement.** A term carries pr:shortLabel whenever the form derived under TN-018 is not what the organisation writes or says. The short label is free: acronyms, abbreviations, hyphens, short forms. +**Statement.** A term carries pr:shortLabel ONLY where the form derived under TN-018 is not what the organisation writes or says. Where the two coincide, no short label is declared: a duplicate of the label carries no information and is one more thing to keep in step. The short label follows the casing of the label it replaces — title case for a class — and admits what the label cannot: acronyms, abbreviations, dropped words. | | | |---|---| @@ -454,12 +454,13 @@ The label is derived, not authored. Anything a reader needs that the derivation | Executor | `review checklist` | | Procedure | _pending_ | -**Why.** The short label is what makes the derivation rule bearable. Without it, a mechanical label impoverishes every screen; with it, display becomes explicit and centrally governed instead of being improvised by each consumer. It is MAJOR rather than BLOCKING because judging whether a derived form matches what people actually say is human work, and EV-011 forbids declaring a rule blocking with no executor. +**Why.** The short label is what makes the derivation rule bearable. Without it, a mechanical label impoverishes every screen; with it, display becomes explicit and centrally governed instead of being improvised by each consumer. Restricting it to the cases where it actually differs is what keeps it meaningful: a short label present on every term degenerates into a second copy of the label, drifting from it one entry at a time. It is MAJOR rather than BLOCKING because judging whether a derived form matches what people actually say is human work, and EV-011 forbids declaring a rule blocking with no executor. | From | To | Note | |---|---|---| | "Data Sub Domain Owner" | short label Sub Domain Owner | the word Data is dropped in the spoken form | | "Key Performance Indicator" | short label KPI, acronym KPI | the acronym channel is what makes TN-002 bearable | +| a short label reading Metric on a class labelled Metric | no short label | a duplicate of the label carries nothing | ## TN-023 — The label is generated, never typed @@ -923,19 +924,47 @@ Applies TN-011 and TN-022. The short label is what screens display and what rela | IRI | rdfs:label | shortLabel | acronym | Note | |---|---|---|---|---| -| `DataDomain` | Data Domain | Domain | DD | DD is already the short form used inside A-Box identifiers under NR-014 | -| `DataSubDomain` | Data Sub Domain | Sub Domain | SD | no hyphen | -| `DataDomainOwner` | Data Domain Owner | Domain Owner | DDO | | -| `DataSubDomainOwner` | Data Sub Domain Owner | Sub Domain Owner | SDO | | -| `DataProductOwner` | Data Product Owner | Product Owner | PO | NOT DPO — the initialism is taken by Data Protection Officer | -| `DataSteward` | Data Steward | Steward | - | | -| `DataGovernanceLead` | Data Governance Lead | Governance Lead | DGL | | -| `DataElement` | Data Element | Element | - | drives the name of hasElement and hasGrainElement | -| `BusinessConcept` | Business Concept | Concept | - | drives the name of usesConcept | +| `MetaModelObject` | Meta Model Object | - | - | | +| `DefinedObject` | Defined Object | - | - | | +| `CapturedObject` | Captured Object | - | - | | +| `OwnershipLayerObject` | Ownership Layer Object | Ownership Layer | - | the categorisation role moves into rdfs:comment | +| `BusinessLayerObject` | Business Layer Object | Business Layer | - | | +| `LogicalLayerObject` | Logical Layer Object | Logical Layer | - | | +| `PhysicalLayerObject` | Physical Layer Object | Physical Layer | - | | +| `DeliveryLayerObject` | Delivery Layer Object | Delivery Layer | - | | +| `ConsumptionLayerObject` | Consumption Layer Object | Consumption Layer | - | | +| `GovernanceLayerObject` | Governance Layer Object | Governance Layer | - | | +| `DataStructure` | Data Structure | - | - | the former short label was a gloss and belongs in rdfs:comment | +| `KeyConstraint` | Key Constraint | - | - | | +| `Actor` | Actor | - | - | | +| `DataDomain` | Data Domain | Domain | DD | DD is already the short form used inside instance identifiers | +| `DataSubDomain` | Data Sub Domain | Sub Domain | SD | no hyphen, for consistency | | `BusinessObject` | Business Object | - | BO | | +| `BusinessConcept` | Business Concept | Concept | - | drives the name of usesConcept | +| `Metric` | Metric | - | - | | | `KeyPerformanceIndicator` | Key Performance Indicator | KPI | KPI | the acronym channel is what makes TN-002 bearable | +| `DataObject` | Data Object | - | - | | +| `DataElement` | Data Element | Element | - | drives the name of hasElement and hasGrainElement | +| `Database` | Database | - | - | | +| `Schema` | Schema | - | - | | +| `Field` | Field | - | - | | +| `System` | System | - | - | | +| `SystemType` | System Type | - | - | | +| `Transformation` | Transformation | - | - | | +| `BaseTable` | Base Table | - | - | | +| `ExternalTable` | External Table | - | - | | +| `View` | View | - | - | | +| `PrimaryKey` | Primary Key | - | - | | +| `ForeignKey` | Foreign Key | - | - | | +| `DataProduct` | Data Product | - | - | | +| `DataContract` | Data Contract | - | - | | +| `DataInterface` | Data Interface | - | - | | | `BusinessIntelligenceWorkspace` | Business Intelligence Workspace | BI Workspace | - | | | `BusinessIntelligenceDataSource` | Business Intelligence Data Source | BI Data Source | - | | -| `BusinessIntelligenceField` | Business Intelligence Field | BI Field | - | | +| `BusinessIntelligenceField` | Business Intelligence Field | BI Field | - | reproduced whole in containsBIField under TN-011 | | `BusinessIntelligenceReport` | Business Intelligence Report | BI Report | - | | -| `OwnershipLayerObject` | Ownership Layer Object | - | - | the categorisation role moves into rdfs:comment | +| `DataDomainOwner` | Data Domain Owner | Domain Owner | DDO | | +| `DataSubDomainOwner` | Data Sub Domain Owner | Sub Domain Owner | SDO | | +| `DataProductOwner` | Data Product Owner | Product Owner | PO | not DPO - the initialism is taken by Data Protection Officer, a real GDPR role | +| `DataSteward` | Data Steward | Steward | - | | +| `DataGovernanceLead` | Data Governance Lead | Governance Lead | DGL | | diff --git a/generated/PR_TBox_Rulebook.xlsx b/generated/PR_TBox_Rulebook.xlsx index fd3ebe7542bd311d29804d3611d1150e8511f545..2b41abb951a4405be4b679e142f2e5c8209aefb4 100644 GIT binary patch delta 23270 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 nH{0K1amZgf @@ -520,9 +520,12 @@ rules: category: Label title: The short label carries the spoken form statement: > - A term carries pr:shortLabel whenever the form derived under TN-018 is not - what the organisation writes or says. The short label is free: acronyms, - abbreviations, hyphens, short forms. + A term carries pr:shortLabel ONLY where the form derived under TN-018 is not + what the organisation writes or says. Where the two coincide, no short label + is declared: a duplicate of the label carries no information and is one more + thing to keep in step. The short label follows the casing of the label it + replaces — title case for a class — and admits what the label cannot: + acronyms, abbreviations, dropped words. scope: [class, individual] severity: MAJOR control: {tier: human, executor: review checklist, procedure: null} @@ -531,12 +534,16 @@ rules: The short label is what makes the derivation rule bearable. Without it, a mechanical label impoverishes every screen; with it, display becomes explicit and centrally governed instead of being improvised by each - consumer. It is MAJOR rather than BLOCKING because judging whether a derived - form matches what people actually say is human work, and EV-011 forbids - declaring a rule blocking with no executor. + consumer. Restricting it to the cases where it actually differs is what + keeps it meaningful: a short label present on every term degenerates into a + second copy of the label, drifting from it one entry at a time. It is MAJOR + rather than BLOCKING because judging whether a derived form matches what + people actually say is human work, and EV-011 forbids declaring a rule + blocking with no executor. examples: - {from: "\"Data Sub Domain Owner\"", to: "short label Sub Domain Owner", note: the word Data is dropped in the spoken form} - {from: "\"Key Performance Indicator\"", to: "short label KPI, acronym KPI", note: the acronym channel is what makes TN-002 bearable} + - {from: "a short label reading Metric on a class labelled Metric", to: no short label, note: a duplicate of the label carries nothing} - id: TN-023 category: Label @@ -1026,20 +1033,51 @@ abstractness: - {term: SystemType, is_abstract: false, note: "must stay concrete — it types five individuals"} # ====== ANNEX: DISPLAY (TN-011, TN-022) ====== +# Authoritative and exhaustive: a class absent from this list carries no +# short label and no acronym. A null short_label means any existing one is +# removed, since a duplicate of the label carries no information (TN-022). display: -- {iri: DataDomain, label: "Data Domain", short_label: "Domain", acronym: "DD", note: "DD is already the short form used inside A-Box identifiers under NR-014"} -- {iri: DataSubDomain, label: "Data Sub Domain", short_label: "Sub Domain", acronym: "SD", note: "no hyphen"} -- {iri: DataDomainOwner, label: "Data Domain Owner", short_label: "Domain Owner", acronym: "DDO", note: null} -- {iri: DataSubDomainOwner, label: "Data Sub Domain Owner", short_label: "Sub Domain Owner", acronym: "SDO", note: null} -- {iri: DataProductOwner, label: "Data Product Owner", short_label: "Product Owner", acronym: "PO", note: "NOT DPO — the initialism is taken by Data Protection Officer"} -- {iri: DataSteward, label: "Data Steward", short_label: "Steward", acronym: null, note: null} -- {iri: DataGovernanceLead, label: "Data Governance Lead", short_label: "Governance Lead", acronym: "DGL", note: null} -- {iri: DataElement, label: "Data Element", short_label: "Element", acronym: null, note: "drives the name of hasElement and hasGrainElement"} -- {iri: BusinessConcept, label: "Business Concept", short_label: "Concept", acronym: null, note: "drives the name of usesConcept"} +- {iri: MetaModelObject, label: "Meta Model Object", short_label: null, acronym: null, note: null} +- {iri: DefinedObject, label: "Defined Object", short_label: null, acronym: null, note: null} +- {iri: CapturedObject, label: "Captured Object", short_label: null, acronym: null, note: null} +- {iri: OwnershipLayerObject, label: "Ownership Layer Object", short_label: "Ownership Layer", acronym: null, note: "the categorisation role moves into rdfs:comment"} +- {iri: BusinessLayerObject, label: "Business Layer Object", short_label: "Business Layer", acronym: null, note: null} +- {iri: LogicalLayerObject, label: "Logical Layer Object", short_label: "Logical Layer", acronym: null, note: null} +- {iri: PhysicalLayerObject, label: "Physical Layer Object", short_label: "Physical Layer", acronym: null, note: null} +- {iri: DeliveryLayerObject, label: "Delivery Layer Object", short_label: "Delivery Layer", acronym: null, note: null} +- {iri: ConsumptionLayerObject, label: "Consumption Layer Object", short_label: "Consumption Layer", acronym: null, note: null} +- {iri: GovernanceLayerObject, label: "Governance Layer Object", short_label: "Governance Layer", acronym: null, note: null} +- {iri: DataStructure, label: "Data Structure", short_label: null, acronym: null, note: "the former short label was a gloss and belongs in rdfs:comment"} +- {iri: KeyConstraint, label: "Key Constraint", short_label: null, acronym: null, note: null} +- {iri: Actor, label: "Actor", short_label: null, acronym: null, note: null} +- {iri: DataDomain, label: "Data Domain", short_label: "Domain", acronym: "DD", note: "DD is already the short form used inside instance identifiers"} +- {iri: DataSubDomain, label: "Data Sub Domain", short_label: "Sub Domain", acronym: "SD", note: "no hyphen, for consistency"} - {iri: BusinessObject, label: "Business Object", short_label: null, acronym: "BO", note: null} +- {iri: BusinessConcept, label: "Business Concept", short_label: "Concept", acronym: null, note: "drives the name of usesConcept"} +- {iri: Metric, label: "Metric", short_label: null, acronym: null, note: null} - {iri: KeyPerformanceIndicator, label: "Key Performance Indicator", short_label: "KPI", acronym: "KPI", note: "the acronym channel is what makes TN-002 bearable"} +- {iri: DataObject, label: "Data Object", short_label: null, acronym: null, note: null} +- {iri: DataElement, label: "Data Element", short_label: "Element", acronym: null, note: "drives the name of hasElement and hasGrainElement"} +- {iri: Database, label: "Database", short_label: null, acronym: null, note: null} +- {iri: Schema, label: "Schema", short_label: null, acronym: null, note: null} +- {iri: Field, label: "Field", short_label: null, acronym: null, note: null} +- {iri: System, label: "System", short_label: null, acronym: null, note: null} +- {iri: SystemType, label: "System Type", short_label: null, acronym: null, note: null} +- {iri: Transformation, label: "Transformation", short_label: null, acronym: null, note: null} +- {iri: BaseTable, label: "Base Table", short_label: null, acronym: null, note: null} +- {iri: ExternalTable, label: "External Table", short_label: null, acronym: null, note: null} +- {iri: View, label: "View", short_label: null, acronym: null, note: null} +- {iri: PrimaryKey, label: "Primary Key", short_label: null, acronym: null, note: null} +- {iri: ForeignKey, label: "Foreign Key", short_label: null, acronym: null, note: null} +- {iri: DataProduct, label: "Data Product", short_label: null, acronym: null, note: null} +- {iri: DataContract, label: "Data Contract", short_label: null, acronym: null, note: null} +- {iri: DataInterface, label: "Data Interface", short_label: null, acronym: null, note: null} - {iri: BusinessIntelligenceWorkspace, label: "Business Intelligence Workspace", short_label: "BI Workspace", acronym: null, note: null} - {iri: BusinessIntelligenceDataSource, label: "Business Intelligence Data Source", short_label: "BI Data Source", acronym: null, note: null} -- {iri: BusinessIntelligenceField, label: "Business Intelligence Field", short_label: "BI Field", acronym: null, note: null} +- {iri: BusinessIntelligenceField, label: "Business Intelligence Field", short_label: "BI Field", acronym: null, note: "reproduced whole in containsBIField under TN-011"} - {iri: BusinessIntelligenceReport, label: "Business Intelligence Report", short_label: "BI Report", acronym: null, note: null} -- {iri: OwnershipLayerObject, label: "Ownership Layer Object", short_label: null, acronym: null, note: "the categorisation role moves into rdfs:comment"} +- {iri: DataDomainOwner, label: "Data Domain Owner", short_label: "Domain Owner", acronym: "DDO", note: null} +- {iri: DataSubDomainOwner, label: "Data Sub Domain Owner", short_label: "Sub Domain Owner", acronym: "SDO", note: null} +- {iri: DataProductOwner, label: "Data Product Owner", short_label: "Product Owner", acronym: "PO", note: "not DPO - the initialism is taken by Data Protection Officer, a real GDPR role"} +- {iri: DataSteward, label: "Data Steward", short_label: "Steward", acronym: null, note: null} +- {iri: DataGovernanceLead, label: "Data Governance Lead", short_label: "Governance Lead", acronym: "DGL", note: null}