The data model is defined and validated using a Schematron XSD shown below:
```mermaid
erDiagram
MODEL ||--o{ PARAMETER : has
MODEL ||--o{ BLOCK : has
MODEL ||--o{ HOOK : has
MODEL ||--o{ REVISION : has
BLOCK ||--o{ FIELD : has
BLOCK ||--o{ PENDING_CHANGE : has
BLOCK }o--o| BLOCK : anchored_to
FIELD ||--o{ CHANGED_FIELD : participates_in
PENDING_CHANGE ||--o{ CHANGED_FIELD : contains
MODEL {
long mdl_id PK
string mdl_code UK
string mdl_unique_identifier
string mdl_name
long mdl_repository_version
string mdl_version
boolean mdl_allow_changes_outside_blocks_flag
string mdl_revision_mode
}
PARAMETER {
long prr_id PK
long mdl_id FK
string prr_code UK
string prr_description
long prr_sorting_order UK
boolean prr_display_flag
boolean prr_mandatory_flag
}
BLOCK {
long blk_id PK
long mdl_id FK
string blk_code UK
string blk_label_singular
string blk_label_plural
string blk_sql_mode
string blk_repeat_columns_along
string blk_repeat_rows_along
boolean blk_fixed_position
boolean blk_active_flag
long blk_id_anchor_to FK
}
HOOK {
long hok_id PK
long mdl_id FK
string hok_code UK
long hok_load_order
boolean hok_active_flag
string hok_description
string hok_language
}
PENDING_CHANGE {
long pce_id PK
long pce_seq UK
long blk_id FK
string pce_pk_value
string pce_action
datetime pce_first_date_of_change
datetime pce_last_date_of_change
}
FIELD {
long fid_id PK
long blk_id FK
string fid_name UK
long fid_sorting_order UK
string fid_internal_datatype
string fid_dotnet_datatype
boolean fid_sync_back_flag
boolean fid_expression_flag
string fid_expression_sync_back_field
}
CHANGED_FIELD {
long cfd_id PK
long fid_id FK
long pce_id FK
any cfd_old_value
any cfd_new_value
}
REVISION {
long rvn_id PK
long mdl_id FK
string rvn_by
string rvn_on
datetime rvn_at
string rvn_description
}
```