<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mrohatg2</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mrohatg2"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Mrohatg2"/>
	<updated>2026-06-07T17:29:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=100618</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=100618"/>
		<updated>2015-12-18T20:12:50Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
=== PRML ===&lt;br /&gt;
Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;br /&gt;
&lt;br /&gt;
== Scope of the Project  ==&lt;br /&gt;
The scope of this project is to export the data from the Expertiza database to PRML format.&lt;br /&gt;
&lt;br /&gt;
== Expertiza Design Document ==&lt;br /&gt;
[[File:Pg_development.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza Database Diagram ==&lt;br /&gt;
[[File:PRML.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza database schema to PRML database schema map ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Courses&lt;br /&gt;
! Course&lt;br /&gt;
|-&lt;br /&gt;
!Attributes&lt;br /&gt;
| id&lt;br /&gt;
| CourseId&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null&lt;br /&gt;
|CourseCIPCode&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|name	&lt;br /&gt;
|CourseTitle&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|info	&lt;br /&gt;
|CourseDescription&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseLevelID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|created_at	&lt;br /&gt;
|CourseCreated&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseStarted&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseEnded&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Assignments&lt;br /&gt;
! Assignment&lt;br /&gt;
|-&lt;br /&gt;
!Attributes&lt;br /&gt;
| id&lt;br /&gt;
| AssignmentId&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null&lt;br /&gt;
|AssignmentCIPCode&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|name	&lt;br /&gt;
|AssignmentTitle&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|spec_location	&lt;br /&gt;
|AssignmentDescription&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|course_id	&lt;br /&gt;
|CourseID&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!due_dates, deadline_types	&lt;br /&gt;
!Task&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|due_dates.id	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.deadline_type_id	&lt;br /&gt;
|TaskTypeID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|deadline_types.name	&lt;br /&gt;
|TaskTitle&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.description_url	&lt;br /&gt;
|TaskDescription&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|TaskOpen&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.due_at	&lt;br /&gt;
|TaskDue&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!questions, questionnaires	&lt;br /&gt;
!criterion&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|questions.id&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questions.txt	&lt;br /&gt;
|CriterionTitle&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|CriterionDescription&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questions.type	&lt;br /&gt;
|Type&lt;br /&gt;
|-	&lt;br /&gt;
|&lt;br /&gt;
|questionnaires.max_question_score	&lt;br /&gt;
|MaxLabel&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questionnaires.min_question_score	&lt;br /&gt;
|MinLabel&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!question_advices	&lt;br /&gt;
!Level&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|id	&lt;br /&gt;
|LevelID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|score	&lt;br /&gt;
|LevelLabel&lt;br /&gt;
|-	&lt;br /&gt;
|&lt;br /&gt;
|advice	&lt;br /&gt;
|LevelDescription&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!questions	&lt;br /&gt;
!Rubric&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|questions.id&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!teams	&lt;br /&gt;
!Actor&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|id	&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|type&lt;br /&gt;
|&lt;br /&gt;
|- 	&lt;br /&gt;
|&lt;br /&gt;
|parent_id&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
!participants&lt;br /&gt;
!Actor&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|id	&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|type 	&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|parent_id&lt;br /&gt;
|-	&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!ActorTask&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|		&lt;br /&gt;
!teams_users	&lt;br /&gt;
!Participant&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|user_id	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|team_id&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|AppID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!participants	&lt;br /&gt;
!Participant&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|user_id	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|id	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|AppID&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!ActorParticipant&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|RoleID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Enrollment&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AppID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CourseID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!Teams	&lt;br /&gt;
!Artifact&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|name	&lt;br /&gt;
|ArtifactContent&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactCharLength&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactOpen&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactEnd&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Item&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ItemContent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ArtifactId&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Review&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|AssessorActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AssessedArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CritiqueArtifactID&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!ReviewCriterionLevel&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|AssessorActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AssessedArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CritiqueArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|EvalMode&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|EvalLevelID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ValueOrdinal&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|ValueCardinal&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|Comment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
We have used an Extract, Transform and Load [https://en.wikipedia.org/wiki/Extract,_transform,_load ETL] tool, [http://community.pentaho.com/projects/data-integration/ Pentaho Kettle] to perform the data migration  from Expertiza to PRML database.&lt;br /&gt;
&lt;br /&gt;
[[File:diagram.png]]&lt;br /&gt;
&lt;br /&gt;
The Pentaho Kettle tool extracts data from the expertise schema, performs transformation on it and load the data in the PRML format.&lt;br /&gt;
The tables are mapped as shown in the schema map above. &lt;br /&gt;
The operations performed by the ETL tool:&lt;br /&gt;
&lt;br /&gt;
'''Extraction'''&lt;br /&gt;
The data is extracted from the expertise database and brought into the staging area by this operation of the ETL tool. It is the staging area in which all the transformation are done.&lt;br /&gt;
&lt;br /&gt;
'''Transformation'''&lt;br /&gt;
Many operations are performed on the data in the staging area so that the expertise schema can be converted to the PRML schema. This is called transformation of the data. An example of transformation is while mapping of participants table in the expertiza database to actors table in the PRML database. Each value of the id field is incremented by 1000 while inserting in the participants table.  &lt;br /&gt;
&lt;br /&gt;
'''Loading:'''&lt;br /&gt;
The transformed data when moved from the staging area to the PRML database is called as loading. There are three types of loading implemented on the tables depending on the size of the table – initial load,partial loading and full loading.&lt;br /&gt;
Partial Loading: Only the new or updated entries in the expertiza table are transformed and loaded in the corresponding PRML table. This is generally done for table with very large number of entries. Eg: Reviews&lt;br /&gt;
&lt;br /&gt;
Partial loading is implemented with the help of timestamps and checksums.&lt;br /&gt;
&lt;br /&gt;
Timestamp: One way to perform partial loading is to have a 'modified' time stamp in the source table. The destination table should mirror this 'modified' time stamp. Then while loading the destination table we extract only those records from the source table which has a 'modified' time stamp value greater than the latest 'modified' time stamp value in the destination table. The advantage is that we need not fetch all records from the source table. Only those records which needs to be updated in the destination table will be retrieved. (refer load_prml_ModifiedTimeStampTable transformation)&lt;br /&gt;
&lt;br /&gt;
Checksum: Another way to perform partial loading is using checksum. A checksum is computed for each record, on selected field values, of the source table and added to the destination table while initial loading. Loading which follow would again compute the checksum for source table records and if there is no matching checksum in the destination table an update or an insert would be performed. (refer load_prml_checksumtable transformation)&lt;br /&gt;
&lt;br /&gt;
Full Loading: All the entries from the expertiza table are transformed and loaded in the corresponding PRML table. This is generally done for tables with less number of entries.&lt;br /&gt;
Eg: Courses&lt;br /&gt;
&lt;br /&gt;
'''Expertiza tables which have been implemented'''&lt;br /&gt;
&lt;br /&gt;
Assignments Table - Full Load&lt;br /&gt;
&lt;br /&gt;
Course Table - Full Load&lt;br /&gt;
&lt;br /&gt;
ModifiedTimeStamp Table - Partial Load&lt;br /&gt;
&lt;br /&gt;
Task Table&lt;br /&gt;
&lt;br /&gt;
Criteria Table&lt;br /&gt;
&lt;br /&gt;
Due_Dates Table&lt;br /&gt;
&lt;br /&gt;
Questionnaire Table&lt;br /&gt;
&lt;br /&gt;
Teams Table &lt;br /&gt;
&lt;br /&gt;
Jobs are being performed in a sequential order in the current project. If the tables do not depend on one another they can be performed in a parallel way to reduce time.&lt;br /&gt;
Initially the entries in the table are buffered so that only around 8000 rows are processed at a time.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
We have tested our conversion by using a set of sample expertiza data. We run the extract, transform and load methodology on it. Queries are run on the PRML database to check if it gives the same results as the expertiza database. &lt;br /&gt;
Though the testing is not through, this is the only way the project can be tested.&lt;br /&gt;
&lt;br /&gt;
==Running the Project==&lt;br /&gt;
'''Required Software:'''&lt;br /&gt;
*Pentaho’s Data Integration (Kettle).&lt;br /&gt;
*MySQL&lt;br /&gt;
*JAVA&lt;br /&gt;
&lt;br /&gt;
'''Setup:'''&lt;br /&gt;
*Download and Install MySQL and JAVA&lt;br /&gt;
*Import to MySQL expertiza database dump file.&lt;br /&gt;
*Import to MySQL PRML database dump file.&lt;br /&gt;
*Download Pentaho's Data Integration(Kettle) Community Edition (its a copy deployment hence no installation is required).&lt;br /&gt;
*Download MySql Connector jar file and copy to &amp;lt;pentaho_root_directory\data-integration\lib&amp;gt;&lt;br /&gt;
*Start Spoon.bat if you are using a windows machine or Spoon.sh if you using Linux (pentaho_root_directory\data-integration)&lt;br /&gt;
*Download the transformations and jobs attached&lt;br /&gt;
*You can open a kettle transformation (.ktr file) using Spoon and run it (Make sure proper MySql DB connections are configured)&lt;br /&gt;
*You may also open the kettle job (.kjb file) using spoon and run it (Make sure the path for transformations in the job are correct)&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=100617</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=100617"/>
		<updated>2015-12-18T20:11:15Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
=== PRML ===&lt;br /&gt;
Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;br /&gt;
&lt;br /&gt;
== Scope of the Project  ==&lt;br /&gt;
The scope of this project is to export the data from the Expertiza database to PRML format.&lt;br /&gt;
&lt;br /&gt;
== Expertiza Design Document ==&lt;br /&gt;
[[File:Pg_development.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza Database Diagram ==&lt;br /&gt;
[[File:PRML.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza database schema to PRML database schema map ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Courses&lt;br /&gt;
! Course&lt;br /&gt;
|-&lt;br /&gt;
!Attributes&lt;br /&gt;
| id&lt;br /&gt;
| CourseId&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null&lt;br /&gt;
|CourseCIPCode&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|name	&lt;br /&gt;
|CourseTitle&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|info	&lt;br /&gt;
|CourseDescription&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseLevelID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|created_at	&lt;br /&gt;
|CourseCreated&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseStarted&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseEnded&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Assignments&lt;br /&gt;
! Assignment&lt;br /&gt;
|-&lt;br /&gt;
!Attributes&lt;br /&gt;
| id&lt;br /&gt;
| AssignmentId&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null&lt;br /&gt;
|AssignmentCIPCode&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|name	&lt;br /&gt;
|AssignmentTitle&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|spec_location	&lt;br /&gt;
|AssignmentDescription&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|course_id	&lt;br /&gt;
|CourseID&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!due_dates, deadline_types	&lt;br /&gt;
!Task&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|due_dates.id	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.deadline_type_id	&lt;br /&gt;
|TaskTypeID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|deadline_types.name	&lt;br /&gt;
|TaskTitle&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.description_url	&lt;br /&gt;
|TaskDescription&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|TaskOpen&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.due_at	&lt;br /&gt;
|TaskDue&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!questions, questionnaires	&lt;br /&gt;
!criterion&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|questions.id&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questions.txt	&lt;br /&gt;
|CriterionTitle&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|CriterionDescription&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questions.type	&lt;br /&gt;
|Type&lt;br /&gt;
|-	&lt;br /&gt;
|&lt;br /&gt;
|questionnaires.max_question_score	&lt;br /&gt;
|MaxLabel&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questionnaires.min_question_score	&lt;br /&gt;
|MinLabel&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!question_advices	&lt;br /&gt;
!Level&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|id	&lt;br /&gt;
|LevelID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|score	&lt;br /&gt;
|LevelLabel&lt;br /&gt;
|-	&lt;br /&gt;
|&lt;br /&gt;
|advice	&lt;br /&gt;
|LevelDescription&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!questions	&lt;br /&gt;
!Rubric&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|questions.id&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!teams	&lt;br /&gt;
!Actor&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|id	&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|type&lt;br /&gt;
|&lt;br /&gt;
|- 	&lt;br /&gt;
|&lt;br /&gt;
|parent_id&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
!participants&lt;br /&gt;
!Actor&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|id	&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|type 	&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|parent_id&lt;br /&gt;
|-	&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!ActorTask&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|		&lt;br /&gt;
!teams_users	&lt;br /&gt;
!Participant&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|user_id	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|team_id&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|AppID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!participants	&lt;br /&gt;
!Participant&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|user_id	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|id	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|AppID&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!ActorParticipant&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|RoleID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Enrollment&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AppID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CourseID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!Teams	&lt;br /&gt;
!Artifact&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|name	&lt;br /&gt;
|ArtifactContent&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactCharLength&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactOpen&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactEnd&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Item&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ItemContent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ArtifactId&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Review&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|AssessorActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AssessedArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CritiqueArtifactID&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!ReviewCriterionLevel&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|AssessorActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AssessedArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CritiqueArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|EvalMode&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|EvalLevelID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ValueOrdinal&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|ValueCardinal&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|Comment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
We have used an Extract, Transform and Load [https://en.wikipedia.org/wiki/Extract,_transform,_load ETL] tool, [http://community.pentaho.com/projects/data-integration/ Pentaho Kettle] to perform the data migration  from Expertiza to PRML database.&lt;br /&gt;
&lt;br /&gt;
[[File:diagram.png]]&lt;br /&gt;
&lt;br /&gt;
The Pentaho Kettle tool extracts data from the expertise schema, performs transformation on it and load the data in the PRML format.&lt;br /&gt;
The tables are mapped as shown in the schema map above. &lt;br /&gt;
The operations performed by the ETL tool:&lt;br /&gt;
&lt;br /&gt;
'''Extraction'''&lt;br /&gt;
The data is extracted from the expertise database and brought into the staging area by this operation of the ETL tool. It is the staging area in which all the transformation are done.&lt;br /&gt;
&lt;br /&gt;
'''Transformation'''&lt;br /&gt;
Many operations are performed on the data in the staging area so that the expertise schema can be converted to the PRML schema. This is called transformation of the data. An example of transformation is while mapping of participants table in the expertiza database to actors table in the PRML database. Each value of the id field is incremented by 1000 while inserting in the participants table.  &lt;br /&gt;
&lt;br /&gt;
'''Loading:'''&lt;br /&gt;
The transformed data when moved from the staging area to the PRML database is called as loading. There are three types of loading implemented on the tables depending on the size of the table – initial load,partial loading and full loading.&lt;br /&gt;
Partial Loading: Only the new or updated entries in the expertiza table are transformed and loaded in the corresponding PRML table. This is generally done for table with very large number of entries. Eg: Reviews&lt;br /&gt;
&lt;br /&gt;
Partial loading is implemented with the help of timestamps and checksums.&lt;br /&gt;
&lt;br /&gt;
Timestamp: One way to perform partial loading is to have a 'modified' time stamp in the source table. The destination table should mirror this 'modified' time stamp. Then while loading the destination table we extract only those records from the source table which has a 'modified' time stamp value greater than the latest 'modified' time stamp value in the destination table. The advantage is that we need not fetch all records from the source table. Only those records which needs to be updated in the destination table will be retrieved. (refer load_prml_ModifiedTimeStampTable transformation)&lt;br /&gt;
&lt;br /&gt;
Checksum: Another way to perform partial loading is using checksum. A checksum is computed for each record, on selected field values, of the source table and added to the destination table while initial loading. Loading which follow would again compute the checksum for source table records and if there is no matching checksum in the destination table an update or an insert would be performed. (refer load_prml_checksumtable transformation)&lt;br /&gt;
&lt;br /&gt;
Full Loading: All the entries from the expertiza table are transformed and loaded in the corresponding PRML table. This is generally done for tables with less number of entries.&lt;br /&gt;
Eg: Courses&lt;br /&gt;
&lt;br /&gt;
'''Expertiza tables which have been implemented'''&lt;br /&gt;
&lt;br /&gt;
Assignments Table - Full Load&lt;br /&gt;
&lt;br /&gt;
Course Table - Full Load&lt;br /&gt;
&lt;br /&gt;
ModifiedTimeStamp Table - Partial Load&lt;br /&gt;
&lt;br /&gt;
Task Table&lt;br /&gt;
&lt;br /&gt;
Criteria Table&lt;br /&gt;
&lt;br /&gt;
Due_Dates Table&lt;br /&gt;
&lt;br /&gt;
Questionare Table&lt;br /&gt;
&lt;br /&gt;
Teams Table &lt;br /&gt;
&lt;br /&gt;
Jobs are being performed in a sequential order in the current project. If the tables do not depend on one another they can be performed in a parallel way to reduce time.&lt;br /&gt;
Initially the entries in the table are buffered so that only around 8000 rows are processed at a time.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
We have tested our conversion by using a set of sample expertiza data. We run the extract, transform and load methodology on it. Queries are run on the PRML database to check if it gives the same results as the expertiza database. &lt;br /&gt;
Though the testing is not through, this is the only way the project can be tested.&lt;br /&gt;
&lt;br /&gt;
==Running the Project==&lt;br /&gt;
'''Required Software:'''&lt;br /&gt;
*Pentaho’s Data Integration (Kettle).&lt;br /&gt;
*MySQL&lt;br /&gt;
*JAVA&lt;br /&gt;
&lt;br /&gt;
'''Setup:'''&lt;br /&gt;
*Download and Install MySQL and JAVA&lt;br /&gt;
*Import to MySQL expertiza database dump file.&lt;br /&gt;
*Import to MySQL PRML database dump file.&lt;br /&gt;
*Download Pentaho's Data Integration(Kettle) Community Edition (its a copy deployment hence no installation is required).&lt;br /&gt;
*Download MySql Connector jar file and copy to &amp;lt;pentaho_root_directory\data-integration\lib&amp;gt;&lt;br /&gt;
*Start Spoon.bat if you are using a windows machine or Spoon.sh if you using Linux (pentaho_root_directory\data-integration)&lt;br /&gt;
*Download the transformations and jobs attached&lt;br /&gt;
*You can open a kettle transformation (.ktr file) using Spoon and run it (Make sure proper MySql DB connections are configured)&lt;br /&gt;
*You may also open the kettle job (.kjb file) using spoon and run it (Make sure the path for transformations in the job are correct)&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=100605</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=100605"/>
		<updated>2015-12-16T18:31:53Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
=== PRML ===&lt;br /&gt;
Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;br /&gt;
&lt;br /&gt;
== Scope of the Project  ==&lt;br /&gt;
The scope of this project is to export the data from the Expertiza database to PRML format.&lt;br /&gt;
&lt;br /&gt;
== Expertiza Design Document ==&lt;br /&gt;
[[File:Pg_development.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza Database Diagram ==&lt;br /&gt;
[[File:PRML.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza database schema to PRML database schema map ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Courses&lt;br /&gt;
! Course&lt;br /&gt;
|-&lt;br /&gt;
!Attributes&lt;br /&gt;
| id&lt;br /&gt;
| CourseId&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null&lt;br /&gt;
|CourseCIPCode&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|name	&lt;br /&gt;
|CourseTitle&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|info	&lt;br /&gt;
|CourseDescription&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseLevelID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|created_at	&lt;br /&gt;
|CourseCreated&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseStarted&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseEnded&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Assignments&lt;br /&gt;
! Assignment&lt;br /&gt;
|-&lt;br /&gt;
!Attributes&lt;br /&gt;
| id&lt;br /&gt;
| AssignmentId&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null&lt;br /&gt;
|AssignmentCIPCode&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|name	&lt;br /&gt;
|AssignmentTitle&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|spec_location	&lt;br /&gt;
|AssignmentDescription&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|course_id	&lt;br /&gt;
|CourseID&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!due_dates, deadline_types	&lt;br /&gt;
!Task&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|due_dates.id	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.deadline_type_id	&lt;br /&gt;
|TaskTypeID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|deadline_types.name	&lt;br /&gt;
|TaskTitle&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.description_url	&lt;br /&gt;
|TaskDescription&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|TaskOpen&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.due_at	&lt;br /&gt;
|TaskDue&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!questions, questionnaires	&lt;br /&gt;
!criterion&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|questions.id&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questions.txt	&lt;br /&gt;
|CriterionTitle&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|CriterionDescription&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questions.type	&lt;br /&gt;
|Type&lt;br /&gt;
|-	&lt;br /&gt;
|&lt;br /&gt;
|questionnaires.max_question_score	&lt;br /&gt;
|MaxLabel&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questionnaires.min_question_score	&lt;br /&gt;
|MinLabel&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!question_advices	&lt;br /&gt;
!Level&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|id	&lt;br /&gt;
|LevelID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|score	&lt;br /&gt;
|LevelLabel&lt;br /&gt;
|-	&lt;br /&gt;
|&lt;br /&gt;
|advice	&lt;br /&gt;
|LevelDescription&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!questions	&lt;br /&gt;
!Rubric&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|questions.id&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!teams	&lt;br /&gt;
!Actor&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|id	&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|type&lt;br /&gt;
|&lt;br /&gt;
|- 	&lt;br /&gt;
|&lt;br /&gt;
|parent_id&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
!participants&lt;br /&gt;
!Actor&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|id	&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|type 	&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|parent_id&lt;br /&gt;
|-	&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!ActorTask&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|		&lt;br /&gt;
!teams_users	&lt;br /&gt;
!Participant&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|user_id	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|team_id&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|AppID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!participants	&lt;br /&gt;
!Participant&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|user_id	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|id	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|AppID&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!ActorParticipant&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|RoleID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Enrollment&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AppID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CourseID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!Teams	&lt;br /&gt;
!Artifact&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|name	&lt;br /&gt;
|ArtifactContent&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactCharLength&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactOpen&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactEnd&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Item&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ItemContent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ArtifactId&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Review&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|AssessorActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AssessedArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CritiqueArtifactID&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!ReviewCriterionLevel&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|AssessorActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AssessedArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CritiqueArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|EvalMode&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|EvalLevelID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ValueOrdinal&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|ValueCardinal&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|Comment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
We have used an Extract, Transform and Load [https://en.wikipedia.org/wiki/Extract,_transform,_load ETL] tool, [http://community.pentaho.com/projects/data-integration/ Pentaho Kettle] to perform the data migration  from Expertiza to PRML database.&lt;br /&gt;
&lt;br /&gt;
[[File:diagram.png]]&lt;br /&gt;
&lt;br /&gt;
The Pentaho Kettle tool extracts data from the expertise schema, performs transformation on it and load the data in the PRML format.&lt;br /&gt;
The tables are mapped as shown in the schema map above. &lt;br /&gt;
The operations performed by the ETL tool:&lt;br /&gt;
&lt;br /&gt;
'''Extraction'''&lt;br /&gt;
The data is extracted from the expertise database and brought into the staging area by this operation of the ETL tool. It is the staging area in which all the transformation are done.&lt;br /&gt;
&lt;br /&gt;
'''Transformation'''&lt;br /&gt;
Many operations are performed on the data in the staging area so that the expertise schema can be converted to the PRML schema. This is called transformation of the data. An example of transformation is while mapping of participants table in the expertiza database to actors table in the PRML database. Each value of the id field is incremented by 1000 while inserting in the participants table.  &lt;br /&gt;
&lt;br /&gt;
'''Loading:'''&lt;br /&gt;
The transformed data when moved from the staging area to the PRML database is called as loading. There are three types of loading implemented on the tables depending on the size of the table – initial load,partial loading and full loading.&lt;br /&gt;
Partial Loading: Only the new or updated entries in the expertiza table are transformed and loaded in the corresponding PRML table. This is generally done for table with very large number of entries. Eg: Reviews&lt;br /&gt;
&lt;br /&gt;
Partial loading is implemented with the help of timestamps and checksums.&lt;br /&gt;
&lt;br /&gt;
Timestamp: The expertiza database has a timestamp column which saves the timestamp that row was last modified at. There is a variable 'maxtimestamp' that saves the value of the time the rows from the experts database were last loaded in the PRML database. While doing the partial load, the query checks this variable and loads only the rows whose timestamp is greater than the 'maxtimestamp'. This way only the updated or the new entries are loaded in the PRML table.&lt;br /&gt;
&lt;br /&gt;
Checksums: The checksum is also a way of implementing partial load, like the timestamp. In this case the checksum of the expertiza database is compared with the PRML database checksum. Only the rows whose checksum does not match, or does not exist is loaded. &lt;br /&gt;
&lt;br /&gt;
Full Loading: All the entries from the expertiza table are transformed and loaded in the corresponding PRML table. This is generally done for tables will less number of entries.&lt;br /&gt;
Eg: Courses&lt;br /&gt;
&lt;br /&gt;
'''Expertiza tables which have been implemented'''&lt;br /&gt;
&lt;br /&gt;
Assignments Table - Full Load&lt;br /&gt;
&lt;br /&gt;
Course Table - Full Load&lt;br /&gt;
&lt;br /&gt;
ModifiedTimeStamp Table - Partial Load&lt;br /&gt;
&lt;br /&gt;
Task Table&lt;br /&gt;
&lt;br /&gt;
Criteria Table&lt;br /&gt;
&lt;br /&gt;
Due_Dates Table&lt;br /&gt;
&lt;br /&gt;
Questionare Table&lt;br /&gt;
&lt;br /&gt;
Teams Table &lt;br /&gt;
&lt;br /&gt;
Jobs are being performed in a sequential order in the current project. If the tables do not depend on one another they can be performed in a parallel way to reduce time.&lt;br /&gt;
Initially the entries in the table are buffered so that only around 8000 rows are processed at a time.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
We have tested our conversion by using a set of sample expertiza data. We run the extract, transform and load methodology on it. Queries are run on the PRML database to check if it gives the same results as the expertiza database. &lt;br /&gt;
Though the testing is not through, this is the only way the project can be tested.&lt;br /&gt;
&lt;br /&gt;
==Running the Project==&lt;br /&gt;
'''Required Software:'''&lt;br /&gt;
*Pentaho’s Data Integration (Kettle).&lt;br /&gt;
*MySQL&lt;br /&gt;
*JAVA&lt;br /&gt;
&lt;br /&gt;
'''Setup:'''&lt;br /&gt;
*Download and Install MySQL and JAVA&lt;br /&gt;
*Import to MySQL expertiza database dump file.&lt;br /&gt;
*Import to MySQL PRML database dump file.&lt;br /&gt;
*Download Pentaho's Data Integration(Kettle) Community Edition (its a copy deployment hence no installation is required).&lt;br /&gt;
*Download MySql Connector jar file and copy to &amp;lt;pentaho_root_directory\data-integration\lib&amp;gt;&lt;br /&gt;
*Start Spoon.bat if you are using a windows machine or Spoon.sh if you using Linux (pentaho_root_directory\data-integration)&lt;br /&gt;
*Download the transformations and jobs attached&lt;br /&gt;
*You can open a kettle transformation (.ktr file) using Spoon and run it (Make sure proper MySql DB connections are configured)&lt;br /&gt;
*You may also open the kettle job (.kjb file) using spoon and run it (Make sure the path for transformations in the job are correct)&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=100601</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=100601"/>
		<updated>2015-12-16T18:22:21Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
=== PRML ===&lt;br /&gt;
Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;br /&gt;
&lt;br /&gt;
== Scope of the Project  ==&lt;br /&gt;
The scope of this project is to export the data from the Expertiza database to PRML format.&lt;br /&gt;
&lt;br /&gt;
== Expertiza Design Document ==&lt;br /&gt;
[[File:Pg_development.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza Database Diagram ==&lt;br /&gt;
[[File:PRML.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza database schema to PRML database schema map ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Courses&lt;br /&gt;
! Course&lt;br /&gt;
|-&lt;br /&gt;
!Attributes&lt;br /&gt;
| id&lt;br /&gt;
| CourseId&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null&lt;br /&gt;
|CourseCIPCode&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|name	&lt;br /&gt;
|CourseTitle&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|info	&lt;br /&gt;
|CourseDescription&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseLevelID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|created_at	&lt;br /&gt;
|CourseCreated&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseStarted&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseEnded&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Assignments&lt;br /&gt;
! Assignment&lt;br /&gt;
|-&lt;br /&gt;
!Attributes&lt;br /&gt;
| id&lt;br /&gt;
| AssignmentId&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null&lt;br /&gt;
|AssignmentCIPCode&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|name	&lt;br /&gt;
|AssignmentTitle&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|spec_location	&lt;br /&gt;
|AssignmentDescription&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|course_id	&lt;br /&gt;
|CourseID&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!due_dates, deadline_types	&lt;br /&gt;
!Task&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|due_dates.id	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.deadline_type_id	&lt;br /&gt;
|TaskTypeID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|deadline_types.name	&lt;br /&gt;
|TaskTitle&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.description_url	&lt;br /&gt;
|TaskDescription&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|TaskOpen&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.due_at	&lt;br /&gt;
|TaskDue&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!questions, questionnaires	&lt;br /&gt;
!criterion&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|questions.id&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questions.txt	&lt;br /&gt;
|CriterionTitle&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|CriterionDescription&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questions.type	&lt;br /&gt;
|Type&lt;br /&gt;
|-	&lt;br /&gt;
|&lt;br /&gt;
|questionnaires.max_question_score	&lt;br /&gt;
|MaxLabel&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questionnaires.min_question_score	&lt;br /&gt;
|MinLabel&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!question_advices	&lt;br /&gt;
!Level&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|id	&lt;br /&gt;
|LevelID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|score	&lt;br /&gt;
|LevelLabel&lt;br /&gt;
|-	&lt;br /&gt;
|&lt;br /&gt;
|advice	&lt;br /&gt;
|LevelDescription&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!questions	&lt;br /&gt;
!Rubric&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|questions.id&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!teams	&lt;br /&gt;
!Actor&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|id	&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|type&lt;br /&gt;
|&lt;br /&gt;
|- 	&lt;br /&gt;
|&lt;br /&gt;
|parent_id&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
!participants&lt;br /&gt;
!Actor&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|id	&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|type 	&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|parent_id&lt;br /&gt;
|-	&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!ActorTask&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|		&lt;br /&gt;
!teams_users	&lt;br /&gt;
!Participant&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|user_id	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|team_id&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|AppID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!participants	&lt;br /&gt;
!Participant&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|user_id	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|id	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|AppID&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!ActorParticipant&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|RoleID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Enrollment&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AppID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CourseID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!Teams	&lt;br /&gt;
!Artifact&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|name	&lt;br /&gt;
|ArtifactContent&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactCharLength&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactOpen&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactEnd&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Item&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ItemContent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ArtifactId&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Review&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|AssessorActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AssessedArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CritiqueArtifactID&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!ReviewCriterionLevel&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|AssessorActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AssessedArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CritiqueArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|EvalMode&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|EvalLevelID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ValueOrdinal&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|ValueCardinal&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|Comment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
We have used an Extract, Transform and Load [https://en.wikipedia.org/wiki/Extract,_transform,_load ETL] tool, [http://community.pentaho.com/projects/data-integration/ Pentaho Kettle] to perform the data migration  from Expertiza to PRML database.&lt;br /&gt;
&lt;br /&gt;
[[File:diagram.png]]&lt;br /&gt;
&lt;br /&gt;
The Pentaho Kettle tool extracts data from the expertise schema, performs transformation on it and load the data in the PRML format.&lt;br /&gt;
The tables are mapped as shown in the schema map above. &lt;br /&gt;
The operations performed by the ETL tool:&lt;br /&gt;
&lt;br /&gt;
'''Extraction'''&lt;br /&gt;
The data is extracted from the expertise database and brought into the staging area by this operation of the ETL tool. It is the staging area in which all the transformation are done.&lt;br /&gt;
&lt;br /&gt;
'''Transformation'''&lt;br /&gt;
Many operations are performed on the data in the staging area so that the expertise schema can be converted to the PRML schema. This is called transformation of the data. An example of transformation is while mapping of participants table in the expertiza database to actors table in the PRML database. Each value of the id field is incremented by 1000 while inserting in the participants table.  &lt;br /&gt;
&lt;br /&gt;
'''Loading:'''&lt;br /&gt;
The transformed data when moved from the staging area to the PRML database is called as loading. There are three types of loading implemented on the tables depending on the size of the table – initial load,partial loading and full loading.&lt;br /&gt;
Partial Loading: Only the new or updated entries in the expertiza table are transformed and loaded in the corresponding PRML table. This is generally done for table with very large number of entries. Eg: Reviews&lt;br /&gt;
&lt;br /&gt;
Partial loading is implemented with the help of timestamps and checksums.&lt;br /&gt;
&lt;br /&gt;
Timestamp: The expertiza database has a timestamp column which saves the timestamp that row was last modified at. There is a variable 'maxtimestamp' that saves the value of the time the rows from the experts database were last loaded in the PRML database. While doing the partial load, the query checks this variable and loads only the rows whose timestamp is greater than the 'maxtimestamp'. This way only the updated or the new entries are loaded in the PRML table.&lt;br /&gt;
&lt;br /&gt;
Checksums: The checksum is also a way of implementing partial load, like the timestamp. In this case the checksum of the expertiza database is compared with the PRML database checksum. Only the rows whose checksum does not match, or does not exist is loaded. &lt;br /&gt;
&lt;br /&gt;
Full Loading: All the entries from the expertiza table are transformed and loaded in the corresponding PRML table. This is generally done for tables will less number of entries.&lt;br /&gt;
Eg: Courses&lt;br /&gt;
&lt;br /&gt;
'''Expertiza tables which have been implemented'''&lt;br /&gt;
&lt;br /&gt;
Assignments Table - Full Load&lt;br /&gt;
&lt;br /&gt;
Course Table - Full Load&lt;br /&gt;
&lt;br /&gt;
ModifiedTimeStamp Table - Partial Load&lt;br /&gt;
&lt;br /&gt;
Jobs are being performed in a sequential order in the current project. If the tables do not depend on one another they can be performed in a parallel way to reduce time.&lt;br /&gt;
Initially the entries in the table are buffered so that only around 8000 rows are processed at a time.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
We have tested our conversion by using a set of sample expertiza data. We run the extract, transform and load methodology on it. Queries are run on the PRML database to check if it gives the same results as the expertiza database. &lt;br /&gt;
Though the testing is not through, this is the only way the project can be tested.&lt;br /&gt;
&lt;br /&gt;
==Running the Project==&lt;br /&gt;
'''Required Software:'''&lt;br /&gt;
*Pentaho’s Data Integration (Kettle).&lt;br /&gt;
*MySQL&lt;br /&gt;
*JAVA&lt;br /&gt;
&lt;br /&gt;
'''Setup:'''&lt;br /&gt;
*Download and Install MySQL and JAVA&lt;br /&gt;
*Import to MySQL expertiza database dump file.&lt;br /&gt;
*Import to MySQL PRML database dump file.&lt;br /&gt;
*Download Pentaho's Data Integration(Kettle) Community Edition (its a copy deployment hence no installation is required).&lt;br /&gt;
*Download MySql Connector jar file and copy to &amp;lt;pentaho_root_directory\data-integration\lib&amp;gt;&lt;br /&gt;
*Start Spoon.bat if you are using a windows machine or Spoon.sh if you using Linux (pentaho_root_directory\data-integration)&lt;br /&gt;
*Download the transformations and jobs attached&lt;br /&gt;
*You can open a kettle transformation (.ktr file) using Spoon and run it (Make sure proper MySql DB connections are configured)&lt;br /&gt;
*You may also open the kettle job (.kjb file) using spoon and run it (Make sure the path for transformations in the job are correct)&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=100599</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=100599"/>
		<updated>2015-12-16T18:20:07Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
=== PRML ===&lt;br /&gt;
Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;br /&gt;
&lt;br /&gt;
== Scope of the Project  ==&lt;br /&gt;
The scope of this project is to export the data from the Expertiza database to PRML format.&lt;br /&gt;
&lt;br /&gt;
== Expertiza Design Document ==&lt;br /&gt;
[[File:Pg_development.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza Database Diagram ==&lt;br /&gt;
[[File:PRML.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza database schema to PRML database schema map ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Courses&lt;br /&gt;
! Course&lt;br /&gt;
|-&lt;br /&gt;
!Attributes&lt;br /&gt;
| id&lt;br /&gt;
| CourseId&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null&lt;br /&gt;
|CourseCIPCode&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|name	&lt;br /&gt;
|CourseTitle&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|info	&lt;br /&gt;
|CourseDescription&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseLevelID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|created_at	&lt;br /&gt;
|CourseCreated&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseStarted&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null	&lt;br /&gt;
|CourseEnded&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Assignments&lt;br /&gt;
! Assignment&lt;br /&gt;
|-&lt;br /&gt;
!Attributes&lt;br /&gt;
| id&lt;br /&gt;
| AssignmentId&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|null&lt;br /&gt;
|AssignmentCIPCode&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|name	&lt;br /&gt;
|AssignmentTitle&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|spec_location	&lt;br /&gt;
|AssignmentDescription&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|course_id	&lt;br /&gt;
|CourseID&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!due_dates, deadline_types	&lt;br /&gt;
!Task&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|due_dates.id	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.deadline_type_id	&lt;br /&gt;
|TaskTypeID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|deadline_types.name	&lt;br /&gt;
|TaskTitle&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.description_url	&lt;br /&gt;
|TaskDescription&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|TaskOpen&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|due_dates.due_at	&lt;br /&gt;
|TaskDue&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!questions, questionnaires	&lt;br /&gt;
!criterion&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|questions.id&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questions.txt	&lt;br /&gt;
|CriterionTitle&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|CriterionDescription&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questions.type	&lt;br /&gt;
|Type&lt;br /&gt;
|-	&lt;br /&gt;
|&lt;br /&gt;
|questionnaires.max_question_score	&lt;br /&gt;
|MaxLabel&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|questionnaires.min_question_score	&lt;br /&gt;
|MinLabel&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!question_advices	&lt;br /&gt;
!Level&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|id	&lt;br /&gt;
|LevelID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|score	&lt;br /&gt;
|LevelLabel&lt;br /&gt;
|-	&lt;br /&gt;
|&lt;br /&gt;
|advice	&lt;br /&gt;
|LevelDescription&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!questions	&lt;br /&gt;
!Rubric&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|questions.id&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!teams	&lt;br /&gt;
!Actor&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|id	&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|type&lt;br /&gt;
|&lt;br /&gt;
|- 	&lt;br /&gt;
|&lt;br /&gt;
|parent_id&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
!participants&lt;br /&gt;
!Actor&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|id	&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|type 	&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|parent_id&lt;br /&gt;
|-	&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
!ActorTask&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|		&lt;br /&gt;
!teams_users	&lt;br /&gt;
!Participant&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|user_id	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|team_id&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|AppID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!participants	&lt;br /&gt;
!Participant&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES	&lt;br /&gt;
|user_id	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|id	&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|AppID&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!ActorParticipant&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|RoleID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Enrollment&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ParticipantID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AppID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CourseID&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME	&lt;br /&gt;
!Teams	&lt;br /&gt;
!Artifact&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ActorID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|name	&lt;br /&gt;
|ArtifactContent&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactCharLength&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactOpen&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|NULL	&lt;br /&gt;
|ArtifactEnd&lt;br /&gt;
|-		&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Item&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|ItemContent&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ArtifactId&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!Review&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|AssessorActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AssessedArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CritiqueArtifactID&lt;br /&gt;
|-&lt;br /&gt;
!TABLE NAME&lt;br /&gt;
|		&lt;br /&gt;
!ReviewCriterionLevel&lt;br /&gt;
|-&lt;br /&gt;
!ATTRIBUTES&lt;br /&gt;
|		&lt;br /&gt;
|AssessorActorID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|TaskID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|AssessedArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CriterionID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|CritiqueArtifactID&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|EvalMode&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|EvalLevelID&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|	&lt;br /&gt;
|ValueOrdinal&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|ValueCardinal&lt;br /&gt;
|-&lt;br /&gt;
|	&lt;br /&gt;
|	&lt;br /&gt;
|Comment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
We have used an Extract, Transform and Load [https://en.wikipedia.org/wiki/Extract,_transform,_load ETL] tool, [http://community.pentaho.com/projects/data-integration/ Pentaho Kettle] to perform the data migration  from Expertiza to PRML database.&lt;br /&gt;
&lt;br /&gt;
[[File:diagram.png]]&lt;br /&gt;
&lt;br /&gt;
The Pentaho Kettle tool extracts data from the expertise schema, performs transformation on it and load the data in the PRML format.&lt;br /&gt;
The tables are mapped as shown in the schema map above. &lt;br /&gt;
The operations performed by the ETL tool:&lt;br /&gt;
&lt;br /&gt;
'''Extraction'''&lt;br /&gt;
The data is extracted from the expertise database and brought into the staging area by this operation of the ETL tool. It is the staging area in which all the transformation are done.&lt;br /&gt;
&lt;br /&gt;
'''Transformation'''&lt;br /&gt;
Many operations are performed on the data in the staging area so that the expertise schema can be converted to the PRML schema. This is called transformation of the data. An example of transformation is while mapping of participants table in the expertiza database to actors table in the PRML database. Each value of the id field is incremented by 1000 while inserting in the participants table.  &lt;br /&gt;
&lt;br /&gt;
'''Loading:'''&lt;br /&gt;
The transformed data when moved from the staging area to the PRML database is called as loading. There are three types of loading implemented on the tables depending on the size of the table – initial load,partial loading and full loading.&lt;br /&gt;
Partial Loading: Only the new or updated entries in the expertiza table are transformed and loaded in the corresponding PRML table. This is generally done for table with very large number of entries. Eg: Reviews&lt;br /&gt;
&lt;br /&gt;
Partial loading is implemented with the help of timestamps and checksums.&lt;br /&gt;
&lt;br /&gt;
Timestamp: The expertiza database has a timestamp column which saves the timestamp that row was last modified at. There is a variable 'maxtimestamp' that saves the value of the time the rows from the experts database were last loaded in the PRML database. While doing the partial load, the query checks this variable and loads only the rows whose timestamp is greater than the 'maxtimestamp'. This way only the updated or the new entries are loaded in the PRML table.&lt;br /&gt;
&lt;br /&gt;
Checksums: The checksum is also a way of implementing partial load, like the timestamp. In this case the checksum of the expertiza database is compared with the PRML database checksum. Only the rows whose checksum does not match, or does not exist is loaded. &lt;br /&gt;
&lt;br /&gt;
Full Loading: All the entries from the expertiza table are transformed and loaded in the corresponding PRML table. This is generally done for tables will less number of entries.&lt;br /&gt;
Eg: Courses&lt;br /&gt;
&lt;br /&gt;
'''Expertiza tables which have been implemented'''&lt;br /&gt;
&lt;br /&gt;
Assignments Table - Full Load&lt;br /&gt;
&lt;br /&gt;
Course Table - Full Load&lt;br /&gt;
&lt;br /&gt;
ModifiedTimeStamp Table - Partial Load&lt;br /&gt;
&lt;br /&gt;
Jobs are being performed in a sequential order in the current project. If the tables do not depend on one another they can be performed in a parellal way to reduce time.&lt;br /&gt;
Initially the entries in the table are buffered so that only around 8000 rows are processed at a time.&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
We have tested our conversion by using a set of sample expertiza data. We run the extract, transform and load methodology on it. Queries are run on the PRML database to check if it gives the same results as the expertiza database. &lt;br /&gt;
Though the testing is not through, this is the only way the project can be tested.&lt;br /&gt;
&lt;br /&gt;
==Running the Project==&lt;br /&gt;
'''Required Software:'''&lt;br /&gt;
*Pentaho’s Data Integration (Kettle).&lt;br /&gt;
*MySQL&lt;br /&gt;
*JAVA&lt;br /&gt;
&lt;br /&gt;
'''Setup:'''&lt;br /&gt;
*Download and Install MySQL and JAVA&lt;br /&gt;
*Import to MySQL expertiza database dump file.&lt;br /&gt;
*Import to MySQL PRML database dump file.&lt;br /&gt;
*Download Pentaho's Data Integration(Kettle) Community Edition (its a copy deployment hence no installation is required).&lt;br /&gt;
*Download MySql Connector jar file and copy to &amp;lt;pentaho_root_directory\data-integration\lib&amp;gt;&lt;br /&gt;
*Start Spoon.bat if you are using a windows machine or Spoon.sh if you using Linux (pentaho_root_directory\data-integration)&lt;br /&gt;
*Download the transformations and jobs attached&lt;br /&gt;
*You can open a kettle transformation (.ktr file) using Spoon and run it (Make sure proper MySql DB connections are configured)&lt;br /&gt;
*You may also open the kettle job (.kjb file) using spoon and run it (Make sure the path for transformations in the job are correct)&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99656</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99656"/>
		<updated>2015-11-13T21:55:23Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Expertiza Database Diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
=== PRML ===&lt;br /&gt;
Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;br /&gt;
&lt;br /&gt;
== Scope of the Project  ==&lt;br /&gt;
The scope of this project is to export the data from the Expertiza database to PRML format.&lt;br /&gt;
&lt;br /&gt;
== Expertiza Design Document ==&lt;br /&gt;
[[File:Pg_development.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza Database Diagram ==&lt;br /&gt;
[[File:PRML.png]]&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99655</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99655"/>
		<updated>2015-11-13T21:54:50Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
=== PRML ===&lt;br /&gt;
Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;br /&gt;
&lt;br /&gt;
== Scope of the Project  ==&lt;br /&gt;
The scope of this project is to export the data from the Expertiza database to PRML format.&lt;br /&gt;
&lt;br /&gt;
== Expertiza Design Document ==&lt;br /&gt;
[[File:Pg_development.png]]&lt;br /&gt;
&lt;br /&gt;
== Expertiza Database Diagram ==&lt;br /&gt;
[[File:prml.png]]&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99651</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99651"/>
		<updated>2015-11-13T21:48:52Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
=== PRML ===&lt;br /&gt;
Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;br /&gt;
&lt;br /&gt;
== Scope of the Project  ==&lt;br /&gt;
The scope of this project is to export the data from the Expertiza database to PRML format.&lt;br /&gt;
&lt;br /&gt;
== Expertiza Design Document ==&lt;br /&gt;
[[File:Pg_development.png]]&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Pg_development.png&amp;diff=99648</id>
		<title>File:Pg development.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Pg_development.png&amp;diff=99648"/>
		<updated>2015-11-13T21:45:27Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: uploaded a new version of &amp;amp;quot;File:Pg development.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Pg_development.png&amp;diff=99640</id>
		<title>File:Pg development.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Pg_development.png&amp;diff=99640"/>
		<updated>2015-11-13T21:40:14Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: uploaded a new version of &amp;amp;quot;File:Pg development.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Pg_development.png&amp;diff=99635</id>
		<title>File:Pg development.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Pg_development.png&amp;diff=99635"/>
		<updated>2015-11-13T21:35:53Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: uploaded a new version of &amp;amp;quot;File:Pg development.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Pg_development.png&amp;diff=99633</id>
		<title>File:Pg development.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Pg_development.png&amp;diff=99633"/>
		<updated>2015-11-13T21:34:59Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99627</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99627"/>
		<updated>2015-11-13T21:28:24Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
=== PRML ===&lt;br /&gt;
Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;br /&gt;
&lt;br /&gt;
== Scope of the Project  ==&lt;br /&gt;
The scope of this project is to export the data from the Expertiza database to PRML format.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99626</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99626"/>
		<updated>2015-11-13T21:26:12Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
	&lt;br /&gt;
=== PRML ===&lt;br /&gt;
Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99623</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99623"/>
		<updated>2015-11-13T21:25:46Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
	=== PRML === – Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99621</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99621"/>
		<updated>2015-11-13T21:24:31Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
One solution to the above mentioned problem is to have a common schema which can capture the essence of all the reviews in a peer-review system to its entirety. Moreover, this schema should not capture any information specific to a particular peer-review system. Once such a schema standard is in place the different peer-review systems can export the data in their database to this new standard and the data can be easily shared across different peer-review systems.&lt;br /&gt;
	PRML – Peer Review Markup Language is such a standard schema which can capture information about different reviews to its entirety.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99620</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99620"/>
		<updated>2015-11-13T21:23:45Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;br /&gt;
&lt;br /&gt;
This is a very tedious job. Moreover, with such a diverse schema it is quite difficult to leverage the power of this large structured data and run any sort of analytics on it.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99613</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99613"/>
		<updated>2015-11-13T21:16:48Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
Educational peer-review systems like Expertiza contains a huge volume of data accumulated during the course of its use. &lt;br /&gt;
Each peer-review system has a different database design. The relational model is so diverse that, it is often difficult to share the data across different peer-review systems.&lt;br /&gt;
&lt;br /&gt;
In order to migrate a student’s data from one peer-review system to another, one will have to do the following:&lt;br /&gt;
#Understand the database design/schema of the source peer-review system&lt;br /&gt;
#Understand the database design/schema of the destination peer-review system&lt;br /&gt;
#Find the equivalent tables and relations in the destination peer-review system for the source peer-review system&lt;br /&gt;
#Retrieve the data from the source peer-review system&lt;br /&gt;
#Modify it to match the schema of the destination peer-review system&lt;br /&gt;
#Insert the data to the destination peer-review system database.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99602</id>
		<title>User:Mrohatg2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Mrohatg2&amp;diff=99602"/>
		<updated>2015-11-13T20:57:57Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: Created page with &amp;quot;E1575 - Share the data in Expertiza to a remote server via PRML format&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;E1575 - Share the data in Expertiza to a remote server via PRML format&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98537</id>
		<title>CSC/ECE 517 Fall 2015/oss E1550 KMM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98537"/>
		<updated>2015-11-06T23:40:08Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Relocate/Refactor code for sending emails to app/mailers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== E1550: Refactoring response.rb and response_helper.rb ===&lt;br /&gt;
&lt;br /&gt;
== response.rb ==&lt;br /&gt;
response.rb is the class that manages the response to all rubrics in Expertiza.  if someone fills out a review form, the instance of the review form is a Response.  If someone gives feedback (a “rejoinder”) to an author, that is a Response too.  Or if someone evaluates a teammate contribution, fills out a survey, or takes a quiz, they are creating a Response.&lt;br /&gt;
&lt;br /&gt;
Note: Method display_as_html writes the HTML for displaying a rubric.  This would ordinarily be view code, but it is used by so many different views that it is done here.  Questions are written out in the order of their sequence number (anyone who creates a rubric can specify sequence numbers for questions).  After all questions are displayed, there is a blank for an additional comment.&lt;br /&gt;
&lt;br /&gt;
==== Rubric type checking via message to ResponseMap ====&lt;br /&gt;
&lt;br /&gt;
==== Ensure score calculations utilize the weight of questions ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the get_maximum_score() function is called it takes care of the weight of the question. It multiplies the weight to the score and adds it to the final score.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_maximum_score()&lt;br /&gt;
    # only count the scorable questions, only when the answer is not nil (we accept nil as answer for scorable questions, and they will not be counted towards the total score)&lt;br /&gt;
    total_weight = 0&lt;br /&gt;
    scores.each do |s|&lt;br /&gt;
      question = Question.find(s.question_id)&lt;br /&gt;
      if !s.answer.nil? &amp;amp;&amp;amp; question.is_a?(ScoredQuestion)&lt;br /&gt;
        total_weight+=question.weight&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if scores.empty?&lt;br /&gt;
      questionnaire = questionnaire_by_answer(nil)&lt;br /&gt;
    else&lt;br /&gt;
      questionnaire = questionnaire_by_answer(scores.first)&lt;br /&gt;
    end&lt;br /&gt;
    total_weight*questionnaire.max_question_score&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relocate/Refactor code for sending emails to app/mailers ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All the email code has been shifted to the mailers&lt;br /&gt;
&lt;br /&gt;
==== Remove comments in lines 25-27 ====&lt;br /&gt;
Comments have been removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Comments.JPG‎  |frame|center|Auto selected Reviewing]]&lt;br /&gt;
&lt;br /&gt;
== response_helper.rb ==&lt;br /&gt;
response_helper.rb contains helper methods that display the questionnaires and rearrange questions so that the most frequently answered questions are at the bottom while the less frequently answered questions are at the top.&lt;br /&gt;
&lt;br /&gt;
==== Refactor construct_table method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;br /&gt;
&lt;br /&gt;
==== Refactor rearrange_questions method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;br /&gt;
&lt;br /&gt;
[[File:response_helper.png‎  |frame|center|Auto selected Reviewing]]&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98530</id>
		<title>CSC/ECE 517 Fall 2015/oss E1550 KMM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98530"/>
		<updated>2015-11-06T23:16:36Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Remove comments in lines 25-27 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== E1550: Refactoring response.rb and response_helper.rb ===&lt;br /&gt;
&lt;br /&gt;
== response.rb ==&lt;br /&gt;
response.rb is the class that manages the response to all rubrics in Expertiza.  if someone fills out a review form, the instance of the review form is a Response.  If someone gives feedback (a “rejoinder”) to an author, that is a Response too.  Or if someone evaluates a teammate contribution, fills out a survey, or takes a quiz, they are creating a Response.&lt;br /&gt;
&lt;br /&gt;
Note: Method display_as_html writes the HTML for displaying a rubric.  This would ordinarily be view code, but it is used by so many different views that it is done here.  Questions are written out in the order of their sequence number (anyone who creates a rubric can specify sequence numbers for questions).  After all questions are displayed, there is a blank for an additional comment.&lt;br /&gt;
&lt;br /&gt;
==== Rubric type checking via message to ResponseMap ====&lt;br /&gt;
&lt;br /&gt;
==== Ensure score calculations utilize the weight of questions ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the get_maximum_score() function is called it takes care of the weight of the question. It multiplies the weight to the score and adds it to the final score.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_maximum_score()&lt;br /&gt;
    # only count the scorable questions, only when the answer is not nil (we accept nil as answer for scorable questions, and they will not be counted towards the total score)&lt;br /&gt;
    total_weight = 0&lt;br /&gt;
    scores.each do |s|&lt;br /&gt;
      question = Question.find(s.question_id)&lt;br /&gt;
      if !s.answer.nil? &amp;amp;&amp;amp; question.is_a?(ScoredQuestion)&lt;br /&gt;
        total_weight+=question.weight&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if scores.empty?&lt;br /&gt;
      questionnaire = questionnaire_by_answer(nil)&lt;br /&gt;
    else&lt;br /&gt;
      questionnaire = questionnaire_by_answer(scores.first)&lt;br /&gt;
    end&lt;br /&gt;
    total_weight*questionnaire.max_question_score&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relocate/Refactor code for sending emails to app/mailers ====&lt;br /&gt;
&lt;br /&gt;
==== Remove comments in lines 25-27 ====&lt;br /&gt;
Comments have been removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Comments.JPG‎  |frame|center|Auto selected Reviewing]]&lt;br /&gt;
&lt;br /&gt;
== response_helper.rb ==&lt;br /&gt;
response_helper.rb contains helper methods that display the questionnaires and rearrange questions so that the most frequently answered questions are at the bottom while the less frequently answered questions are at the top.&lt;br /&gt;
&lt;br /&gt;
==== Refactor construct_table method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;br /&gt;
&lt;br /&gt;
==== Refactor rearrange_questions method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98529</id>
		<title>CSC/ECE 517 Fall 2015/oss E1550 KMM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98529"/>
		<updated>2015-11-06T23:15:03Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Remove comments in lines 25-27 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== E1550: Refactoring response.rb and response_helper.rb ===&lt;br /&gt;
&lt;br /&gt;
== response.rb ==&lt;br /&gt;
response.rb is the class that manages the response to all rubrics in Expertiza.  if someone fills out a review form, the instance of the review form is a Response.  If someone gives feedback (a “rejoinder”) to an author, that is a Response too.  Or if someone evaluates a teammate contribution, fills out a survey, or takes a quiz, they are creating a Response.&lt;br /&gt;
&lt;br /&gt;
Note: Method display_as_html writes the HTML for displaying a rubric.  This would ordinarily be view code, but it is used by so many different views that it is done here.  Questions are written out in the order of their sequence number (anyone who creates a rubric can specify sequence numbers for questions).  After all questions are displayed, there is a blank for an additional comment.&lt;br /&gt;
&lt;br /&gt;
==== Rubric type checking via message to ResponseMap ====&lt;br /&gt;
&lt;br /&gt;
==== Ensure score calculations utilize the weight of questions ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the get_maximum_score() function is called it takes care of the weight of the question. It multiplies the weight to the score and adds it to the final score.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_maximum_score()&lt;br /&gt;
    # only count the scorable questions, only when the answer is not nil (we accept nil as answer for scorable questions, and they will not be counted towards the total score)&lt;br /&gt;
    total_weight = 0&lt;br /&gt;
    scores.each do |s|&lt;br /&gt;
      question = Question.find(s.question_id)&lt;br /&gt;
      if !s.answer.nil? &amp;amp;&amp;amp; question.is_a?(ScoredQuestion)&lt;br /&gt;
        total_weight+=question.weight&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if scores.empty?&lt;br /&gt;
      questionnaire = questionnaire_by_answer(nil)&lt;br /&gt;
    else&lt;br /&gt;
      questionnaire = questionnaire_by_answer(scores.first)&lt;br /&gt;
    end&lt;br /&gt;
    total_weight*questionnaire.max_question_score&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relocate/Refactor code for sending emails to app/mailers ====&lt;br /&gt;
&lt;br /&gt;
==== Remove comments in lines 25-27 ====&lt;br /&gt;
Comments have been removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Comments.JPG‎  |frame|left|Auto selected Reviewing]]&lt;br /&gt;
&lt;br /&gt;
== response_helper.rb ==&lt;br /&gt;
response_helper.rb contains helper methods that display the questionnaires and rearrange questions so that the most frequently answered questions are at the bottom while the less frequently answered questions are at the top.&lt;br /&gt;
&lt;br /&gt;
==== Refactor construct_table method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;br /&gt;
&lt;br /&gt;
==== Refactor rearrange_questions method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98528</id>
		<title>CSC/ECE 517 Fall 2015/oss E1550 KMM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98528"/>
		<updated>2015-11-06T23:14:45Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Remove comments in lines 25-27 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== E1550: Refactoring response.rb and response_helper.rb ===&lt;br /&gt;
&lt;br /&gt;
== response.rb ==&lt;br /&gt;
response.rb is the class that manages the response to all rubrics in Expertiza.  if someone fills out a review form, the instance of the review form is a Response.  If someone gives feedback (a “rejoinder”) to an author, that is a Response too.  Or if someone evaluates a teammate contribution, fills out a survey, or takes a quiz, they are creating a Response.&lt;br /&gt;
&lt;br /&gt;
Note: Method display_as_html writes the HTML for displaying a rubric.  This would ordinarily be view code, but it is used by so many different views that it is done here.  Questions are written out in the order of their sequence number (anyone who creates a rubric can specify sequence numbers for questions).  After all questions are displayed, there is a blank for an additional comment.&lt;br /&gt;
&lt;br /&gt;
==== Rubric type checking via message to ResponseMap ====&lt;br /&gt;
&lt;br /&gt;
==== Ensure score calculations utilize the weight of questions ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the get_maximum_score() function is called it takes care of the weight of the question. It multiplies the weight to the score and adds it to the final score.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_maximum_score()&lt;br /&gt;
    # only count the scorable questions, only when the answer is not nil (we accept nil as answer for scorable questions, and they will not be counted towards the total score)&lt;br /&gt;
    total_weight = 0&lt;br /&gt;
    scores.each do |s|&lt;br /&gt;
      question = Question.find(s.question_id)&lt;br /&gt;
      if !s.answer.nil? &amp;amp;&amp;amp; question.is_a?(ScoredQuestion)&lt;br /&gt;
        total_weight+=question.weight&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if scores.empty?&lt;br /&gt;
      questionnaire = questionnaire_by_answer(nil)&lt;br /&gt;
    else&lt;br /&gt;
      questionnaire = questionnaire_by_answer(scores.first)&lt;br /&gt;
    end&lt;br /&gt;
    total_weight*questionnaire.max_question_score&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relocate/Refactor code for sending emails to app/mailers ====&lt;br /&gt;
&lt;br /&gt;
==== Remove comments in lines 25-27 ====&lt;br /&gt;
Comments have been removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Comments.JPG‎  |frame|center|Auto selected Reviewing]]&lt;br /&gt;
&lt;br /&gt;
== response_helper.rb ==&lt;br /&gt;
response_helper.rb contains helper methods that display the questionnaires and rearrange questions so that the most frequently answered questions are at the bottom while the less frequently answered questions are at the top.&lt;br /&gt;
&lt;br /&gt;
==== Refactor construct_table method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;br /&gt;
&lt;br /&gt;
==== Refactor rearrange_questions method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Comments.JPG&amp;diff=98527</id>
		<title>File:Comments.JPG</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Comments.JPG&amp;diff=98527"/>
		<updated>2015-11-06T23:12:55Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98522</id>
		<title>CSC/ECE 517 Fall 2015/oss E1550 KMM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98522"/>
		<updated>2015-11-06T23:05:07Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Ensure score calculations utilize the weight of questions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== E1550: Refactoring response.rb and response_helper.rb ===&lt;br /&gt;
&lt;br /&gt;
== response.rb ==&lt;br /&gt;
response.rb is the class that manages the response to all rubrics in Expertiza.  if someone fills out a review form, the instance of the review form is a Response.  If someone gives feedback (a “rejoinder”) to an author, that is a Response too.  Or if someone evaluates a teammate contribution, fills out a survey, or takes a quiz, they are creating a Response.&lt;br /&gt;
&lt;br /&gt;
Note: Method display_as_html writes the HTML for displaying a rubric.  This would ordinarily be view code, but it is used by so many different views that it is done here.  Questions are written out in the order of their sequence number (anyone who creates a rubric can specify sequence numbers for questions).  After all questions are displayed, there is a blank for an additional comment.&lt;br /&gt;
&lt;br /&gt;
==== Rubric type checking via message to ResponseMap ====&lt;br /&gt;
&lt;br /&gt;
==== Ensure score calculations utilize the weight of questions ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the get_maximum_score() function is called it takes care of the weight of the question. It multiplies the weight to the score and adds it to the final score.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_maximum_score()&lt;br /&gt;
    # only count the scorable questions, only when the answer is not nil (we accept nil as answer for scorable questions, and they will not be counted towards the total score)&lt;br /&gt;
    total_weight = 0&lt;br /&gt;
    scores.each do |s|&lt;br /&gt;
      question = Question.find(s.question_id)&lt;br /&gt;
      if !s.answer.nil? &amp;amp;&amp;amp; question.is_a?(ScoredQuestion)&lt;br /&gt;
        total_weight+=question.weight&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if scores.empty?&lt;br /&gt;
      questionnaire = questionnaire_by_answer(nil)&lt;br /&gt;
    else&lt;br /&gt;
      questionnaire = questionnaire_by_answer(scores.first)&lt;br /&gt;
    end&lt;br /&gt;
    total_weight*questionnaire.max_question_score&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relocate/Refactor code for sending emails to app/mailers ====&lt;br /&gt;
&lt;br /&gt;
==== Remove comments in lines 25-27 ====&lt;br /&gt;
Comments have been removed.&lt;br /&gt;
&lt;br /&gt;
== response_helper.rb ==&lt;br /&gt;
response_helper.rb contains helper methods that display the questionnaires and rearrange questions so that the most frequently answered questions are at the bottom while the less frequently answered questions are at the top.&lt;br /&gt;
&lt;br /&gt;
==== Refactor construct_table method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;br /&gt;
&lt;br /&gt;
==== Refactor rearrange_questions method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98516</id>
		<title>CSC/ECE 517 Fall 2015/oss E1550 KMM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98516"/>
		<updated>2015-11-06T23:02:26Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Ensure score calculations utilize the weight of questions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== E1550: Refactoring response.rb and response_helper.rb ===&lt;br /&gt;
&lt;br /&gt;
== response.rb ==&lt;br /&gt;
response.rb is the class that manages the response to all rubrics in Expertiza.  if someone fills out a review form, the instance of the review form is a Response.  If someone gives feedback (a “rejoinder”) to an author, that is a Response too.  Or if someone evaluates a teammate contribution, fills out a survey, or takes a quiz, they are creating a Response.&lt;br /&gt;
&lt;br /&gt;
Note: Method display_as_html writes the HTML for displaying a rubric.  This would ordinarily be view code, but it is used by so many different views that it is done here.  Questions are written out in the order of their sequence number (anyone who creates a rubric can specify sequence numbers for questions).  After all questions are displayed, there is a blank for an additional comment.&lt;br /&gt;
&lt;br /&gt;
==== Rubric type checking via message to ResponseMap ====&lt;br /&gt;
&lt;br /&gt;
==== Ensure score calculations utilize the weight of questions ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the get_maximum_score() function is called it takes care of the weight of the question. It multiplies the weight to the score and adds it to the final score.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_maximum_score()&lt;br /&gt;
    # only count the scorable questions, only when the answer is not nil (we accept nil as answer for scorable questions, and they will not be counted towards the total score)&lt;br /&gt;
    total_weight = 0&lt;br /&gt;
    scores.each do |s|&lt;br /&gt;
      question = Question.find(s.question_id)&lt;br /&gt;
      if !s.answer.nil? &amp;amp;&amp;amp; question.is_a?(ScoredQuestion)&lt;br /&gt;
        total_weight+=question.weight&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if scores.empty?&lt;br /&gt;
      questionnaire = questionnaire_by_answer(nil)&lt;br /&gt;
    else&lt;br /&gt;
      questionnaire = questionnaire_by_answer(scores.first)&lt;br /&gt;
    end&lt;br /&gt;
    total_weight*questionnaire.max_question_score&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==== Relocate/Refactor code for sending emails to app/mailers ====&lt;br /&gt;
&lt;br /&gt;
==== Remove comments in lines 25-27 ====&lt;br /&gt;
Comments have been removed.&lt;br /&gt;
&lt;br /&gt;
== response_helper.rb ==&lt;br /&gt;
response_helper.rb contains helper methods that display the questionnaires and rearrange questions so that the most frequently answered questions are at the bottom while the less frequently answered questions are at the top.&lt;br /&gt;
&lt;br /&gt;
==== Refactor construct_table method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;br /&gt;
&lt;br /&gt;
==== Refactor rearrange_questions method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98514</id>
		<title>CSC/ECE 517 Fall 2015/oss E1550 KMM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2015/oss_E1550_KMM&amp;diff=98514"/>
		<updated>2015-11-06T22:58:58Z</updated>

		<summary type="html">&lt;p&gt;Mrohatg2: /* Ensure score calculations utilize the weight of questions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== E1550: Refactoring response.rb and response_helper.rb ===&lt;br /&gt;
&lt;br /&gt;
== response.rb ==&lt;br /&gt;
response.rb is the class that manages the response to all rubrics in Expertiza.  if someone fills out a review form, the instance of the review form is a Response.  If someone gives feedback (a “rejoinder”) to an author, that is a Response too.  Or if someone evaluates a teammate contribution, fills out a survey, or takes a quiz, they are creating a Response.&lt;br /&gt;
&lt;br /&gt;
Note: Method display_as_html writes the HTML for displaying a rubric.  This would ordinarily be view code, but it is used by so many different views that it is done here.  Questions are written out in the order of their sequence number (anyone who creates a rubric can specify sequence numbers for questions).  After all questions are displayed, there is a blank for an additional comment.&lt;br /&gt;
&lt;br /&gt;
==== Rubric type checking via message to ResponseMap ====&lt;br /&gt;
&lt;br /&gt;
==== Ensure score calculations utilize the weight of questions ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Question weights are taken into account when score is calculated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
def get_maximum_score()&lt;br /&gt;
    # only count the scorable questions, only when the answer is not nil (we accept nil as answer for scorable questions, and they will not be counted towards the total score)&lt;br /&gt;
    total_weight = 0&lt;br /&gt;
    scores.each do |s|&lt;br /&gt;
      question = Question.find(s.question_id)&lt;br /&gt;
      if !s.answer.nil? &amp;amp;&amp;amp; question.is_a?(ScoredQuestion)&lt;br /&gt;
        total_weight+=question.weight&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    if scores.empty?&lt;br /&gt;
      questionnaire = questionnaire_by_answer(nil)&lt;br /&gt;
    else&lt;br /&gt;
      questionnaire = questionnaire_by_answer(scores.first)&lt;br /&gt;
    end&lt;br /&gt;
    total_weight*questionnaire.max_question_score&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relocate/Refactor code for sending emails to app/mailers ====&lt;br /&gt;
&lt;br /&gt;
==== Remove comments in lines 25-27 ====&lt;br /&gt;
Comments have been removed.&lt;br /&gt;
&lt;br /&gt;
== response_helper.rb ==&lt;br /&gt;
response_helper.rb contains helper methods that display the questionnaires and rearrange questions so that the most frequently answered questions are at the bottom while the less frequently answered questions are at the top.&lt;br /&gt;
&lt;br /&gt;
==== Refactor construct_table method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;br /&gt;
&lt;br /&gt;
==== Refactor rearrange_questions method ====&lt;br /&gt;
Method is no longer being used in Expertiza and has been removed.&lt;/div&gt;</summary>
		<author><name>Mrohatg2</name></author>
	</entry>
</feed>