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><?xmlTest + points = "1" + expectedToBeValid = "false" + preconditionValid = "validStudyCourse.xml" ?></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><xsd:keyref ... ></code> definitions from the first +exercise completely by proposing the following structure:</p><pre><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></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><university xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="university.xsd"> + <studyCourses /> + <students /> +</university></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><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></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