This part of the MMEL specification defines the compliance and requirements modelling features of the Multi-Modal Modelling Language (MMEL). Compliance modelling is the core mechanism by which MMEL connects process behaviours to normative obligations, enabling standards developers and compliance engineers to trace every requirement from its source document through to implementation and verification.
MMEL implements a layered traceability chain that connects external normative documents to process-level compliance checks. Each link in this chain is explicitly modelled and machine-readable.
Normative Document (external)
|
+-- Clause content (.sdc file)
|
+-- reference { document, clause, title }
|
+-- provision { condition, modality, reference }
|
+-- process.validate_provision { ProvisionID }
|
+-- Evaluated during compliance checking
MMEL compliance modelling follows these fundamental principles:
This part builds on the core MMEL syntax defined in MN 113 and relates to other parts as follows:
Provisions are the central compliance construct in MMEL. A provision defines a
single compliance requirement expressed as a condition text, optionally
qualified by a modality keyword, bound to subjects, and linked to normative
references. Processes reference provisions via
validate_provision
to declare
which requirements they must satisfy.
provision <ProvisionID> {
condition "Requirement text"
modality SHALL | SHOULD | MAY | CAN | MUST
subject#1 <EntityID>
subject#2 <EntityID>
...
subject#N <EntityID>
reference {
<ReferenceID1>
<ReferenceID2>
}
}
| Field | Required | Description |
|---|---|---|
condition
|
yes | The requirement condition text describing the obligation or statement. May contain `{ subject#N }` placeholders for subject binding. |
modality
|
no | RFC 2119 modality keyword indicating the obligation level. When absent, the provision is classified as an informational Statement. |
subject#N
|
no | Numbered subject binding fields (N = 1, 2, 3, ...). Each binds an entity (role or data registry ID) to a numbered slot referenced in the condition text. |
reference
|
no | Normative references providing traceability to source document clauses. |
Provisions are classified into two broad categories based on their modality keyword:
Governing provisions impose obligations on the model. They carry a modality keyword and require compliance.
| Sub-type | Modality | Description |
|---|---|---|
| Requirement | SHALL
,
MUST
|
Mandatory obligation. Non-compliance means the model does not conform. |
| Instruction | SHOULD
|
Recommended action. Valid reasons may exist for not following it. |
Example of a governing provision (Requirement):
provision StandardMeetEnvironment {
subject#1 StandardRegistry
condition "{ Standards (Data) } selected meet environmental requirements"
modality SHALL
}
Example of a governing provision (Instruction):
provision ReviewPolicies {
condition "Review data protection policies periodically"
modality SHOULD
}
Assertional provisions describe capabilities, possibilities, or informational content rather than imposing obligations.
| Sub-type | Modality | Description |
|---|---|---|
| Capability | CAN
|
Statement of possibility or ability. Describes what the system is capable of. |
| Possibility | MAY
|
Truly optional action. The actor may choose to perform it. |
| Statement | (none) | Informational provision without a modality keyword. Not a compliance requirement. |
Example of a capability provision:
provision SMSEffectivePerformanceIndicator {
condition "Performance indicators can be evaluated to determine whether the SMS is effectively implemented and maintained"
modality CAN
}
Example of a possibility provision:
provision PreferenceOrderO {
subject#1 StandardDataRegistry
condition "Select company standards in cases where the requirements cannot be covered by the documents previously mentioned"
modality MAY
reference {
Ref43
}
}
Example of a Statement (informational provision without modality):
provision Provision1 {
condition "Crimson is Ribose's internal manual system, providing manual documents (e.g., policy and procedures) for staff"
}
A provision without a
modality
field is an informational statement. It
carries no compliance obligation and is used for documentation, evidence
reference, or descriptive context.
Provisions may bind entities to numbered subject slots using
subject#N
fields. The bound entity names are substituted into the condition text at
evaluation time. See
subject-binding
for full documentation of this
feature.
Provisions link to normative source clauses via the
reference { }
block.
Each reference ID corresponds to a
reference
declaration that provides the
document title, clause number, and clause title.
provision ChangeDrivenByMultilateral {
condition "The changes are driven by other orders of preference being defined in bilateral or multilateral projects"
modality SHALL
reference {
Ref44
}
}
Provisions are referenced by processes via the
validate_provision
property.
A process may reference one or more provisions, indicating that it must satisfy
all of them for compliance.
process UnderstandOrganizationContext {
name "Management of issues"
modality SHALL
reference_data_registry {
IssueRegistry
}
validate_provision {
UnderstandContext
}
output {
IssueRegistry
}
}
A process referencing multiple provisions:
process DetermineIssue {
name "Determine issues"
modality SHALL
validate_provision {
DetermineAllIssue
DetermineExternalIssue
DetermineInternalIssue
}
output {
IssueRegistry
}
}
The BS 202000 model contains over 200 provisions with extensive use of subject bindings. Typical patterns include:
A provision with a single subject:
provision SMObjectivesMonitor {
subject#1 SMObjectiveRegistry
condition "{ Objectives for the SMS (Data) } are monitored"
modality SHALL
}
A provision with multiple subjects:
provision AssignConform {
subject#2 VisionRegistry
subject#1 MissionRegistry
condition "Assign responsibility and authority for ensuring that the SMS conforms to the { Mission for the organization (Data) } and { Vision for the organization (Data) } of the organization"
modality SHALL
}
A provision with a role as subject:
provision CompetenceDocumentation {
subject#1 worker
condition "Retain appropriate documented information as evidence of competence of {Worker (ID: worker)}"
modality SHALL
}
A provision with three subjects:
provision TopManagementEstablish {
subject#3 DirectionRegistry
subject#2 VisionRegistry
subject#1 MissionRegistry
condition "Establishe { Mission for the organization (Data) }, { Vision for the organization (Data) }, { Direction for the organization (Data) } for the organization"
modality SHALL
}
The BS 16341 model contains provisions with subject bindings referencing standard data registries:
provision PreferenceOrderN {
subject#1 StandardDataRegistry
condition "Select Military standards of partner nations, such as MIL Standards (USA)"
modality SHALL
reference {
Ref43
}
}
provision PriorConsent {
subject#1 Purchaser
condition "Prior consent from { Purchaser (Role) } shall be obtained"
modality SHALL
reference {
Ref44
}
}
MMEL uses RFC 2119 modality keywords to indicate the obligation level of provisions and processes. These keywords are interpreted as described in RFC 2119 RFC2119 and RFC 8174 RFC8174 .
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174.
| Keyword | Bindingness | Meaning |
|---|---|---|
SHALL
|
Normative | This keyword indicates a mandatory requirement. Non-compliance means the model or implementation does not conform to the specification. There is no valid reason for not satisfying a SHALL requirement. |
MUST
|
Normative | This keyword is a synonym for `SHALL`. It indicates a mandatory requirement with identical bindingness. Both keywords are provided for compatibility with different standards-writing conventions. |
SHOULD
|
Normative | This keyword indicates a recommendation. The requirement should be satisfied, but there may exist valid reasons in particular circumstances to ignore it. The full implications of not following a SHOULD requirement must be carefully weighed. |
MAY
|
Normative | This keyword indicates a truly optional action. The actor may choose to perform the described action, but there is no obligation to do so. The absence of the action does not constitute non-compliance. |
CAN
|
Informative | This keyword indicates a statement of possibility or capability. It describes what the system or actor is able to do, rather than prescribing an obligation. CAN provisions are assertional rather than governing. |
Modality keywords are divided into two bindingness categories:
Modality keywords appear in the
modality
field of provisions:
provision StandardMeetContratual {
subject#1 StandardRegistry
condition "{ Standards (Data) } selected meet contractual requirements"
modality SHALL
}
provision ApplyUpdatedEdition {
condition "Apply the new edition"
modality MAY
reference {
Ref44
}
}
provision CustomerFeedback {
condition "Monitor customer perception using customer feedback on delivered products and services"
modality CAN
}
Processes may also carry a
modality
field that indicates the overall
obligation level of the process itself:
process UnderstandOrganizationContext {
name "Management of issues"
modality SHALL
validate_provision {
UnderstandContext
}
output {
IssueRegistry
}
}
When a process has both a
modality
and
validate_provision
, the process
modality provides the overall obligation level, while each provision carries
its own specific modality.
In the BS 202000 model (Standardization management system):
In the BS 16341 model (Selection of standards):
References define bibliographic links from model elements to external normative document clauses. They are the primary mechanism for traceability in MMEL, connecting provisions, data fields, approvals, and notes to their source standards.
reference <ReferenceID> {
document "Document title"
clause "Clause number"
title "Clause title"
}
| Field | Required | Description |
|---|---|---|
document
|
yes | The full title of the normative document being referenced. |
clause
|
yes | The clause number or section number within the document. |
title
|
yes | The title or heading of the referenced clause. May be empty. |
References may use the
Namespace#ElementID
notation to declare a reference
that originates from a different model. The namespace prefix (before
#
)
identifies the source model, and the element ID (after
#
) identifies the
specific reference within that model.
reference BS20400#Ref35 {
document "..."
clause "..."
title "..."
}
This notation enables cross-model traceability where a reference in one model points to a clause from a document associated with another model.
The BS 16341 model references four clauses from a single document:
reference Ref41 {
document "BS 16341:2012 Selection of standards"
clause "4.1"
title ""
}
reference Ref42 {
document "BS 16341:2012 Selection of standards"
clause "4.2"
title ""
}
reference Ref43 {
document "BS 16341:2012 Selection of standards"
clause "4.3"
title ""
}
reference Ref44 {
document "BS 16341:2012 Selection of standards"
clause "4.4"
title ""
}
The ISO 14971 model references multiple clauses with descriptive titles:
reference ISO14971-doc-ref3-1 {
document "Medical devices -- Application of risk management to medical devices"
clause "3.1"
title "Risk management process"
}
reference ISO14971-doc-ref3-2 {
document "Medical devices -- Application of risk management to medical devices"
clause "3.2"
title "Management responsibilities"
}
reference ISO14971-doc-ref3-4 {
document "Medical devices -- Application of risk management to medical devices"
clause "3.4"
title "Risk management plan"
}
reference ISO14971-doc-ref3-5 {
document "Medical devices -- Application of risk management to medical devices"
clause "3.5"
title "Risk management file"
}
References are used by the following MMEL constructs:
Example of a reference used by a provision:
provision ChangeDrivenByMultilateral {
condition "The changes are driven by other orders of preference being defined in bilateral or multilateral projects"
modality SHALL
reference {
Ref44
}
}
Example of a reference used by a note:
note Note1 {
type NOTE
message "A documented quality management system process can be used to deal with safety in a systematic manner"
reference {
ISO14971-doc-ref3-1
}
}
Example of a reference used by an approval:
approval Approval4 {
name "Non-application of a standard requires written approval"
actor Contractor
modality SHALL
approve_by Purchaser
approval_record {
StandardApprovalDataRegistry
}
reference {
Ref41
}
}
Notes provide structured annotations associated with processes and other model elements. They carry explanatory text, classify the annotation type, and optionally link to normative references for traceability.
note <NoteID> {
type NOTE | EXAMPLE | DEFINITION | TABLE_REFERENCE | TABLE_OPTIONS | FOOTNOTE
message "Note text"
reference {
<ReferenceID>
}
}
MMEL supports the following note types across its file formats:
| Type | File context | Description |
|---|---|---|
NOTE
|
.mmel
and
.sdc
|
The standard note type used in model files. Provides additional context, clarification, or guidance about a model element. This is the only note type that appears in `.mmel` files. |
EXAMPLE
|
.sdc
only |
An illustrative example extracted from the normative document. Appears in Supplementary Document Content files alongside clause text. |
DEFINITION
|
.sdc
only |
A formal definition extracted from the normative document. Appears in Supplementary Document Content files as part of the terms and definitions section. |
TABLE_REFERENCE
|
.sdc
and measurement context |
A note that references a table for data lookup. Used in the context of TABLE_REFERENCE measurement types where the note describes the lookup semantics. |
TABLE_OPTIONS
|
.sdc
and measurement context |
A note that describes selectable options from a table. Used in the context of TABLE_OPTIONS measurement types. |
FOOTNOTE
|
proposed | A footnote annotation. This type is proposed for future use and is not yet implemented in production models. |
In
.mmel
model files, notes use the
NOTE
type exclusively:
note Note1 {
type NOTE
message "A documented quality management system process can be used to deal with safety in a systematic manner, in particular to enable the early identification of hazards and hazardous situations in complex medical devices and systems"
reference {
ISO14971-doc-ref3-1
}
}
A note without a reference:
note Note6 {
type NOTE
message "Not all parts of the plan need to be created at the same time. The plan or parts of it can be developed over time"
reference {
ISO14971-doc-ref3-4
}
}
In Supplementary Document Content files, note types appear as line prefixes within clause content:
5.1.3#NOTE This is a note.
5.1.3#EXAMPLE This is an example.
5.1.3#DEFINITION This is a definition.
Each line uses the format
clause-number#TYPE content
, where the type prefix
classifies the annotation. The
NOTE
,
EXAMPLE
, and
DEFINITION
prefixes
correspond to the note types used in MMEL model elements.
Processes reference notes via the
note { }
property. A process may reference
multiple notes:
process IdentifyRiskControlMeasure {
name "Identify risk control measure"
actor Manufacturer
validate_provision {
Provision43
Provision44
}
note {
Note25
Note26
Note27
Note28
Note29
}
subprocess Page11
}
In measurement contexts, notes may carry
TABLE_REFERENCE
or
TABLE_OPTIONS
types to annotate table lookup semantics:
note NoteTableRef {
type TABLE_REFERENCE
message "Lookup value from table based on cable type and cross-sectional area"
}
These note types are used alongside TABLE REFERENCE and TABLE OPTIONS measurement types to document the lookup behaviour.
Subject binding is a MMEL feature that allows provisions to parameterize their condition text by binding named entities (roles or data registries) to numbered subject slots. This enables reuse and precise referencing of entities within compliance conditions.
The
subject#N
fields are declared within a provision definition:
provision <ProvisionID> {
subject#1 <EntityID>
subject#2 <EntityID>
...
subject#N <EntityID>
condition "{ placeholder text } that references { subject#N }"
modality SHALL | SHOULD | MAY | CAN | MUST
reference {
<ReferenceID>
}
}
The
{ subject#N }
placeholder notation in condition text works as follows:
The placeholder format in condition text varies across models:
The subject binding follows these rules:
A provision binding one data registry:
provision SMObjectivesUpdate {
subject#1 SMObjectiveRegistry
condition "{ Objectives for the SMS (Data) } are updated, as appropriate"
modality SHALL
}
A provision binding one role:
provision NonConformityDelegate {
subject#1 ExternalParty
condition "Delegate corrective action requriements to an {External parties (ID: ExternalParty)} provider"
modality SHALL
}
A provision binding two data registries:
provision AssignConform {
subject#2 VisionRegistry
subject#1 MissionRegistry
condition "Assign responsibility and authority for ensuring that the SMS conforms to the { Mission for the organization (Data) } and { Vision for the organization (Data) } of the organization"
modality SHALL
}
A provision binding two different entity types (role and data registry):
provision AgreeStandards {
subject#2 StandardRegistry
subject#1 Supplier
condition "The initial list of {Standards (Data)} is agreed between the purchaser and {Standards supplier (ID: Supplier)}"
modality SHALL
}
A provision binding three subjects:
provision TopManagementEstablish {
subject#3 DirectionRegistry
subject#2 VisionRegistry
subject#1 MissionRegistry
condition "Establishe { Mission for the organization (Data) }, { Vision for the organization (Data) }, { Direction for the organization (Data) } for the organization"
modality SHALL
}
Provisions may bind both roles and data registries as subjects:
provision LeadershipIdentifyRequirements {
subject#2 StatutoryRequirementRegistry
subject#1 CustomerRequirementRegistry
condition "Ientify {Customer requirements (Data)} and applicable { Statutory and regulatory requirements (Data) }"
modality SHALL
}
provision PriorConsent {
subject#1 Purchaser
condition "Prior consent from { Purchaser (Role) } shall be obtained"
modality SHALL
reference {
Ref44
}
}
Subject binding is heavily used in production MMEL models:
This feature is one of the most extensively used compliance constructs in MMEL.
The subject bindings and the condition text work together:
Conformance testing in MMEL is the process of evaluating whether a model or implementation satisfies the compliance obligations defined by its provisions and measurement validations. This clause describes the conformance assessment model, self-assessment checklists, progress tracking, and the overall compliance checking workflow.
The MMEL conformance assessment model defines three levels of conformance:
The compliance checking workflow follows a layered approach:
Reference Model (standard)
|
+-- Define provisions with modality
+-- Define data structures
+-- Define process flows
|
v
Implementation Model (organization)
|
+-- Map processes to reference model
+-- Bind provisions via validate_provision
+-- Define measurements via validate_measurement
|
v
Evidence Collection
|
+-- Populate data registers (.sws files)
+-- Record measurement values
+-- Link to supporting documents
|
v
Compliance Check
|
+-- Evaluate each validate_provision
+-- Evaluate each validate_measurement
+-- Generate compliance report
MMEL supports self-assessment through the provision binding mechanism. Each
process with a
validate_provision
declaration creates a checklist item that
must be verified.
The checklist is generated from:
For each checklist item, the assessor records:
Progress tracking monitors the overall conformance status of an implementation model across all its provisions and measurements.
Progress is tracked as:
Progress categories:
The overall compliance view provides a summary of conformance status:
+---------------------------------------+
| Overall Compliance View |
|---------------------------------------|
| Total provisions: N |
| Mandatory (SHALL): M |
| Recommended (SHOULD): R |
| Optional (MAY): O |
| Capability (CAN): C |
| |
| Passed: P |
| Failed: F |
| Pending: W |
| Not applicable: A |
| |
| Compliance rate: P/M * 100% |
+---------------------------------------+
The two mechanisms for conformance checking are:
A process declares which provisions it must satisfy:
process UnderstandOrganizationContext {
name "Management of issues"
modality SHALL
validate_provision {
UnderstandContext
}
output {
IssueRegistry
}
}
At compliance checking time, each provision in the
validate_provision
block
is evaluated against the process's implementation evidence.
A process declares which measurement conditions must be met:
process ApplyOverallCoverageRule {
name "Apply the overall coverage principle"
modality SHALL
validate_provision {
Provision47
}
validate_measurement {
"[Total_Included_Emissions_In_Percentage] >= 0.95"
}
}
At compliance checking time, the measurement expression is evaluated against the recorded measurement values. See MN 113-5 for full documentation of measurement expressions.
The assessment process follows these steps:
This clause provides the EBNF grammar for compliance-related constructs in MMEL. The grammar extends the base MMEL grammar defined in MN 113.
ProvisionDecl ::= 'provision' IDENTIFIER '{' ProvisionField* '}'
ProvisionField ::= 'condition' STRING
| 'modality' MODALITY
| SubjectBinding
| 'reference' '{' IDENTIFIER* '}'
SubjectBinding ::= 'subject#' INTEGER IDENTIFIER
The
SubjectBinding
production matches the
subject#N
fields where
N
is
a positive integer (1, 2, 3, ...) and the identifier is the entity being
bound (a role ID or data registry ID).
NoteDecl ::= 'note' IDENTIFIER '{' NoteField* '}'
NoteField ::= 'type' NOTE_TYPE
| 'message' STRING
| 'reference' '{' IDENTIFIER* '}'
NOTE_TYPE ::= 'NOTE'
| 'EXAMPLE'
| 'DEFINITION'
| 'TABLE_REFERENCE'
| 'TABLE_OPTIONS'
| 'FOOTNOTE'
In
.mmel
files, only the
NOTE
type is used. The other types appear in
.sdc
files or measurement contexts.
ReferenceDecl ::= 'reference' (NAMESPACE '#')? IDENTIFIER '{' RefField* '}'
RefField ::= 'document' STRING
| 'clause' STRING
| 'title' STRING
NAMESPACE ::= IDENTIFIER
The optional
NAMESPACE '#
prefix enables cross-model reference declarations.
MODALITY ::= 'SHALL'
| 'MUST'
| 'SHOULD'
| 'MAY'
| 'CAN'
ProcessComplianceField ::= 'validate_provision' '{' IDENTIFIER* '}'
| 'validate_measurement' '{' STRING '}'
| 'modality' MODALITY
ApprovalComplianceField ::= 'modality' MODALITY
| 'reference' '{' IDENTIFIER* '}'
| 'approval_record' '{' IDENTIFIER* '}'
(* Provision with single subject *)
provision StandardMeetEnvironment {
subject#1 StandardRegistry
condition "{ Standards (Data) } selected meet environmental requirements"
modality SHALL
}
(* Provision with multiple subjects *)
provision AssignConform {
subject#2 VisionRegistry
subject#1 MissionRegistry
condition "Assign responsibility... conforms to the { Mission } and { Vision }"
modality SHALL
}
(* Provision without modality (Statement) *)
provision Provision2 {
condition "URL: https://crimson.ribose.com"
}