From 713c5df99bb901cd07323bf21c3d7b3bb426d6dd Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Sun, 11 Dec 2016 21:29:47 +0100
Subject: [PATCH] New version of test 10 / Sda1

---
 .../Exam/.gitignore                           |   5 +
 .../Exam/Schema/schema.sql                    |  32 +++++
 .../Exam/Schema/testdata.xml                  |  26 ++++
 .../Exam/Schema/university.xsd                |  13 ++
 .../SchemaTest/DuplicateStudyCourseId.xml     |  22 ++++
 .../SchemaTest/DuplicateStudyCourseName.xml   |  22 ++++
 .../DuplicateStudyCourseSortName.xml          |  22 ++++
 .../SchemaTest/missingStudyCourseName.xml     |  19 +++
 .../multipleStudentsDuplicateId.xml           |  23 ++++
 .../multipleStudentsDuplicateMail.xml         |  22 ++++
 .../Exam/SchemaTest/validMissingShortName.xml |  18 +++
 .../Exam/SchemaTest/validMultipleStudents.xml |  17 +++
 .../SchemaTest/validMultipleStudyCourses.xml  |  18 +++
 ...alidMultipleStudyCoursesMissingUniques.xml |  16 +++
 .../Exam/SchemaTest/validStudent.xml          |  12 ++
 .../Exam/SchemaTest/validStudyCourse.xml      |  14 ++
 .../Exam/SchemaTest/validStudyCourseRef.xml   |  19 +++
 .../Exam/SchemaTest/wrongProgramName.xml      |  19 +++
 .../Exam/SchemaTest/wrongStudyCourseRef.xml   |  24 ++++
 .../University_Sql2Xsd_xmlexport/Exam/pom.xml | 122 ++++++++++++++++++
 .../mi/sda1/sql2catalog/Helper.java           |  18 +++
 .../mi/sda1/sql2catalog/Rdbms2Xml.java        |  63 +++++++++
 .../mi/sda1/sql2catalog/RdbmsAccess.java      |  18 +++
 .../Exam/src/main/resources/log4j2.xml        |  21 +++
 .../mi/sda1/exam/xsd/SchemaTest.java          |  26 ++++
 .../Solution/.gitignore                       |   5 +
 .../Solution/Doc/a.xhtml                      |  64 +++++++++
 .../Solution/Doc/b.xhtml                      |  40 ++++++
 .../Solution/Doc/c.xhtml                      |  62 +++++++++
 .../Solution/Schema/alternate.xml             |  27 ++++
 .../Solution/Schema/schema.sql                |  33 +++++
 .../Solution/Schema/testdata.xml              |  25 ++++
 .../Solution/Schema/university.xsd            |  98 ++++++++++++++
 .../SchemaTest/DuplicateStudyCourseId.xml     |  22 ++++
 .../SchemaTest/DuplicateStudyCourseName.xml   |  22 ++++
 .../DuplicateStudyCourseSortName.xml          |  22 ++++
 .../SchemaTest/missingStudyCourseName.xml     |  19 +++
 .../multipleStudentsDuplicateId.xml           |  23 ++++
 .../multipleStudentsDuplicateMail.xml         |  22 ++++
 .../SchemaTest/validMissingShortName.xml      |  18 +++
 .../SchemaTest/validMultipleStudents.xml      |  17 +++
 .../SchemaTest/validMultipleStudyCourses.xml  |  18 +++
 ...alidMultipleStudyCoursesMissingUniques.xml |  16 +++
 .../Solution/SchemaTest/validStudent.xml      |  12 ++
 .../Solution/SchemaTest/validStudyCourse.xml  |  14 ++
 .../SchemaTest/validStudyCourseRef.xml        |  19 +++
 .../Solution/SchemaTest/wrongProgramName.xml  |  19 +++
 .../SchemaTest/wrongStudyCourseRef.xml        |  24 ++++
 .../Solution/pom.xml                          | 122 ++++++++++++++++++
 .../mi/sda1/sql2catalog/Helper.java           |  18 +++
 .../mi/sda1/sql2catalog/Messages.java         |  22 ++++
 .../mi/sda1/sql2catalog/Rdbms2Xml.java        |  77 +++++++++++
 .../mi/sda1/sql2catalog/RdbmsAccess.java      |  65 ++++++++++
 .../mi/sda1/sql2catalog/messages.properties   |  11 ++
 .../Solution/src/main/resources/log4j2.xml    |  21 +++
 .../mi/sda1/exam/xsd/SchemaTest.java          |  26 ++++
 56 files changed, 1634 insertions(+)
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/.gitignore
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/schema.sql
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/testdata.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/university.xsd
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseId.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseName.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseSortName.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/missingStudyCourseName.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/multipleStudentsDuplicateId.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/multipleStudentsDuplicateMail.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMissingShortName.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudents.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudyCourses.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudyCoursesMissingUniques.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudent.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudyCourse.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudyCourseRef.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/wrongProgramName.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/wrongStudyCourseRef.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/pom.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/resources/log4j2.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/.gitignore
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/a.xhtml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/b.xhtml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/c.xhtml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/alternate.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/schema.sql
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/testdata.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/university.xsd
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseId.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseName.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseSortName.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/missingStudyCourseName.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/multipleStudentsDuplicateId.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/multipleStudentsDuplicateMail.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMissingShortName.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudents.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudyCourses.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudyCoursesMissingUniques.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudent.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudyCourse.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudyCourseRef.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/wrongProgramName.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/wrongStudyCourseRef.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/pom.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Messages.java
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/messages.properties
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/resources/log4j2.xml
 create mode 100644 Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java

diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/.gitignore b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/.gitignore
new file mode 100644
index 000000000..660be2a5f
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/.gitignore
@@ -0,0 +1,5 @@
+.project
+.classpath
+/.settings/
+/target/
+A1.log
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/schema.sql b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/schema.sql
new file mode 100644
index 000000000..ca376bbdd
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/schema.sql
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS Student;
+DROP TABLE IF EXISTS StudyCourse;
+
+CREATE TABLE StudyCourse (
+   id INTEGER NOT NULL PRIMARY KEY
+  ,name VARCHAR(255) NOT NULL UNIQUE
+  ,shortName CHAR(3) UNIQUE
+  ,program CHAR(1) /* Bachelor or Master program? */
+  ,CHECK (program IN (NULL, 'B', 'M')) /* Mysql does not honour CHECK constraints, but lets pretend it does! */
+);
+
+CREATE TABLE Student (
+   id INTEGER NOT NULL PRIMARY KEY
+  ,fullName VARCHAR(255) NOT NULL
+  ,email VARCHAR(255) NOT NULL UNIQUE
+  ,studyCourse INTEGER
+  ,FOREIGN KEY(studyCourse) REFERENCES StudyCourse(id)
+);
+
+-- example data corresponding to university.xml --
+
+INSERT INTO StudyCourse VALUES (1, 'Mobile Media', 'MMB', 'B');
+INSERT INTO StudyCourse VALUES (2, 'Computer Science in Media', NULL, 'M');
+INSERT INTO StudyCourse VALUES (3, 'Dumb Stuff', NULL, NULL);
+
+INSERT INTO Student VALUES(33, 'Jim Bone', 'bone@foo.org', NULL);
+INSERT INTO Student VALUES(40, 'Tracy Adams', 'adams@security.com', 2);
+
+-- Selects --
+
+SELECT * FROM Student;
+SELECT * FROM StudyCourse;
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/testdata.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/testdata.xml
new file mode 100644
index 000000000..20991ed37
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/testdata.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="university.xsd">
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Computer Science in Media</name>
+        </studyCourse>
+        <studyCourse id="3">
+            <name>Dumb Stuff</name>
+        </studyCourse>
+    </studyCourses>
+    <students>
+        <student id="33">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+        <student id="40" studyCourse="2">
+            <fullName>Tracy Adams</fullName>
+            <email>adams@security.com</email>
+        </student>
+    </students>
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/university.xsd b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/university.xsd
new file mode 100644
index 000000000..34dce2d8b
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/Schema/university.xsd
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified"
+    vc:minVersion="1.1">
+    
+    
+    
+    <xs:element name="university">
+        
+    </xs:element>
+    
+    
+</xs:schema>
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseId.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseId.xml
new file mode 100644
index 000000000..c73f86767
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseId.xml
@@ -0,0 +1,22 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="1" program="M">
+            <name>Computer Science in Media</name>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
+
+
+<!-- Marking information, please ignore -->
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validMultipleStudyCourses.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseName.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseName.xml
new file mode 100644
index 000000000..22607ff73
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseName.xml
@@ -0,0 +1,22 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Mobile Media</name>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
+
+
+<!-- Marking information, please ignore -->
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validMultipleStudyCourses.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseSortName.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseSortName.xml
new file mode 100644
index 000000000..d84818c51
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/DuplicateStudyCourseSortName.xml
@@ -0,0 +1,22 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Computer Science in Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
+
+<!-- Marking information, please ignore -->
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validMultipleStudyCourses.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/missingStudyCourseName.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/missingStudyCourseName.xml
new file mode 100644
index 000000000..c477b39e3
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/missingStudyCourseName.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
+
+
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validStudyCourse.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/multipleStudentsDuplicateId.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/multipleStudentsDuplicateId.xml
new file mode 100644
index 000000000..23d2a872c
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/multipleStudentsDuplicateId.xml
@@ -0,0 +1,23 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses/>
+    
+    <students>
+        <student id="33">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+        
+        <student id="33">
+            <fullName>Tracy Adams</fullName>
+            <email>adams@security.com</email>
+        </student>
+    </students>
+</university>
+
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validMultipleStudents.xml"
+?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/multipleStudentsDuplicateMail.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/multipleStudentsDuplicateMail.xml
new file mode 100644
index 000000000..6831c1f3f
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/multipleStudentsDuplicateMail.xml
@@ -0,0 +1,22 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses/>
+    
+    <students>
+        <student id="33">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+
+        <student id="34">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+    </students>
+</university>
+
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    "validMultipleStudents.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMissingShortName.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMissingShortName.xml
new file mode 100644
index 000000000..2e356a495
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMissingShortName.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Computer Science in Media</name>
+        </studyCourse>
+    </studyCourses>
+
+    <students/>
+    
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudents.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudents.xml
new file mode 100644
index 000000000..55fb47240
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudents.xml
@@ -0,0 +1,17 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses/>
+    
+    <students>
+        <student id="33">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+
+        <student id="34">
+            <fullName>Tracy Adams</fullName>
+            <email>adams@security.com</email>
+        </student>
+    </students>
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudyCourses.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudyCourses.xml
new file mode 100644
index 000000000..d3996b14c
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudyCourses.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Computer Science in Media</name>
+            <shortName>CSM</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudyCoursesMissingUniques.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudyCoursesMissingUniques.xml
new file mode 100644
index 000000000..acc63d291
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validMultipleStudyCoursesMissingUniques.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Computer Science in Media</name>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudent.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudent.xml
new file mode 100644
index 000000000..17c9ad049
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudent.xml
@@ -0,0 +1,12 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses/>
+    
+    <students>
+        <student id="33">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+    </students>
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudyCourse.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudyCourse.xml
new file mode 100644
index 000000000..9b4d7a0ab
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudyCourse.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudyCourseRef.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudyCourseRef.xml
new file mode 100644
index 000000000..92dc17c2d
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/validStudyCourseRef.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students>
+        <student id="33" studyCourse="1">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+    </students>
+    
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/wrongProgramName.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/wrongProgramName.xml
new file mode 100644
index 000000000..ccf9a22ea
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/wrongProgramName.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="X">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
+
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validStudyCourse.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/wrongStudyCourseRef.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/wrongStudyCourseRef.xml
new file mode 100644
index 000000000..7017cbc0e
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/SchemaTest/wrongStudyCourseRef.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students>
+        <student id="33" studyCourse="11">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+    </students>
+    
+</university>
+
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validStudyCourseRef.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/pom.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/pom.xml
new file mode 100644
index 000000000..284e5c009
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/pom.xml
@@ -0,0 +1,122 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>de.hdm-stuttgart.mi.sda1</groupId>
+	<artifactId>rdbmsstudent2xml</artifactId>
+	<version>0.8</version>
+	<packaging>jar</packaging>
+
+	<name>rdbmsstudent2xml</name>
+
+	<url>http://www.mi.hdm-stuttgart.de/freedocs</url>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<repositories>
+		<repository>
+			<id>hdm-mi-internal-maven-repo</id>
+			<url>https://maven.mi.hdm-stuttgart.de/artifacts</url>
+		</repository>
+	</repositories>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.opengis.cite.xerces</groupId>
+			<artifactId>xercesImpl-xsd11</artifactId>
+			<version>2.12-beta-r1667115</version>
+		</dependency>
+	
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<version>2.1</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<version>2.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.jdom</groupId>
+			<artifactId>jdom2</artifactId>
+			<version>2.0.6</version>
+		</dependency>
+
+		<dependency>
+			<groupId>jaxen</groupId>
+			<artifactId>jaxen</artifactId>
+			<version>1.1.6</version>
+		</dependency>
+
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<version>5.1.34</version>
+		</dependency>
+
+		<dependency>
+			<groupId>de.hdm_stuttgart.mi.exam</groupId>
+			<artifactId>unitmarking</artifactId>
+			<version>0.9</version>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<plugins>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.1</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<version>2.10.1</version>
+				<configuration />
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>2.3</version>
+				<configuration>
+					<transformers>
+						<transformer
+							implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+							<manifestEntries>
+								<Main-Class>de.hdm_stuttgart.mi.sda1.catalog2sax.App</Main-Class>
+							</manifestEntries>
+						</transformer>
+					</transformers>
+				</configuration>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+		</plugins>
+	</build>
+</project>
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java
new file mode 100644
index 000000000..f78795876
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java
@@ -0,0 +1,18 @@
+package de.hdm_stuttgart.mi.sda1.sql2catalog;
+
+/**
+ * Project wide helper methods
+ *
+ */
+public class Helper {
+   /**
+    * Write message to stderr and exit with given error code
+    * @param errMsg
+    * @param errorCode
+    */
+   public static void exitWithErrorMessage(final String errMsg, int errorCode) {
+      System.err.println(errMsg);
+      System.exit(errorCode);
+   }
+
+}
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java
new file mode 100644
index 000000000..3395c420d
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java
@@ -0,0 +1,63 @@
+package de.hdm_stuttgart.mi.sda1.sql2catalog;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+import org.jdom2.Attribute;
+import org.jdom2.Element;
+import org.jdom2.Namespace;
+import org.jdom2.output.Format;
+import org.jdom2.output.XMLOutputter;
+
+/**
+ * A simple SAX parser demo
+ * 
+ */
+public class Rdbms2Xml {
+
+   /**
+    * @param args Unused
+    */
+   public static void main(String[] args) {
+      
+      // Register Driver
+      final String sqlDriverClassName = "com.mysql.jdbc.Driver"; 
+      try {
+         Class.forName(sqlDriverClassName);
+      } catch (ClassNotFoundException e) {
+         Helper.exitWithErrorMessage("Unable to register driver class '" + sqlDriverClassName + "'", 1);
+      }
+
+      // Opening a JDBC connection
+      // 
+      Connection conn = null;
+      
+      final String jdbcConnectionUrl = "jdbc:mysql://localhost:3306/hdm"; 
+      final String userName = "hdmuser"; 
+      try {
+         conn = DriverManager.getConnection(jdbcConnectionUrl, userName, "XYZ"); 
+      } catch (SQLException e) {
+         Helper.exitWithErrorMessage("Unable to connect as user '" + userName + "' to '" + 
+               jdbcConnectionUrl + "'", 1); 
+      }
+      final Namespace xsiNS = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
+      final Element universityElement = new Element("university");
+      final Attribute noNamespaceSchemaLocation = new Attribute("noNamespaceSchemaLocation", "university.xsd", xsiNS);
+      universityElement.setAttribute(noNamespaceSchemaLocation);
+
+      final Element studyCourses = new Element("studyCourses");
+      universityElement.addContent(studyCourses);
+      final Element students = new Element("students");
+      universityElement.addContent(students);
+      
+      // Write XML content to standard output
+      XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
+      try {
+         outputter.output(universityElement, System.out);
+      } catch (IOException e) {
+         Helper.exitWithErrorMessage("Unable to write XML data:" + e.getLocalizedMessage(), 1);
+      }
+   }
+}
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java
new file mode 100644
index 000000000..740a996a2
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java
@@ -0,0 +1,18 @@
+package de.hdm_stuttgart.mi.sda1.sql2catalog;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+/**
+ * Reading study course and student data
+ *
+ */
+public class RdbmsAccess {
+	
+	/**
+	 * @param conn Destination RDBMS
+	 */
+	public RdbmsAccess(final Connection conn) {
+	}
+
+}
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/resources/log4j2.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/resources/log4j2.xml
new file mode 100644
index 000000000..33cda01bd
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/main/resources/log4j2.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <File name="A1" fileName="A1.log" append="false">
+            <PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+
+        <!-- You my want to define class or package level per-logger rules -->
+        <Logger name="de.hdm_stuttgart.mi.sda1.catalog2sax.App" level="warn">
+            <AppenderRef ref="A1"/>
+        </Logger>
+        <Root level="warn">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java
new file mode 100644
index 000000000..b589e8b6c
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Exam/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java
@@ -0,0 +1,26 @@
+package de.hdm_stuttgart.mi.sda1.exam.xsd;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation;
+
+/**
+ * Unit test for an XML instance set.
+ */
+public class SchemaTest {
+    /**
+     * Testing a suite of XML instances.
+     */
+    @SuppressWarnings("static-method")
+	@Test
+    public void testXmlInstanceSet() {
+       
+       final InstanceSetEvaluation ise =
+    		   new InstanceSetEvaluation("SchemaTest", "Schema/university.xsd");
+       
+       System.out.println(ise.getMessages());
+
+       Assert.assertTrue(ise.getErrorMessages(), ise.allTestsSucceeded);
+    }
+}
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/.gitignore b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/.gitignore
new file mode 100644
index 000000000..660be2a5f
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/.gitignore
@@ -0,0 +1,5 @@
+.project
+.classpath
+/.settings/
+/target/
+A1.log
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/a.xhtml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/a.xhtml
new file mode 100644
index 000000000..25f79a19e
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/a.xhtml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE body>
+<body xml:lang="en"
+xmlns="http://www.w3.org/1999/xhtml"><h2>Objective</h2><p>Transforming a
+relational into an XML schema</p><h2>Preparations / Description</h2><ol>
+    <li>Download and unzip <b>exam.zip</b> from the above link. Import the
+    resulting <strong>Exam</strong> folder as a Maven project into your
+    workspace.</li>
+
+    <li><p>Your imported project contains:</p><dl>
+        <dt><code>Schema/schema.sql</code></dt>
+
+        <dd><ul>
+            <li>A relational schema consisting of two related tables
+            <code>StudyCourse</code> and <code>Student</code> describing
+            students to be enrolled in study courses.</li>
+
+            <li><code>INSERT</code> statements providing sample data.</li>
+          </ul></dd>
+
+        <dt><code>Schema/testdata.xml</code></dt>
+
+        <dd>An XML file corresponding to the above relational schema
+        containing sample data.</dd>
+
+        <dt><code>Schema/university.xsd</code></dt>
+
+        <dd>A fake / skeleton XML schema to be extended.</dd>
+      </dl></li>
+  </ol><h2>ToDo</h2><p>Complete <code>Schema/university.xsd</code> to match
+all integrity constraints of the corresponding relational
+<code>Schema/schema.sql</code>. The XML sample
+<code>Schema/testdata.xml</code> provides structural help. Examine the two
+<code>CREATE TABLE</code> statements thoroughly in order to find all data
+integrity constraints.</p><p>The SchemaTest sub directory contains two types
+of Xml sample data already referencing
+<code>Schema/university.xsd</code>:</p><ul>
+    <li>Files starting with prefix "valid" must be valid with respect to your
+    schema.</li>
+
+    <li><p>The remaining files do contain processing instructions
+    like:</p><pre>&lt;?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validStudyCourse.xml" ?&gt;</pre><p>You can ignore
+    these. When your schema matures run
+    de.hdm_stuttgart.mi.sda1.exam.xsd.SchemaTest as Junit test. As a result
+    these Xml files are being checked for the expected valid / invalid
+    behaviour with respect to your <code>Schema/university.xsd</code> schema
+    resulting in an output similar to:</p><pre>++Instance SchemaTest/DuplicateStudyCourseName.xml: Gaining 1 point.
+++Instance SchemaTest/missingStudyCourseName.xml: Gaining 1 point.
+++Instance SchemaTest/DuplicateStudyCourseSortName.xml: Gaining 1 point.
+++Instance SchemaTest/multipleStudentsDuplicateId.xml: Gaining 1 point.
+<b>--Instance SchemaTest/wrongStudyCourseRef.xml is expected to be invalid! Missing 1 point.</b>
+++Instance SchemaTest/wrongProgramName.xml: Gaining 1 point.
+++Instance SchemaTest/DuplicateStudyCourseId.xml: Gaining 1 point.
+++Instance SchemaTest/multipleStudentsDuplicateMail.xml: Gaining 1 point.
+7 of 8 points have been reached</pre><p>In the given example
+    <b>SchemaTest/wrongStudyCourseRef.xml</b> is (falsely) valid with respect
+    to <b><code>Schema/university.xsd</code></b> thus loosing 1 point. In
+    cases like this one please correct your schema to gain all
+    points.</p></li>
+  </ul><p>On completion export your <b>complete</b> project as a
+<code>.zip</code> file and upload it to the exam system.</p></body>
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/b.xhtml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/b.xhtml
new file mode 100644
index 000000000..b353c0782
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/b.xhtml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE body>
+<body xml:lang="en"
+xmlns="http://www.w3.org/1999/xhtml"><h2>Objective</h2><p>Evaluation of an
+alternate XML structure</p><h2>Preparations / Description</h2><p>In case you
+did not work on the first exercise follow the instructions given there to
+start from an initial project.</p><p>A developer promises getting rid of
+required <code>&lt;xsd:keyref ... &gt;</code> definitions from the first
+exercise completely by proposing the following structure:</p><pre>&lt;university&gt;
+    &lt;studyCourses&gt;
+        &lt;studyCourse id="1" program="B"&gt;
+            &lt;name&gt;Mobile Media&lt;/name&gt;
+            &lt;shortName&gt;MMB&lt;/shortName&gt;
+            &lt;students/&gt;
+        &lt;/studyCourse&gt;
+        &lt;studyCourse id="2" program="M"&gt;
+            &lt;name&gt;Computer Science in Media&lt;/name&gt;
+            &lt;students&gt;
+                &lt;student id="40" studyCourse="2"&gt;
+                    &lt;fullName&gt;Tracy Adams&lt;/fullName&gt;
+                    &lt;email&gt;adams@security.com&lt;/email&gt;
+                &lt;/student&gt;
+            &lt;/students&gt;
+        &lt;/studyCourse&gt;
+        &lt;studyCourse id="3"&gt;
+            &lt;name&gt;Dumb Stuff&lt;/name&gt;
+            &lt;students&gt;
+                &lt;student id="33"&gt;
+                    &lt;fullName&gt;Jim Bone&lt;/fullName&gt;
+                    &lt;email&gt;bone@foo.org&lt;/email&gt;
+                &lt;/student&gt;
+            &lt;/students&gt;
+        &lt;/studyCourse&gt;
+    &lt;/studyCourses&gt;
+&lt;/university&gt;</pre><p>Since each student can only be enrolled in one
+study course the above scheme uses a composition.</p><h2>ToDo</h2><p>Answer
+the question whether the proposed structure may indeed implement the
+relational constraints being imposed by <code>Schema/schema.sql</code>.
+Explain your result. You won't receive any points for just stating either yes
+or no.</p></body>
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/c.xhtml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/c.xhtml
new file mode 100644
index 000000000..480f123a0
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Doc/c.xhtml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE body>
+<body xml:lang="en"
+xmlns="http://www.w3.org/1999/xhtml"><h2>Objective</h2><p>Exporting relational
+data to XML.</p><h2>Preparations / Description</h2><ol>
+    <li>In case you did not work on the first exercise follow the instructions
+    given there to start from an initial project.</li>
+
+    <li><p>Your imported project contains:</p><dl>
+        <dt><code>Schema/schema.sql</code></dt>
+
+        <dd><ul>
+            <li>A relational schema consisting of two related tables
+            <code>StudyCourse</code> and <code>Student</code> describing
+            students to be enrolled in study courses.</li>
+
+            <li><code>INSERT</code> statements providing sample data.</li>
+          </ul></dd>
+
+        <dt><code>de.hdm_stuttgart.mi/sda1.sql2catalog.Rdbms2Xml</code></dt>
+
+        <dd><p>Executing this driver class yet only produces:</p><pre>&lt;university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:noNamespaceSchemaLocation="university.xsd"&gt;
+  &lt;studyCourses /&gt;
+  &lt;students /&gt;
+&lt;/university&gt;</pre></dd>
+      </dl></li>
+  </ol><h2>ToDo</h2><p>Extend
+<b>de.hdm_stuttgart.mi/sda1.sql2catalog.Rdbms2Xml</b> to generate suitable XML
+data from relational sources. Feeding a database server with INSERTs from
+Schema/schema.sql shall for example be exported to
+Schema/testdata.xml:</p><pre>&lt;university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="university.xsd"&gt;
+  &lt;studyCourses&gt;
+    &lt;studyCourse id="1" program="B"&gt;
+      &lt;name&gt;Mobile Media&lt;/name&gt;
+      &lt;shortName&gt;MMB&lt;/shortName&gt;
+    &lt;/studyCourse&gt;
+    &lt;studyCourse id="2" program="M"&gt;
+      &lt;name&gt;Computer Science in Media&lt;/name&gt;
+    &lt;/studyCourse&gt;
+    &lt;studyCourse id="3"&gt;
+      &lt;name&gt;Dumb Stuff&lt;/name&gt;
+    &lt;/studyCourse&gt;
+  &lt;/studyCourses&gt;
+  &lt;students&gt;
+    &lt;student id="33"&gt;
+      &lt;fullName&gt;Jim Bone&lt;/fullName&gt;
+      &lt;email&gt;bone@foo.org&lt;/email&gt;
+    &lt;/student&gt;
+    &lt;student id="40" studyCourse="2"&gt;
+      &lt;fullName&gt;Tracy Adams&lt;/fullName&gt;
+      &lt;email&gt;adams@security.com&lt;/email&gt;
+    &lt;/student&gt;
+  &lt;/students&gt;
+&lt;/university&gt;</pre><p>But off course your implementation is expected to
+create respective XML exports for arbitrary relational data being consistent
+with the given relational schema.</p><p>On completion export your
+<b>complete</b> project as a <code>.zip</code> file and upload it to the exam
+system use the first exercise. Use the input text field below to indicate
+whether or not you worked on the current exercise.</p><p>Hint: Only the last
+uploaded .zip file will be regarded with respect to marking for all
+exercises.</p></body>
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/alternate.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/alternate.xml
new file mode 100644
index 000000000..844bd71ce
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/alternate.xml
@@ -0,0 +1,27 @@
+<university>
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+            <students/>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Computer Science in Media</name>
+            <students>
+                <student id="40" studyCourse="2">
+                    <fullName>Tracy Adams</fullName>
+                    <email>adams@security.com</email>
+                </student>
+            </students>
+        </studyCourse>
+        <studyCourse id="3">
+            <name>Dumb Stuff</name>
+            <students>
+                <student id="33">
+                    <fullName>Jim Bone</fullName>
+                    <email>bone@foo.org</email>
+                </student>
+            </students>
+        </studyCourse>
+    </studyCourses>
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/schema.sql b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/schema.sql
new file mode 100644
index 000000000..2efc0eac8
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/schema.sql
@@ -0,0 +1,33 @@
+DROP TABLE IF EXISTS Student;
+DROP TABLE IF EXISTS StudyCourse;
+
+CREATE TABLE StudyCourse (
+   id INTEGER NOT NULL PRIMARY KEY
+  ,name VARCHAR(255) NOT NULL UNIQUE
+  ,shortName CHAR(3) UNIQUE
+  ,program CHAR(1) /* Bachelor or Master program? */
+  ,CHECK (program IN (NULL, 'B', 'M')) /* Mysql does not honour CHECK constraints, but lets pretend it does! */
+);
+
+CREATE TABLE Student (
+   id INTEGER NOT NULL PRIMARY KEY
+  ,fullName VARCHAR(255) NOT NULL
+  ,email VARCHAR(255) NOT NULL
+  ,UNIQUE(email)
+  ,studyCourse INTEGER
+  ,FOREIGN KEY(studyCourse) REFERENCES StudyCourse(id)
+);
+
+-- example data corresponding to university.xml --
+
+INSERT INTO StudyCourse VALUES (1, 'Mobile Media', 'MMB', 'B');
+INSERT INTO StudyCourse VALUES (2, 'Computer Science in Media', NULL, 'M');
+INSERT INTO StudyCourse VALUES (3, 'Dumb Stuff', NULL, NULL);
+
+INSERT INTO Student VALUES(33, 'Jim Bone', 'bone@foo.org', NULL);
+INSERT INTO Student VALUES(40, 'Tracy Adams', 'adams@security.com', 2);
+
+-- Selects --
+
+SELECT * FROM Student;
+SELECT * FROM StudyCourse;
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/testdata.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/testdata.xml
new file mode 100644
index 000000000..0dca7c9eb
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/testdata.xml
@@ -0,0 +1,25 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="university.xsd">
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Computer Science in Media</name>
+        </studyCourse>
+        <studyCourse id="3">
+            <name>Dumb Stuff</name>
+        </studyCourse>
+    </studyCourses>
+    <students>
+        <student id="33">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+        <student id="40" studyCourse="2">
+            <fullName>Tracy Adams</fullName>
+            <email>adams@security.com</email>
+        </student>
+    </students>
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/university.xsd b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/university.xsd
new file mode 100644
index 000000000..cf34c992c
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/Schema/university.xsd
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified"
+    vc:minVersion="1.1">
+    
+    <xs:element name="studyCourse">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="name" type="xs:string"/>
+                <xs:element name="shortName" minOccurs="0">
+                    <xs:simpleType>
+                        <xs:restriction base="xs:string">
+                            <xs:maxLength value="3"/>
+                        </xs:restriction>
+                    </xs:simpleType>
+                </xs:element>
+            </xs:sequence>
+            <xs:attribute name="id" type="xs:int" use="required"/>
+            <xs:attribute name="program">
+                <xs:simpleType>
+                    <xs:restriction base="xs:string">
+                        <xs:enumeration value="B"/>
+                        <xs:enumeration value="M"/>
+                    </xs:restriction>
+                </xs:simpleType>
+            </xs:attribute>
+        </xs:complexType>       
+    </xs:element>
+        
+    <xs:element name="studyCourses">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="studyCourse" minOccurs="0" maxOccurs="unbounded"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+    
+    <xs:element name="student">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="fullName" type="xs:string"/>
+                <xs:element name="email" type="xs:string"/>
+            </xs:sequence>
+            <xs:attribute name="id" type="xs:int" use="required"/>
+            <xs:attribute name="studyCourse" type="xs:int" use="optional"/>
+        </xs:complexType>
+    </xs:element>
+    
+    <xs:element name="students">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="student" minOccurs="0" maxOccurs="unbounded"/>
+            </xs:sequence>
+        </xs:complexType>
+        <xs:key name="uniqueStudentId">
+            <xs:selector xpath="student"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        
+        <xs:key name="uniqueStudentEmail">
+            <xs:selector xpath="student"/>
+            <xs:field xpath="email"/>
+        </xs:key>
+        
+    </xs:element>
+    
+    <xs:element name="university">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element ref="studyCourses"/>
+                <xs:element ref="students"/>
+            </xs:sequence>
+        </xs:complexType>
+        
+        <xs:key name="keyIdStudyCourse">
+            <xs:selector xpath="studyCourses/studyCourse"/>
+            <xs:field xpath="@id"/>
+        </xs:key>
+        
+        <xs:unique name="uniqueNameStudyCourse">
+            <xs:selector xpath="studyCourses/studyCourse"/>
+            <xs:field xpath="name"/>
+        </xs:unique>
+        
+        <xs:unique name="uniqueShortNameStudyCourse">
+            <xs:selector xpath="studyCourses/studyCourse"/>
+            <xs:field xpath="shortName"/>
+        </xs:unique>
+        
+        <xs:keyref  refer="keyIdStudyCourse" name="studyCourse2student">
+            <xs:selector  xpath="students/student"/>
+            <xs:field  xpath="@studyCourse"/>
+        </xs:keyref>
+        
+    </xs:element>
+    
+    
+</xs:schema>
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseId.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseId.xml
new file mode 100644
index 000000000..c73f86767
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseId.xml
@@ -0,0 +1,22 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="1" program="M">
+            <name>Computer Science in Media</name>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
+
+
+<!-- Marking information, please ignore -->
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validMultipleStudyCourses.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseName.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseName.xml
new file mode 100644
index 000000000..22607ff73
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseName.xml
@@ -0,0 +1,22 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Mobile Media</name>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
+
+
+<!-- Marking information, please ignore -->
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validMultipleStudyCourses.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseSortName.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseSortName.xml
new file mode 100644
index 000000000..d84818c51
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/DuplicateStudyCourseSortName.xml
@@ -0,0 +1,22 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Computer Science in Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
+
+<!-- Marking information, please ignore -->
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validMultipleStudyCourses.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/missingStudyCourseName.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/missingStudyCourseName.xml
new file mode 100644
index 000000000..c477b39e3
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/missingStudyCourseName.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
+
+
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validStudyCourse.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/multipleStudentsDuplicateId.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/multipleStudentsDuplicateId.xml
new file mode 100644
index 000000000..23d2a872c
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/multipleStudentsDuplicateId.xml
@@ -0,0 +1,23 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses/>
+    
+    <students>
+        <student id="33">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+        
+        <student id="33">
+            <fullName>Tracy Adams</fullName>
+            <email>adams@security.com</email>
+        </student>
+    </students>
+</university>
+
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validMultipleStudents.xml"
+?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/multipleStudentsDuplicateMail.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/multipleStudentsDuplicateMail.xml
new file mode 100644
index 000000000..6831c1f3f
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/multipleStudentsDuplicateMail.xml
@@ -0,0 +1,22 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses/>
+    
+    <students>
+        <student id="33">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+
+        <student id="34">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+    </students>
+</university>
+
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    "validMultipleStudents.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMissingShortName.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMissingShortName.xml
new file mode 100644
index 000000000..2e356a495
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMissingShortName.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Computer Science in Media</name>
+        </studyCourse>
+    </studyCourses>
+
+    <students/>
+    
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudents.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudents.xml
new file mode 100644
index 000000000..55fb47240
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudents.xml
@@ -0,0 +1,17 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses/>
+    
+    <students>
+        <student id="33">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+
+        <student id="34">
+            <fullName>Tracy Adams</fullName>
+            <email>adams@security.com</email>
+        </student>
+    </students>
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudyCourses.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudyCourses.xml
new file mode 100644
index 000000000..d3996b14c
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudyCourses.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Computer Science in Media</name>
+            <shortName>CSM</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudyCoursesMissingUniques.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudyCoursesMissingUniques.xml
new file mode 100644
index 000000000..acc63d291
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validMultipleStudyCoursesMissingUniques.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+        </studyCourse>
+        <studyCourse id="2" program="M">
+            <name>Computer Science in Media</name>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudent.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudent.xml
new file mode 100644
index 000000000..17c9ad049
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudent.xml
@@ -0,0 +1,12 @@
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses/>
+    
+    <students>
+        <student id="33">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+    </students>
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudyCourse.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudyCourse.xml
new file mode 100644
index 000000000..9b4d7a0ab
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudyCourse.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudyCourseRef.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudyCourseRef.xml
new file mode 100644
index 000000000..92dc17c2d
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/validStudyCourseRef.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students>
+        <student id="33" studyCourse="1">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+    </students>
+    
+</university>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/wrongProgramName.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/wrongProgramName.xml
new file mode 100644
index 000000000..ccf9a22ea
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/wrongProgramName.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="X">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students/>
+    
+</university>
+
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validStudyCourse.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/wrongStudyCourseRef.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/wrongStudyCourseRef.xml
new file mode 100644
index 000000000..7017cbc0e
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/SchemaTest/wrongStudyCourseRef.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../Schema/university.xsd">
+    
+    <studyCourses>
+        <studyCourse id="1" program="B">
+            <name>Mobile Media</name>
+            <shortName>MMB</shortName>
+        </studyCourse>
+    </studyCourses>
+    <students>
+        <student id="33" studyCourse="11">
+            <fullName>Jim Bone</fullName>
+            <email>bone@foo.org</email>
+        </student>
+    </students>
+    
+</university>
+
+<?xmlTest
+    points = "1"
+    expectedToBeValid = "false" 
+    preconditionValid = "validStudyCourseRef.xml" ?>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/pom.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/pom.xml
new file mode 100644
index 000000000..149a0c847
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/pom.xml
@@ -0,0 +1,122 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>de.hdm-stuttgart.mi.sda1</groupId>
+	<artifactId>rdbmsstudent2xml_solution</artifactId>
+	<version>0.8</version>
+	<packaging>jar</packaging>
+
+	<name>rdbmsstudent2xml_solution</name>
+
+	<url>http://www.mi.hdm-stuttgart.de/freedocs</url>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<repositories>
+		<repository>
+			<id>hdm-mi-internal-maven-repo</id>
+			<url>https://maven.mi.hdm-stuttgart.de/artifacts</url>
+		</repository>
+	</repositories>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.opengis.cite.xerces</groupId>
+			<artifactId>xercesImpl-xsd11</artifactId>
+			<version>2.12-beta-r1667115</version>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<version>2.1</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<version>2.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.jdom</groupId>
+			<artifactId>jdom2</artifactId>
+			<version>2.0.5</version>
+		</dependency>
+
+		<dependency>
+			<groupId>jaxen</groupId>
+			<artifactId>jaxen</artifactId>
+			<version>1.1.6</version>
+		</dependency>
+
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<version>5.1.34</version>
+		</dependency>
+
+		<dependency>
+			<groupId>de.hdm_stuttgart.mi.exam</groupId>
+			<artifactId>unitmarking</artifactId>
+			<version>0.9</version>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<plugins>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.1</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<version>2.10.1</version>
+				<configuration />
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-shade-plugin</artifactId>
+				<version>2.3</version>
+				<configuration>
+					<transformers>
+						<transformer
+							implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+							<manifestEntries>
+								<Main-Class>de.hdm_stuttgart.mi.sda1.catalog2sax.App</Main-Class>
+							</manifestEntries>
+						</transformer>
+					</transformers>
+				</configuration>
+				<executions>
+					<execution>
+						<phase>package</phase>
+						<goals>
+							<goal>shade</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+
+		</plugins>
+	</build>
+</project>
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java
new file mode 100644
index 000000000..f78795876
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Helper.java
@@ -0,0 +1,18 @@
+package de.hdm_stuttgart.mi.sda1.sql2catalog;
+
+/**
+ * Project wide helper methods
+ *
+ */
+public class Helper {
+   /**
+    * Write message to stderr and exit with given error code
+    * @param errMsg
+    * @param errorCode
+    */
+   public static void exitWithErrorMessage(final String errMsg, int errorCode) {
+      System.err.println(errMsg);
+      System.exit(errorCode);
+   }
+
+}
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Messages.java b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Messages.java
new file mode 100644
index 000000000..781829729
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Messages.java
@@ -0,0 +1,22 @@
+package de.hdm_stuttgart.mi.sda1.sql2catalog;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+   private static final String BUNDLE_NAME = "de.hdm_stuttgart.mi.sda1.sql2catalog.messages"; //$NON-NLS-1$
+
+   private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+         .getBundle(BUNDLE_NAME);
+
+   private Messages() {
+   }
+
+   public static String getString(String key) {
+      try {
+         return RESOURCE_BUNDLE.getString(key);
+      } catch (MissingResourceException e) {
+         return '!' + key + '!';
+      }
+   }
+}
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java
new file mode 100644
index 000000000..3fae4f947
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/Rdbms2Xml.java
@@ -0,0 +1,77 @@
+package de.hdm_stuttgart.mi.sda1.sql2catalog;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+import org.jdom2.Attribute;
+import org.jdom2.Element;
+import org.jdom2.Namespace;
+import org.jdom2.output.Format;
+import org.jdom2.output.XMLOutputter;
+
+/**
+ * A simple SAX parser demo
+ * 
+ */
+public class Rdbms2Xml {
+
+   /**
+    * @param args Unused
+    */
+   public static void main(String[] args) {
+
+
+      
+      // Register Driver
+      final String sqlDriverClassName = Messages.getString("Xml2Rdbms.jdbcDriverName"); 
+      try {
+         Class.forName(sqlDriverClassName);
+      } catch (ClassNotFoundException e) {
+         Helper.exitWithErrorMessage(Messages.getString("Xml2Rdbms.errMsgUnableRegisterDriverClass") + sqlDriverClassName + "'", 1);
+      }
+
+      // Opening a JDBC connection
+      // 
+      Connection conn = null;
+      
+      final String jdbcConnectionUrl = Messages.getString("Xml2Rdbms.jdbcUrl"); 
+      final String userName = Messages.getString("Xml2Rdbms.jdbcUser"); 
+      try {
+         conn = DriverManager.getConnection(jdbcConnectionUrl, userName, Messages.getString("Xml2Rdbms.jdbcPasswd")); 
+      } catch (SQLException e) {
+         Helper.exitWithErrorMessage(Messages.getString("Xml2Rdbms.errMsgUnableToConnect") + userName + "' to '" + 
+               jdbcConnectionUrl + "'", 1); 
+      }
+      RdbmsAccess rdbmsAccess = null;
+      try {
+         rdbmsAccess = new RdbmsAccess(conn);
+      } catch (SQLException e) {
+         Helper.exitWithErrorMessage(Messages.getString("Xml2Rdbms.errMsgUnableInitDataInsert"), 1); 
+      }
+      final Namespace xsiNS = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
+      final Element universityElement = new Element("university");
+      final Attribute noNamespaceSchemaLocation = new Attribute("noNamespaceSchemaLocation", "university.xsd", xsiNS);
+      universityElement.setAttribute(noNamespaceSchemaLocation);
+      final Element studyCourses = new Element("studyCourses");
+      universityElement.addContent(studyCourses);
+      final Element students = new Element("students");
+      universityElement.addContent(students);
+      
+      try {
+         rdbmsAccess.appendStudyCourses(studyCourses);
+         rdbmsAccess.appendStudents(students);
+      } catch (SQLException e) {
+         Helper.exitWithErrorMessage("Unable to read database:" + e.getLocalizedMessage(), 1);
+      }
+      
+      // Write XML content to standard output
+      XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
+      try {
+         outputter.output(universityElement, System.out);
+      } catch (IOException e) {
+         Helper.exitWithErrorMessage("Unable to write XML data:" + e.getLocalizedMessage(), 1);
+      }
+   }
+}
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java
new file mode 100644
index 000000000..1f6a410c1
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/RdbmsAccess.java
@@ -0,0 +1,65 @@
+package de.hdm_stuttgart.mi.sda1.sql2catalog;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.jdom2.Element;
+
+/**
+ * Reading product data
+ *
+ */
+public class RdbmsAccess {
+	
+	final PreparedStatement selectStudyCourses, selectStudents;
+
+	/**
+	 * @param conn Destination RDBMS
+	 * @throws SQLException 
+	 */
+	public RdbmsAccess(final Connection conn) throws SQLException {
+	   conn.setAutoCommit(false);
+	   selectStudyCourses = conn.prepareStatement("SELECT * FROM StudyCourse");
+	   selectStudents = conn.prepareStatement("SELECT * FROM Student");
+	}
+	
+   public void appendStudyCourses(final Element parent) throws SQLException {
+      final ResultSet studyCourses = selectStudyCourses.executeQuery();
+      
+      while (studyCourses.next()) {
+         final Element studyCourse = new Element("studyCourse");
+         parent.addContent(studyCourse);
+         studyCourse.setAttribute("id", "" + studyCourses.getInt("id"))
+                    .addContent(new Element("name").setText(studyCourses.getString("name")));
+         final String bachelorMaster = studyCourses.getString("program");
+         if (null != bachelorMaster) {
+        	 studyCourse.setAttribute("program",bachelorMaster);
+         }
+         final String shortName = studyCourses.getString("shortName");
+         if (!studyCourses.wasNull()){
+            studyCourse.addContent(new Element("shortName").setText(shortName));
+         }
+      }
+      studyCourses.close();
+   }
+   
+   public void appendStudents(final Element parent) throws SQLException {
+      final ResultSet students = selectStudents.executeQuery();
+      
+      while (students.next()) {
+         final Element student = new Element("student");
+         parent.addContent(student);
+         student.setAttribute("id", "" + students.getInt("id"))
+                .addContent(new Element("fullName").setText(students.getString("fullName")))
+                .addContent(new Element("email").setText(students.getString("email")))
+                    ;
+         final int studyCourse = students.getInt("studyCourse");
+         if (!students.wasNull()){
+            student.setAttribute("studyCourse", "" + studyCourse);
+         }
+      }
+      students.close();
+   }
+}
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/messages.properties b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/messages.properties
new file mode 100644
index 000000000..a183dcc38
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/java/de/hdm_stuttgart/mi/sda1/sql2catalog/messages.properties
@@ -0,0 +1,11 @@
+Xml2Rdbms.14='
+Xml2Rdbms.errMsgUnableCloseRdbms=Unable to close RDBMS access
+Xml2Rdbms.errMsgUnableInitDataInsert=Unable to initialize data inserter
+Xml2Rdbms.errMsgUnableRegisterDriverClass=Unable to register driver class '
+Xml2Rdbms.errMsgUnableToConnect=Unable to connect as user '
+Xml2Rdbms.jdbcDriverName=com.mysql.jdbc.Driver
+Xml2Rdbms.jdbcPasswd=XYZ
+Xml2Rdbms.jdbcUrl=jdbc:mysql://localhost:3306/hdm
+Xml2Rdbms.jdbcUser=hdmuser
+Xml2Rdbms.xmlSourceFileName=products.xml
+Xml2Rdbms.errMsgUnableCommitTransaction=Unable to commit transaction
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/resources/log4j2.xml b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/resources/log4j2.xml
new file mode 100644
index 000000000..33cda01bd
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/main/resources/log4j2.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <File name="A1" fileName="A1.log" append="false">
+            <PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+
+        <!-- You my want to define class or package level per-logger rules -->
+        <Logger name="de.hdm_stuttgart.mi.sda1.catalog2sax.App" level="warn">
+            <AppenderRef ref="A1"/>
+        </Logger>
+        <Root level="warn">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java
new file mode 100644
index 000000000..b589e8b6c
--- /dev/null
+++ b/Klausuren/Sda1/Tests/University_Sql2Xsd_xmlexport/Solution/src/test/java/de/hdm_stuttgart/mi/sda1/exam/xsd/SchemaTest.java
@@ -0,0 +1,26 @@
+package de.hdm_stuttgart.mi.sda1.exam.xsd;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import de.hdm_stuttgart.mi.unitmarking.xsd.InstanceSetEvaluation;
+
+/**
+ * Unit test for an XML instance set.
+ */
+public class SchemaTest {
+    /**
+     * Testing a suite of XML instances.
+     */
+    @SuppressWarnings("static-method")
+	@Test
+    public void testXmlInstanceSet() {
+       
+       final InstanceSetEvaluation ise =
+    		   new InstanceSetEvaluation("SchemaTest", "Schema/university.xsd");
+       
+       System.out.println(ise.getMessages());
+
+       Assert.assertTrue(ise.getErrorMessages(), ise.allTestsSucceeded);
+    }
+}
-- 
GitLab