MetaModelObjectShape
type: NodeShape
target class: MetaModelObject
property:
  path: hasIdentifier
  min count: 1
  max count: 1
  datatype: string
  severity: Violation
  message: DQ-001 (BLOCKING): exactly one hasIdentifier.
property:
  path: hasName
  min count: 1
  max count: 1
  datatype: string
  min length: 2
  severity: Violation
  message: DQ-002 (BLOCKING): exactly one non-empty hasName.
property:
  path: ownedBy
  min count: 1
  class: Actor
  severity: Violation
  message: OW-001 (BLOCKING): at least one owner (Actor).
property:
  path: owningDomain
  min count: 1
  max count: 1
  class: DataDomain
  severity: Violation
  message: OW-001 (BLOCKING): exactly one owning Data Domain.
property:
  path: hasStatus
  min count: 1
  in: DRAFT
  in: UNDER_REVIEW
  in: PUBLISHED
  in: DEPRECATED
  severity: Warning
  message: DQ-012 (MAJOR): hasStatus in controlled list.
property:
  path: hasVersion
  min count: 1
  severity: Warning
  message: DQ-012 (MAJOR): hasVersion required.

BackDocSourceShape
type: NodeShape
target class: MetaModelObject
sparql:
  severity: Violation
  message: DQ-006 (BLOCKING): a DRAFT back-doc object MUST carry hasSource.
  select: PREFIX pr: <https://ontology.pernod-ricard.com/metamodel/0.9/> SELECT $this WHERE { $this pr:hasStatus "DRAFT" . FILTER NOT EXISTS { $this pr:hasSource ?s } }

CanonicalNameShape
type: NodeShape
target class: MetaModelObject
property:
  path: hasName
  pattern: ^(?!GL_)(?!ID_).*(?<!_NM)(?<!_CD)(?<!_FLG)(?<!_NR)(?<!_DT)$
  flags: i
  severity: Warning
  message: NR-001 (MAJOR): canonical name free of physical prefixes/suffixes.

MetricShape
type: NodeShape
target class: Metric
property:
  path: hasFormula
  min count: 1
  datatype: string
  min length: 2
  severity: Violation
  message: BR-003 / DQ-004 (BLOCKING): a Metric MUST have a formula.
property:
  path: hasUnit
  min count: 1
  severity: Violation
  message: DQ-004 (BLOCKING): a Metric MUST have a hasUnit.
property:
  path: hasGranularity
  min count: 1
  severity: Violation
  message: DQ-004 (BLOCKING): a Metric MUST have a hasGranularity.

BusinessConceptShape
type: NodeShape
target class: BusinessConcept
property:
  path: hasFormula
  max count: 0
  severity: Violation
  message: BR-003 (BLOCKING): a Business Concept MUST NOT have a formula.

BusinessObjectShape
type: NodeShape
target class: BusinessObject
property:
  path: composedOf
  min count: 3
  max count: 10
  class: BusinessConcept
  severity: Warning
  message: BR-004 (MAJOR): a Business Object MUST group 3 to 10 Business Concepts.
property:
  path: belongsToSubDomain
  min count: 1
  max count: 1
  class: SubDomain
  severity: Warning
  message: NR-012/OW (MAJOR): a Business Object belongs to exactly one Sub-Domain.
property:
  path: hasSteward
  min count: 1
  class: DataSteward
  severity: Warning
  message: OW-005 (MAJOR): a Business Object MUST have a Data Steward.

DataObjectShape
type: NodeShape
target class: DataObject
property:
  path: implements
  min count: 1
  max count: 1
  class: BusinessObject
  severity: Violation
  message: BR-006 (BLOCKING): a Data Object MUST implement exactly one Business Object.
property:
  path: hasElement
  min count: 1
  class: DataElement
  severity: Violation
  message: BR-006 (BLOCKING): a Data Object MUST contain at least one Data Element.
property:
  path: hasSteward
  min count: 1
  class: DataSteward
  severity: Warning
  message: OW-005 (MAJOR): a Data Object MUST have a Data Steward.

DataElementShape
type: NodeShape
target class: DataElement
property:
  path: hasFormat
  min count: 1
  severity: Warning
  message: DQ-005 (MAJOR): a Data Element MUST have a hasFormat.
property:
  path: hasSourceSystem
  min count: 1
  severity: Warning
  message: DQ-005 (MAJOR): a Data Element MUST have a hasSourceSystem.
property:
  path: physicalName
  min count: 1
  max count: 1
  datatype: string
  severity: Violation
  message: DQ-010 (BLOCKING): a mapped Data Element MUST have a physical_name.

DataDomainShape
type: NodeShape
target class: DataDomain
property:
  path: hasDGL
  min count: 1
  max count: 1
  severity: Violation
  message: OW-004 (BLOCKING): a Data Domain MUST have exactly one DGL.
property:
  path: hasActivationStatus
  min count: 1
  max count: 1
  severity: Violation
  message: OW-004 (BLOCKING): a Data Domain MUST have exactly one Activation Status.

NameUniquenessShape
type: NodeShape
target class: MetaModelObject
sparql:
  severity: Violation
  message: NR-002 (BLOCKING): canonical name MUST be unique within its (leaf) class and owning Data Domain.
  select: PREFIX pr: <https://ontology.pernod-ricard.com/metamodel/0.9/> SELECT $this WHERE { $this a ?cls ; pr:hasName ?n ; pr:owningDomain ?d . ?other a ?cls ; pr:hasName ?n ; pr:owningDomain ?d . FILTER ( $this != ?other ) FILTER ( ?cls IN ( pr:DataDomain, pr:SubDomain, pr:BusinessObject, pr:BusinessConcept, pr:Metric, pr:KPI, pr:DataAsset, pr:DataObject, pr:DataElement, pr:DataContract, pr:DataProduct, pr:Table, pr:Field ) ) }

ArbitrationGateShape
type: NodeShape
target class: MetaModelObject
sparql:
  severity: Violation
  message: OW-007 (BLOCKING): a TO_ARBITRATE object MUST NOT be PUBLISHED.
  select: PREFIX pr: <https://ontology.pernod-ricard.com/metamodel/0.9/> SELECT $this WHERE { $this pr:hasStatus "PUBLISHED" . $this pr:arbitrationStatus "TO_ARBITRATE" . }