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 } ```