# Data Model

The following data model stores the relevant information that can be in an IMS-LD file. The tables are the ones needed to store the interesting part of the information from IMS-LD specification that we consider is necessary in order to play the unit of learning correctly.

At present, the data model does not have into account the interaction with the rest of the .LRN packages, because the tables needed for that interaction will be defined in the development phase. Also, the tables might change during the development phase, because we can find better ways to structure the information, but the final data model, in our opinion, will not be too different from the one presented here.

The complete data model is presented in an Entity-Relationship (ER) diagram that is divided in three blocks, each one related to a level of the IMS-LD specification. The tables of the .LRN model for supporting IMS-LD of a level are not independent from the other levels, and the relationships of the three diagrams have been represented. In the tables of the E-R diagrams are presented only the primary keys and foreign keys. This is in order to achieve clarity and simplicity because the diagram is too big. Nevertheless, all the fields of the proposed diagram are presented and explained next, divided by the three levels of IMS-LD.

Next, each table of the data model is described divided in the three levels of the IMS-LD specification

IMPORTANT NOTE: The present Data Model will be normalize in the near time in order to improve its understanding.

## Level A

Next, the tables necessary for Level A are draw in the form of an E-R diagram

- imsld_imslds: This table is used to store all the units of learning. This is the high level in the hierarchy. Each IMS-LD file loaded in .LRN will generate a row in this table. This table contains all the different units of learning. Each unit of learning will contain global information and also references to other tables, in order to represent completely the information represented by the unit of learning.

  - imsld_id - identifier

  - version - version number

  - level - A, B or C. It is the level of the IMS-LD file that arrive

  - sequence_used_p - sequence used, true or false. True means simple sequencing is being used. Defaults to false

  - learning_objective_itemmodel_id - references imsld_itemmodels and contains the objectives of the unit of learning

  - title

  - method_id - references imsld_methods

  - prerequisite_itemmodel_id - references imsld_itemmodels and contains the prerequisites for the unit of learning

  - component_id - references imsld_components

  - when_property_value_is_set** - references imsld_when_property_value_is_set. Treated with more detail in level B

- imsld_components: Used to store all the components of the IMS-LD (which are: roles, acitivities and environments. The activities references this table)

  - component_id

  - role_id - references imsld_roles

  - environment_id - references imsld_environments

  - property_id ** - references imsld_properties

- imsld_roles. This table contains all the defined roles

  - role_id - references imsld_roles

  - role_type

  - create_new_p - multopleoccurrences of this role may be created during runtime?

  - match_persons - exclusively-in-roles, not-exclusively

  - max_persons. Maximum number of persons for this role

  - min_persons. Minimum number of persons for this role

  - role_name. The name of the role

  - information_itemmodel_id - references imsld_items

  - parent_role_id. The parent role. This allows a hierarchy of roles. The root of the hierarchy are learner and stuff, which has not a parent role

- imsld_learning_activities. This table stores all the learning activities of IMS-LD

  - learning_activity_id - references imsld_activities

  - title

  - component_id - references imsld_components

  - isvisible_p - initial visibility attribute. Initial value: true

  - learning_objective_itemmodel_id - references imsld_itemmodels

  - time_limit_id - references imsld_time_limits

  - prerequisite_itemmodel_id - references imsld_itemmodels

  - parameter_value

  - activity_description_itemmodel_id - references imsld_itemmodels

  - on_completion_id - references imsld_on_completions

  - identifier - unique identifier of the activity

- imsld_support_activities. This table stores all the support activities of IMS-LD

  - support_activity_id - references imsld_activities

  - component_id - references imsld_components

  - isvisible_p - initial visibility attribute. Initial value: true

  - title. The name of the support activity

  - parameter_value

  - activity_description_itemmodel_id - references imsld_itemmodels

  - user_choice - The user decides when the activity is completed

  - time_limit_id - If user_choice is null, the activity will be completed until the time referenced by this id has been expired.

  - on_completion_id - references imsld_on_completions

  - identifier - unique identifier of the acrivity

- imsld_activity_structures. This table contains all the activity structures of IMS-LD. Each entry is one activity structure.

  - activity_structure_id - references imsld_activities

  - component_id - references imsld_components

  - number_to_select - if not null, the activity structure is completed when the number of activities completed equals the number set

  - sort - possible values: as-is, visibility-order

  - structure_type - sequence or selection

  - title. The name of the activity structure

  - information_itemmodel_id - references imsld_itemmodels

  - identifier

- imsld_environments. This table contains the environments of the unit of learning. An environment consists of learning objects, services and other environments, and it can be referentiated by some other tables too.

  - environment_id

  - parent_environment_id

  - title

- imsld_learning_objects

  - learning_object_id

  - class

  - isvisible_p - the user decides when the activity is completed?

  - parameter_value

  - type - knowledge-object, tool-object, test-object, etc. (learning resource type from the IEEE LTSC LOM)

  - environment_id - references imsld_environments

  - schema_version

- imsld_email_services. It describes all the email services

  - email_service_id

  - select - all-persons-in-role, persons-in-role

  - title

  - is_visible_p

- imsld_email_data

  - sendmail_service_id - references imsld_email_services

  - role_id - references imsld_roles

  - email_data

  - email_property_id - references imsld_properties **

  - username_property_id - references imsld_properties **

- imsld_conference_services

  - conference_id

  - conference_type - synchronous, asynchronous or announcement

  - title

  - item_id - references imsld_items

  - is_visible_p

- imsld_index_search_services

  - search_service_id

  - title

  - index_class - this element selects the calss to make the index on

  - index_element - this element selects the element to make the index on

  - index_type_of_element - type of element to index on

  - search_type - type of search facility that is expected at runtime: free-text-search, index-with-reference, index-without-reference

  - is_visible_p

- imsld_methods

  - method_id

  - time_limit_id - references imsld_time_limits. If not null, the method is completed when this time has been completed, otherwise, the method is completed when all the plays mapped to this method through the imsld_plays_to_complete_method are completed

  - on_completion_id - references imsld_on_completions

  - condition_id ** - references imsld_conditions

- imsld_plays

  - play_id

  - method_id - references imsld_methods

  - is_visible_p - the user decides when the activity is completed?

  - title

  - when_last_act_completed the play is completed until the act referenced by this field is completed

  - time_limit_id - references time_limits. If when_last_act_completed is null, the play is completed when the time indicated here has been completed

  - on_completion_id - references imsld_on_completions

- imsld_acts

  - act_id

  - play_id - references imsld_plays

  - title

  - time_limit_id - if there are no role_parts mapped to this act throug the mapping table (explained later), the act is completed until the the time indicated here has been completed

  - on_completion_id - references on_completion

  - when_property_value_is_set ** - references imsld_when_property_value_is_set

- imsld_role_parts

  - role_part_id - references imsld_part_id

  - act_id - references imsld_acts

  - role_id

  - unit_of_learning_id - references imsld_imslds

  - environment_id - references imsld_environments

- imsld_on_completion

  - on_completion_id

  - feedback_description_id - references imsld_itemmodels

  - change_property_value_id ** - references imsld_change_property_value

  - notification_id - references imsld_notifications ***

- imsld_itemmodels. This is a table that contains a text and an id. In conjunction with the tables imsld_itemmodel and imsld_itemmodel_items_map allow to associate several items to the same itemmodel.

  - title

  - itemmodel_id

- imsld_items. Items are used for multiple purposes in other tables. For example it can describe objectives, prerequisites, references to files, etc.

  - item_id

  - identifier. Unique identifier for the IMS-LD

  - is_visible_p

  - title: A text that can represent a prerequisite, an objective, the name of a file, etc.

- imsld_time_limits

  - time_limit_id

  - time_limit - amount of time in a specific format

  - property_id ** - references imsld_properties

- imsld_parameters

  - parameter_id

  - parameter_value

- imsld_imsld_objects_map. This is a very importan table in this data model, because it is used to map almost every imsld_* to every imsld_*. For instance, the activities that are part of a component are mapped by this table, and the acts to complete play are also mapped using this table. This is just a representation of the acs_rels table, because at the implementation phase, acs_rels will be used with different rel_types

  - imsld_object_one_id - references imsld_* (acs_objects)

  - imsld_object_one_type - wich can be: learning_object, imsld_item, imsld_role, support_activity, etc

  - imsld_object_two_id - references imsld_* (acs_objects)

  - imsld_object_two_type - same as imsld_object_one_type

IMPORTANT NOTES:

1. The last table will use acs_rels. The rel_types will be completely defined in the implementation phase. By now we can think of: parent_item_rel, role_parts_activites_rel, component_service_rels, service_roles_rel, learning_object_item_rel, plays_to_complete_method_rel and role_parts_to_complete_act.

2. There are some important IMS-LD tags (learning objectives, for instance) that does not have a table for themselves, but this is because such tags consist only of a reference to a itemmodel or another table, so there is no need to create a table just for that.

3. This data model can (and it is 99% sure) change in the implementation phase, but we will base the development on this data model.

4. There are some tables in this data model that will be related to some others of other .LRN packages. For instance, the table imsld_conferences will be used to store the synchronous type (forums) and asynchronous type (chats) of conferences. Also, we will use acs_objects for the imslds, activities, services, learning_objects, components, and for every case we find it useful. We can make use of the cr_items too. But that is something that we will know better in the implementation phase.

## Level B

Level B extends the table email_data and add: username_property_id and email_property_id (**) Next is shown the E-R diagram for these tables

- imsld_properties (add a reference to properties from imsld_components and time_limits **)

  - property_id

- imsld_loc_locpers_locrole_properties: Combined table for the loc, locpers and locrole properties

  - property_id - references imsld_properties

  - title. The name of the property

  - datatype - references imsld_datatypes

  - initial_value

- imsld_globpers_glob_property: Combined table for the glob and globpers properties

  - property_id - references imsld_properties

  - global_definition_id - references imsld_global_definitions

  - existing

- imsld_global_definitions

  - property_id - references imsld_properties

  - uri

  - title

  - global_definition

  - datatype_id

  - initial_value

- imsld_property_groups

  - property_group_id

  - property_id - references imsld_properties

  - title

- imsld_group_property_choices

  - choice_id

  - property_id - references imsld_properties

  - proerty_group_id - references imsld_property_groups

- imsld_restrictions

  - restriction_id

  - restriction_type - minExclusive, minInclusive, maxExclusive, maxInclusive, totalDigits, fractionDigits, length, minLength, maxLength, enumeration, whiteSpace, pattern

  - restriction

- imsld_property_restrictions_map

  - restriction_id - references imsld_restrictions

  - property_id - references imsld_properties

- imsld_datatypes

  - datatype_id

  - datatype - string, boolean, integer, uri, datetime, file, real, tet, duration, other

- imsld_when_property_value_is_set (add a reference to this table from the tables: complete_activities, complete_act, complete_play and complete_unit_of_learning **)

  - when_property_value_is_set_id

  - property_id - references imsld_properties

  - property_value_id - references property_values

- imsld_property_values

  - property_value_id

  - langstring

  - calculate_id - references imsld_calculates

  - property_id - references imsld_properties

- imsld_change_property_values: A reference to this table must be added from the imsld_on_completion table in level A

  - change_property_value_id

  - property_id - references imsld_properties

  - property_value_id - references property_values

- imsld_monitors

  - monitor_id

  - service_id - references imsld_services

  - monitor_choice_id - references imsld_monitor_choices

- imsld_monitor_choices

  - choice_id

  - role_id - references imsld_roles

  - self - references imsld_roles

- imsld_conditions: A reference to this table must be added from the table imsld_methods in level A

  - condition_id

  - title

- imsld_sequences

  - sequence_id

  - condition_id - references imsld_conditions

  - sequence_sort - to know how to evaluate the condition

  - if_id - references imsld_ifs

- imsld_then_model

  - then_model_id

  - show_id - references imsld_show_hide

  - hide_id - references imsld_show_hide

  - change_property_value

- imsld_ifs

  - if_id

  - expression_id - references imsld_expressions

  - true_thenmodel_id - 'then', evaluated if the expression is true. References imsld_then_model

  - false_thenmodel_id - 'else', evaluated if the expression is false. References imsld_then_model

- imsld_expressions - table holding the expressions. Instead of making a table for each type of expression, we store the expression_type and according to that value we know what other attributes in the table have to be stored in order to use them

  - expression_id

  - expression_type - is-member-of-role, is, is-not, and, or, sum, subtract, multiply, divide, greater-than, less-than, users-in-role, no-value, time-unit-of-learning-started, datetime-activity-started, current-datetime, complete, not

  - expression_id - references imsld_expressions

  - calculate_id - references imsld_calculates

  - expression_one_id - references imsld_expressions

  - expression_two_id - references imsld_expressions

  - role_id - references imsld_roles

  - property_id - references imsld_properties

  - time_unit_of_learning_started

  - datetime_activity_started

  - current_datetime

- imsld_calculates

  - calculate_id

  - right_operand - references imsld_operands

  - left_operand - references imsld_operands

- imsld_operands

  - operand_id

  - property_id - references imsld_properties

  - property_value - references imsld_property_values

  - expression_id - references imsld_expressions

- imsld_when_condition_true (add a reference from the imsld_complete_acts table **)

  - when_condition_true_id

  - role_id - references imsld_roles

  - expression_id - references imsld_expressions

- imsld_show_hide

  - show_hide_id

  - class

  - item_id - references imsld_items

  - environment_id - references imsld_environments

  - learning_activity_id - references imsld_learning_activities

  - support_activity_id - references imsld_support_activities

  - activity_structure_id - references imsld_activity_structures

  - play_id - references imsld_plays

  - unit_of_learning_id - references imsld_imslds

- imsld_global_elements

  - global_element_id

  - view_set_property_id - references view_set_properties

- imsld_view_set_properties

  - view_set_property_id

  - type - view-property, view-property-group, set-property, set-property-group

  - href

  - property_of - self or supporter-person

  - ref

  - view - value or title-value

  - max_transactions

  - transaction_type

  - notification_id - references imsld_notifications ***

## Level C

Modify the imsld_email_data (***), add a reference to imsld_notifications table from imsld_on_completion, imsld_thens and imsld_view_set_properties table (***). Next is shown the E-R diagram that adds Level C

- imsld_notifications

  - notification_id

  - choice_id - references imsld_notifications_choice

  - subject

- imsld_notification_emails_data_map

  - notification_id - references imsld_notifications

  - email_data_id - references imsld_email_data

- imsld_notifications_choice

  - choice_id

  - learning_activity_id - references imsld_learning_activities

  - support_activity_id - references imsld_support_activities

## Run Tables

The previous tables are referred to the IMS-LD specifications level A, B and C. They have all the information necessary to map an XML compliant IMS-LD document to the tables in the .LRN platform. But also, for the ims-ld package to interact with real users, we need additional tables. These new tables are necessary for the execution of the player where the information is sequenced to the student. These tables are described in this Section. Next is shown the E-R diagram for these tables

- imsld_party_roles_map. This table maps parties of a .LRN course to the roles defined in the IMS-LD document. A party can be either a user or a group. One party can belong to several roles.

  - party_id references parties

  - role_id references imsld_roles

- imsld_parties_property_values_map. This table maps parties of a .LRN course to the properties defined in the IMS-LD document. One party can have several property values to establish. The properties can be local or global.

  - party_id references parties

  - property_id references imsld_properties

  - property_value. This is the value of the property for the party in a current moment. The value can change during the delivering of the unit of learning

- imsld_roles_property_values_map. This table maps roles of the IMS-LD document to the properties of the IMS-LD document. One role can have several property values to establish. The properties can only be local.

  - roles_id references imsld_roles

  - property_id references imsld_properties

  - property_value. This is the value of the property for the role in a current moment. The value can change during the delivering of the unit of learning

- imsld_property_values. This table stores the values of the properties that are common for all the users of the the IMS-LD document. There can be several property values to establish. The properties can be local or global.

  - property_id references imsld_properties

  - property_value. This is the value of the property for the role in a current moment. The value can change during the delivering of the unit of learning

- imsld_parties_activities_audit. This table stores all the .LRN parties information about the IMS-LD delivering that is of interest. related to activities At present we have defined only a little information, but in the future this information may be expanded. Each entry of the table has an activity that has been realized by a party.

  - party_id references parties

  - activity_id references imsld_activity

  - delivering_order. It represents the order of visualization of the activity in the sequence of activities

  - selected_p. It is true if the party select by himself the activity. It is false if the activity was sequenced to the party

  - start_time. The start time of the activity

  - end_time. The end time of the activity

  - done_p. It is true if the activity is complete

  - act_id references ismld_parties_acts_audit

- imsld_parties_acts_audit. This table stores all the .LRN parties information about the IMS-LD delivering that is of interest related to acts. At present we have defined only a little information, but in the future this information may be expanded. Each entry of the table has an act that has been realized by a party.

  - party_id references parties

  - act_id references imsld_acts

  - start_time. The start time of the act

  - end_time. The end time of the activity

  - done_p. It is true if the act is complete

- imsld_parties_plays_audit. This table stores all the .LRN parties information about the IMS-LD delivering that is of interest related to plays. At present we have defined only a little information, but in the future this information may be expanded. Each entry of the table has an act that has been realized by a party.

  - party_id references parties

  - play_id references imsld_plays

  - start_time.The start time of the act

  - end_time. The end time of the activity

  - done_p. It is true if the act is complete