From 2a8b2332a0a281ca2ae3e011362f454d8f526adb Mon Sep 17 00:00:00 2001 From: Martin Goik <goik@hdm-stuttgart.de> Date: Fri, 12 Jun 2015 09:31:00 +0200 Subject: [PATCH] Exercise relating employees to companies writing XML data to a RDBMS. --- Exam/Sda1/EmployeeCompany/Skeleton/.gitignore | 4 + .../EmployeeCompany/Skeleton/employee.xml | 0 Exam/Sda1/EmployeeCompany/Skeleton/pom.xml | 99 +++++++++++++++++++ .../mi/sd1/employeecompany/Xml2Rdbms.java | 37 +++++++ .../Skeleton/src/main/resources/company.xsd | 50 ++++++++++ .../Skeleton/src/main/resources/employees.xml | 33 +++++++ .../Skeleton/src/main/resources/log4j2.xml | 21 ++++ Exam/Sda1/EmployeeCompany/Solution/.gitignore | 4 + Exam/Sda1/EmployeeCompany/Solution/pom.xml | 99 +++++++++++++++++++ .../mi/sd1/employeecompany/Xml2Rdbms.java | 94 ++++++++++++++++++ .../Solution/src/main/resources/company.xsd | 50 ++++++++++ .../Solution/src/main/resources/employees.xml | 33 +++++++ .../Solution/src/main/resources/log4j2.xml | 21 ++++ .../Solution/src/main/resources/schema.sql | 28 ++++++ Exam/Sda1/EmployeeCompany/description.html | 41 ++++++++ 15 files changed, 614 insertions(+) create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/.gitignore create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/employee.xml create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/pom.xml create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/company.xsd create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/employees.xml create mode 100644 Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/log4j2.xml create mode 100644 Exam/Sda1/EmployeeCompany/Solution/.gitignore create mode 100644 Exam/Sda1/EmployeeCompany/Solution/pom.xml create mode 100644 Exam/Sda1/EmployeeCompany/Solution/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java create mode 100644 Exam/Sda1/EmployeeCompany/Solution/src/main/resources/company.xsd create mode 100644 Exam/Sda1/EmployeeCompany/Solution/src/main/resources/employees.xml create mode 100644 Exam/Sda1/EmployeeCompany/Solution/src/main/resources/log4j2.xml create mode 100644 Exam/Sda1/EmployeeCompany/Solution/src/main/resources/schema.sql create mode 100644 Exam/Sda1/EmployeeCompany/description.html diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/.gitignore b/Exam/Sda1/EmployeeCompany/Skeleton/.gitignore new file mode 100644 index 000000000..a1c3ab4d0 --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Skeleton/.gitignore @@ -0,0 +1,4 @@ +/target/ +/.settings/ +.classpath +.project diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/employee.xml b/Exam/Sda1/EmployeeCompany/Skeleton/employee.xml new file mode 100644 index 000000000..e69de29bb diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/pom.xml b/Exam/Sda1/EmployeeCompany/Skeleton/pom.xml new file mode 100644 index 000000000..75513cf56 --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Skeleton/pom.xml @@ -0,0 +1,99 @@ +<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.sd1</groupId> + <artifactId>employeecompany</artifactId> + <version>0.0.1-SNAPSHOT</version> + <packaging>jar</packaging> + + <name>employeecompany</name> + + <!--Fixme: Add a sensible project related domain here --> + <url>http://somedomain.org</url> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <dependencies> + <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>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>5.1.35</version> + </dependency> + + <dependency> + <groupId>org.jdom</groupId> + <artifactId>jdom2</artifactId> + <version>2.0.6</version> + </dependency> + + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>2.1</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.sd1.employeecompany.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/Exam/Sda1/EmployeeCompany/Skeleton/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java new file mode 100644 index 000000000..e2eef25da --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java @@ -0,0 +1,37 @@ +package de.hdm_stuttgart.mi.sd1.employeecompany; + +import java.io.IOException; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +import org.jdom2.Document; +import org.jdom2.JDOMException; +import org.jdom2.input.SAXBuilder; + +public class Xml2Rdbms { + + static Connection conn; + + static void connect() throws SQLException { + conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hdm", "hdmuser", "XYZ"); + } + + /** + * @param args Unused + * @throws IOException + * @throws JDOMException + * @throws SQLException + */ + public static void main( String[] args ) throws JDOMException, IOException, SQLException { + + connect(); + + final SAXBuilder builder = new SAXBuilder(); + + final Document doc = builder.build("src/main/resources/employees.xml"); + + // TODO: Process the XML doc and create database INSERT statements. + + } +} diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/company.xsd b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/company.xsd new file mode 100644 index 000000000..2ef1ee3ed --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/company.xsd @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> + + + <xs:element name="name" type="xs:string"/> + <xs:element name="category" type="xs:string"/> + <xs:element name="commonName" type="xs:string"/> + <xs:element name="email" type="xs:string"/> + + <xs:element name="employee"> + <xs:complexType> + <xs:sequence> + <xs:element ref="commonName"/> + <xs:element ref="email" minOccurs="0"/> + </xs:sequence> + <xs:attribute name="id" type="xs:int" use="required"/> + </xs:complexType> + </xs:element> + + <xs:element name="employees" > + <xs:complexType> + <xs:sequence> + <xs:element ref="employee" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + <xs:unique name="uniqueEmployeeId"> + <xs:selector xpath="employee"/> + <xs:field xpath="@id"/> + </xs:unique> + </xs:element> + + <xs:element name="company"> + <xs:complexType> + <xs:sequence> + <xs:element ref="name"/> + <xs:element ref="category"/> + <xs:element ref="employees"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="top"> + <xs:complexType> + <xs:sequence> + <xs:element ref="company" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + +</xs:schema> diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/employees.xml b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/employees.xml new file mode 100644 index 000000000..71901ba42 --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/employees.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<top xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="company.xsd"> + + <company> + <name>John & sons</name> + <category>Coal and gas</category> + <employees> + <employee id="2334"> + <commonName>Andrew Wilkins</commonName> + <email>wilkins@hotspot.com</email> + </employee> + <employee id="5512"> + <commonName>John Oats</commonName> + <email>wilkins@hotspot.com</email> + </employee> + </employees> + </company> + + <company> + <name>Sinister ways</name> + <category>Film and performance artists</category> + <employees> + <employee id="2234"> + <commonName>Florence Ambler</commonName> + </employee> + <employee id="7712"> + <commonName>Kim Anderson</commonName> + </employee> + </employees> + </company> + +</top> \ No newline at end of file diff --git a/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/log4j2.xml b/Exam/Sda1/EmployeeCompany/Skeleton/src/main/resources/log4j2.xml new file mode 100644 index 000000000..276bc7c62 --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Skeleton/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="%d %-5p [%t] %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.sd1.employeecompany.App" level="debug"> + <AppenderRef ref="A1"/> + </Logger> + <Root level="info"> + <AppenderRef ref="STDOUT"/> + </Root> + </Loggers> +</Configuration> \ No newline at end of file diff --git a/Exam/Sda1/EmployeeCompany/Solution/.gitignore b/Exam/Sda1/EmployeeCompany/Solution/.gitignore new file mode 100644 index 000000000..a1c3ab4d0 --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Solution/.gitignore @@ -0,0 +1,4 @@ +/target/ +/.settings/ +.classpath +.project diff --git a/Exam/Sda1/EmployeeCompany/Solution/pom.xml b/Exam/Sda1/EmployeeCompany/Solution/pom.xml new file mode 100644 index 000000000..75513cf56 --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Solution/pom.xml @@ -0,0 +1,99 @@ +<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.sd1</groupId> + <artifactId>employeecompany</artifactId> + <version>0.0.1-SNAPSHOT</version> + <packaging>jar</packaging> + + <name>employeecompany</name> + + <!--Fixme: Add a sensible project related domain here --> + <url>http://somedomain.org</url> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <dependencies> + <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>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>5.1.35</version> + </dependency> + + <dependency> + <groupId>org.jdom</groupId> + <artifactId>jdom2</artifactId> + <version>2.0.6</version> + </dependency> + + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>2.1</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.sd1.employeecompany.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/Exam/Sda1/EmployeeCompany/Solution/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java b/Exam/Sda1/EmployeeCompany/Solution/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java new file mode 100644 index 000000000..24d5935f9 --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Solution/src/main/java/de/hdm_stuttgart/mi/sd1/employeecompany/Xml2Rdbms.java @@ -0,0 +1,94 @@ +package de.hdm_stuttgart.mi.sd1.employeecompany; + +import java.io.IOException; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.List; + +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.JDOMException; +import org.jdom2.input.SAXBuilder; + + +/** + * A simple http://logging.apache.org/log4j/2.x demo, + * see file log4j2.xml for configuration options. + * + */ +public class Xml2Rdbms { + + static Connection conn = null; + + /** + * @param args Unused + * @throws IOException + * @throws JDOMException + * @throws SQLException + */ + public static void main( String[] args ) throws JDOMException, IOException, SQLException { + connect(); + + final SAXBuilder builder = new SAXBuilder(); + + final Document doc = builder.build("src/main/resources/employees.xml"); + final Element top = doc.getRootElement(); + + processCompanys(top.getChildren()); + + conn.close(); + } + + static void connect() throws SQLException { + conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hdm", "hdmuser", "XYZ"); + } + static void disConnect() throws SQLException { + conn.close(); + } + + static void processCompanys(final List<Element> companies) throws SQLException { + + try (final PreparedStatement insert = conn.prepareStatement( + "INSERT INTO Company VALUES(?, ?, ?)")) { + final int ID_IDX = 1, + NAME_IDX = 2, + CATEGORY_IDX = 3; + + for (int i = 0; i < companies.size(); i++) { + + final int companyId = i + 1; + + final Element company = companies.get(i); + insert.setInt(ID_IDX, companyId); + insert.setString(NAME_IDX, company.getChildText("name")); + insert.setString(CATEGORY_IDX, company.getChildText("category")); + + insert.executeUpdate(); + + processEmployees(companyId, company.getChild("employees").getChildren()); + } + } + } + + static void processEmployees(final int companyId, final List<Element> employees) throws SQLException { + try (final PreparedStatement insert = conn.prepareStatement( + "INSERT INTO Employee VALUES(?, ?, ?, ?)")) { + final int ID_IDX = 1, + COMPANY_IDX = 2, + COMMONNAME_IDX = 3, + EMAIL_IDX = 4; + + for (final Element e: employees) { + insert.setInt(ID_IDX, Integer.parseInt(e.getAttributeValue("id"))); + insert.setInt(COMPANY_IDX, companyId); + insert.setString(COMMONNAME_IDX, e.getChildText("commonName")); + insert.setString(EMAIL_IDX, e.getChildText("email")); + + insert.executeUpdate(); + } + } + } + +} diff --git a/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/company.xsd b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/company.xsd new file mode 100644 index 000000000..2ef1ee3ed --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/company.xsd @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> + + + <xs:element name="name" type="xs:string"/> + <xs:element name="category" type="xs:string"/> + <xs:element name="commonName" type="xs:string"/> + <xs:element name="email" type="xs:string"/> + + <xs:element name="employee"> + <xs:complexType> + <xs:sequence> + <xs:element ref="commonName"/> + <xs:element ref="email" minOccurs="0"/> + </xs:sequence> + <xs:attribute name="id" type="xs:int" use="required"/> + </xs:complexType> + </xs:element> + + <xs:element name="employees" > + <xs:complexType> + <xs:sequence> + <xs:element ref="employee" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + <xs:unique name="uniqueEmployeeId"> + <xs:selector xpath="employee"/> + <xs:field xpath="@id"/> + </xs:unique> + </xs:element> + + <xs:element name="company"> + <xs:complexType> + <xs:sequence> + <xs:element ref="name"/> + <xs:element ref="category"/> + <xs:element ref="employees"/> + </xs:sequence> + </xs:complexType> + </xs:element> + + <xs:element name="top"> + <xs:complexType> + <xs:sequence> + <xs:element ref="company" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + </xs:element> + +</xs:schema> diff --git a/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/employees.xml b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/employees.xml new file mode 100644 index 000000000..71901ba42 --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/employees.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<top xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="company.xsd"> + + <company> + <name>John & sons</name> + <category>Coal and gas</category> + <employees> + <employee id="2334"> + <commonName>Andrew Wilkins</commonName> + <email>wilkins@hotspot.com</email> + </employee> + <employee id="5512"> + <commonName>John Oats</commonName> + <email>wilkins@hotspot.com</email> + </employee> + </employees> + </company> + + <company> + <name>Sinister ways</name> + <category>Film and performance artists</category> + <employees> + <employee id="2234"> + <commonName>Florence Ambler</commonName> + </employee> + <employee id="7712"> + <commonName>Kim Anderson</commonName> + </employee> + </employees> + </company> + +</top> \ No newline at end of file diff --git a/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/log4j2.xml b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/log4j2.xml new file mode 100644 index 000000000..276bc7c62 --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/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="%d %-5p [%t] %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.sd1.employeecompany.App" level="debug"> + <AppenderRef ref="A1"/> + </Logger> + <Root level="info"> + <AppenderRef ref="STDOUT"/> + </Root> + </Loggers> +</Configuration> \ No newline at end of file diff --git a/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/schema.sql b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/schema.sql new file mode 100644 index 000000000..87a0c5f1e --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/Solution/src/main/resources/schema.sql @@ -0,0 +1,28 @@ +DROP TABLE Employee; +DROP TABLE Company; + +CREATE TABLE Company ( + id INTEGER NOT NULL + ,name VARCHAR(255) NOT NULL + ,category VARCHAR(255) NOT NULL + ,PRIMARY KEY(id) +) ; + +CREATE TABLE Employee ( + id INTEGER NOT NULL + ,company INTEGER NOT NULL + ,commonName VARCHAR(255) NOT NULL + ,email VARCHAR(255) NULL + ,FOREIGN KEY (company) REFERENCES Company(id) + ,PRIMARY KEY(id, company) +); + +INSERT INTO Company VALUES(1, 'Smith & sons', 'Coal and gas'); +INSERT INTO Employee VALUES(2231, 1, 'Jim Bone', null); + +DELETE FROM Employee; +DELETE FROM Company; +DELETE FROM Company WHERE id=2; + +SELECT * FROM Company; +SELECT * FROM Employee; \ No newline at end of file diff --git a/Exam/Sda1/EmployeeCompany/description.html b/Exam/Sda1/EmployeeCompany/description.html new file mode 100644 index 000000000..39cb5a345 --- /dev/null +++ b/Exam/Sda1/EmployeeCompany/description.html @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <title></title> + </head> + + <body><h1>Preparations</h1><p>Download this <a + href="/files/goik/Sda1/EmployeeCompany/dujewdh323FggFFD_72w.zip" + target="_blank">Maven skeleton archive</a>, unzip it and import the + resulting sub directory <code>Skeleton</code> as a Maven project into your + Eclipse workspace. This project contains:</p><ol> + <li><p>A schema file <code>src/main/resources/company.xsd</code> + describing company and employee data as being provided in the sample + instance <code>src/main/resources/employees.xml</code>.</p></li> + + <li><p>A Java skeleton class + <code>de.hdm_stuttgart.mi.sd1.employeecompany.Xml2Rdbms</code> + containing boilerplate code being related to <code>Jdom</code> and + <code>Jdbc</code>.</p></li> + </ol><h1>Description</h1><p>This exercise's aim is to transfer XML file + data like being represented by <code>src/main/resources/employees.xml</code> + to a relational database system via <code>Jdbc</code>. You are expected to + solve two tasks:</p><ol type="i"> + <li><p>Create a SQL-DDL schema which best resembles the XML schema + <code>src/main/resources/company.xsd</code>.</p><p>Hint: Since employees + belong to a specific company (composition) you'll need two tables being + connected by a foreign key relation.</p></li> + + <li><p>Complete the implementation of + <code>de.hdm_stuttgart.mi.sd1.employeecompany.Xml2Rdbms.java</code> to + read XML data and write it to your database server.</p><p>Hint: With + respect to the foreign key reference connecting employees and companies + you'll have to invent <code>id</code> values for company datasets. This + may be accomplished by simply enumerating all companies appearing in + your XML input data.</p></li> + </ol><p>Upon completion zip up your project directory and upload it to the + E-learning system. Mind the remaining time! <strong style="color: red;">When + the examination terminates no subsequent uploads will be + possible!</strong></p></body> +</html> -- GitLab