176 lines
9.7 KiB
YAML
176 lines
9.7 KiB
YAML
# T-BOX MIGRATION TO v2.0 — RENAME MAP AND STRUCTURAL OPERATIONS
|
|
# =============================================================================
|
|
# Data consumed by migrate_tbox_v2_0.py. Kept separate from the script so that
|
|
# the transformation is reviewable without reading code (EV-004).
|
|
#
|
|
# Not listed here and derived from other sources at run time:
|
|
# - isAbstract declarations -> rules.yaml, annex `abstractness`
|
|
# - shortLabel and acronym -> rules.yaml, annex `display`
|
|
# - deprecated terms to drop -> found in the graph by owl:deprecated true
|
|
# Deriving them keeps a single source of truth for each fact (EV-008).
|
|
# =============================================================================
|
|
|
|
meta:
|
|
from_version: "1.6"
|
|
to_version: "2.0"
|
|
namespace: "https://ontology.pernod-ricard.com/metamodel/"
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# RENAMES — 48. Applied everywhere the identifier appears: subject, predicate,
|
|
# object. Nothing cascades in RDF (EV-001).
|
|
#
|
|
# `order` is a migration constraint, not a preference:
|
|
# 1 ordinary terms
|
|
# 2 terms named in SHACL shapes or SPARQL constraints
|
|
# 3 the four attributes borne by MetaModelObject, therefore by every subject
|
|
# -----------------------------------------------------------------------------
|
|
|
|
renames:
|
|
|
|
# --- classes
|
|
- {from: SubDomain, to: DataSubDomain, kind: class, order: 1}
|
|
- {from: SubDomainOwner, to: DataSubDomainOwner, kind: class, order: 1}
|
|
- {from: KPI, to: KeyPerformanceIndicator, kind: class, order: 1}
|
|
- {from: BIWorkspace, to: BusinessIntelligenceWorkspace, kind: class, order: 1}
|
|
- {from: BIDataSource, to: BusinessIntelligenceDataSource, kind: class, order: 1}
|
|
- {from: BIField, to: BusinessIntelligenceField, kind: class, order: 1}
|
|
- {from: BIReport, to: BusinessIntelligenceReport, kind: class, order: 1}
|
|
|
|
# --- individual
|
|
- {from: BITool, to: BusinessIntelligenceTool, kind: individual, order: 1}
|
|
|
|
# --- relations
|
|
- {from: hasDGL, to: hasGovernanceLead, kind: relation, order: 1}
|
|
- {from: aboutConcept, to: isAbout, kind: relation, order: 1}
|
|
- {from: primaryLocation, to: primarilyStoredIn, kind: relation, order: 1}
|
|
- {from: inDatabase, to: isInDatabase, kind: relation, order: 1}
|
|
- {from: inSchema, to: isInSchema, kind: relation, order: 1}
|
|
- {from: inWorkspace, to: isInBIWorkspace, kind: relation, order: 1}
|
|
- {from: inBIDataSource, to: isInBIDataSource, kind: relation, order: 1}
|
|
- {from: hasBIField, to: containsBIField, kind: relation, order: 1}
|
|
- {from: hasBIOwner, to: hasPublisher, kind: relation, order: 1}
|
|
- {from: fromField, to: referencesSourceField, kind: relation, order: 1}
|
|
- {from: toField, to: referencesTargetField, kind: relation, order: 1}
|
|
- {from: biDerivedFrom, to: derivedFromSourceField, kind: relation, order: 1}
|
|
- {from: owningDomain, to: ownedByDomain, kind: relation, order: 2}
|
|
|
|
# --- attributes
|
|
- {from: hasBusinessDefinition, to: businessDefinition, kind: attribute, order: 1}
|
|
- {from: hasTechnicalDefinition, to: technicalDefinition, kind: attribute, order: 1}
|
|
- {from: hasSynonym, to: synonym, kind: attribute, order: 1}
|
|
- {from: hasFormula, to: formula, kind: attribute, order: 1}
|
|
- {from: hasUnit, to: unit, kind: attribute, order: 1}
|
|
- {from: hasTimeAggregation, to: timeAggregation, kind: attribute, order: 1}
|
|
- {from: hasFormat, to: logicalFormat, kind: attribute, order: 1}
|
|
- {from: hasPhysicalDataType, to: physicalDataType, kind: attribute, order: 1}
|
|
- {from: hasViewDefinition, to: viewDefinition, kind: attribute, order: 1}
|
|
- {from: hasExpression, to: expression, kind: attribute, order: 1}
|
|
- {from: hasBusinessRule, to: businessRule, kind: attribute, order: 1}
|
|
- {from: hasExampleValue, to: exampleValue, kind: attribute, order: 1}
|
|
- {from: createdOn, to: creationDate, kind: attribute, order: 1}
|
|
- {from: lastReviewedOn, to: lastReviewDate, kind: attribute, order: 1}
|
|
- {from: harvestedOn, to: harvestDate, kind: attribute, order: 1}
|
|
- {from: lastQueriedOn, to: lastQueryDate, kind: attribute, order: 1}
|
|
- {from: definedBy, to: definitionAddress, kind: attribute, order: 1}
|
|
- {from: queryCount30d, to: queryCount, kind: attribute, order: 1}
|
|
- {from: hasShortLabel, to: shortLabel, kind: annotation, order: 2}
|
|
- {from: hasAcronym, to: acronym, kind: annotation, order: 2}
|
|
- {from: hasIdentifier, to: identifier, kind: attribute, order: 3}
|
|
- {from: hasName, to: canonicalName, kind: attribute, order: 3}
|
|
- {from: hasStatus, to: status, kind: attribute, order: 3}
|
|
- {from: hasVersion, to: version, kind: attribute, order: 3}
|
|
|
|
# --- relations that change nature (TN-016): object property -> datatype property
|
|
- {from: hasActivationStatus, to: activationStatus, kind: relation_to_attribute, order: 1}
|
|
- {from: deployedIn, to: environment, kind: relation_to_attribute, order: 1}
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# MERGES — the source identifier disappears into an existing target.
|
|
# Unlike a rename, the target already exists and keeps its own declaration.
|
|
# -----------------------------------------------------------------------------
|
|
|
|
merges:
|
|
- from: biConsumes
|
|
into: consumes
|
|
widen_domain: true
|
|
reason: >
|
|
Same verb, same target, identical meaning. The domain widens and scope is
|
|
controlled per class by SHACL. Ranges are compatible, so no RDFS retyping
|
|
is introduced (TN-028).
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# A-BOX ALIGNMENT
|
|
# The instance graph was written against nominal forms that the vocabulary never
|
|
# declared: pr:identifier, pr:version, pr:status, pr:businessDefinition, pr:unit,
|
|
# pr:formula, pr:shortLabel, pr:physicalName. The TN-012 renames reconcile the
|
|
# two sides, since the vocabulary moves to the forms the instances already use.
|
|
# Two of them do not converge on their own and are renamed on the instance side.
|
|
# -----------------------------------------------------------------------------
|
|
|
|
abox_renames:
|
|
- {from: name, to: canonicalName, reason: "the vocabulary target is canonicalName; name alone is too generic to stand as an identity"}
|
|
- {from: format, to: logicalFormat, reason: "the vocabulary target is logicalFormat; format alone does not say which of the two"}
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# STRUCTURAL OPERATIONS
|
|
# -----------------------------------------------------------------------------
|
|
|
|
structural:
|
|
|
|
reclassify:
|
|
- {term: shortLabel, from: DatatypeProperty, to: AnnotationProperty, rule: TN-003}
|
|
- {term: acronym, from: DatatypeProperty, to: AnnotationProperty, rule: TN-003}
|
|
|
|
create_classes:
|
|
- term: GovernanceLayerObject
|
|
parent: MetaModelObject
|
|
is_abstract: true
|
|
label: Governance Layer Object
|
|
comment: >
|
|
Root of the governance layer. Holds the actors and governance objects that
|
|
are not data objects and therefore sit outside the data layers. Created by
|
|
insertion above Actor rather than by renaming it, so that every range
|
|
pointing at Actor keeps stating the nature of its target rather than its
|
|
position in the model.
|
|
rule: TN-027
|
|
|
|
reparent:
|
|
- {term: Actor, parent: GovernanceLayerObject, rule: TN-027}
|
|
- {term: PhysicalLayerObject, parent: MetaModelObject, rule: TN-027}
|
|
|
|
subproperties:
|
|
- {term: primarilyStoredIn, parent: storedIn, rule: TN-028}
|
|
|
|
# TN-016: closed governance states become literals. The classes and their
|
|
# individuals are withdrawn, and the properties become datatype properties.
|
|
to_literal:
|
|
- property: activationStatus
|
|
domain: DataDomain
|
|
drop_class: ActivationStatus
|
|
drop_individuals: [NotActivated, LightActivation, FullActivation]
|
|
value_map:
|
|
NotActivated: NOT_ACTIVATED
|
|
LightActivation: LIGHT_ACTIVATION
|
|
FullActivation: FULL_ACTIVATION
|
|
- property: environment
|
|
domain: CapturedObject
|
|
drop_class: Environment
|
|
drop_individuals: [Development, UserAcceptance, Production]
|
|
value_map:
|
|
Development: DEVELOPMENT
|
|
UserAcceptance: USER_ACCEPTANCE
|
|
Production: PRODUCTION
|
|
|
|
# Phase clause: before v2.0 is published the project is in design, so
|
|
# deprecated terms are removed outright rather than kept as stubs. EV-002
|
|
# still applies — the count must be zero.
|
|
drop_deprecated: true
|
|
|
|
# EV-010: the shapes graph carries no ontology node at all, so the declaration
|
|
# has to be created rather than aligned. Without it, an instance graph can be
|
|
# validated against shapes written for another version and the run reports
|
|
# violations that read exactly like a regression of the model.
|
|
shapes_ontology:
|
|
iri: "https://ontology.pernod-ricard.com/shapes"
|
|
label: PR Data MetaModel SHACL Shapes
|