Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
GoikLectures
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Goik Martin
GoikLectures
Commits
2e398fba
Commit
2e398fba
authored
4 years ago
by
Goik Martin
Browse files
Options
Downloads
Patches
Plain Diff
Content part of lectures.xml
parent
b0869e53
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
Klausuren/Sda1/2020summer/Solve/Doc/tasks.xml
+0
-503
0 additions, 503 deletions
Klausuren/Sda1/2020summer/Solve/Doc/tasks.xml
with
0 additions
and
503 deletions
Klausuren/Sda1/2020summer/Solve/Doc/tasks.xml
deleted
100644 → 0
+
0
−
503
View file @
b0869e53
<?xml version="1.0" encoding="UTF-8"?>
<section
version=
"5.0"
xml:id=
"sda1_exam_2019_summer"
xml:lang=
"en"
xmlns=
"http://docbook.org/ns/docbook"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
xmlns:xila=
"http://www.w3.org/2001/XInclude/local-attributes"
xmlns:xi=
"http://www.w3.org/2001/XInclude"
xmlns:trans=
"http://docbook.org/ns/transclusion"
xmlns:svg=
"http://www.w3.org/2000/svg"
xmlns:m=
"http://www.w3.org/1998/Math/MathML"
xmlns:html=
"http://www.w3.org/1999/xhtml"
xmlns:db=
"http://docbook.org/ns/docbook"
>
<info>
<title/>
<author>
<personname/>
</author>
<pubdate/>
</info>
<section
xml:id=
"sda1_exam_2020_summer_task1"
>
<title>
Lecture examinations
</title>
<section
xml:id=
"sda1_exam_2020_summer_aufgabe1_prepare"
>
<title>
Preparations
</title>
<para>
Download and unzip the above file
<filename>
exam.zip
</filename>
.
Then:
</para>
<orderedlist>
<listitem>
<para>
Import the resulting
<filename>
Exam
</filename>
Project into
your
<productname>
IDEA
</productname>
IDE by choosing »File --
>
Open...« subsequently selecting the
<filename>
Exam/pom.xml
</filename>
file.
</para>
</listitem>
<listitem>
<para>
Also import
<filename>
Exam
</filename>
into your
<productname>
Oxygenxml
</productname>
IDE using »Project« --
>
»Open Project« subsequently selecting the
<filename>
Exam/sda1.xpr
</filename>
file.
</para>
</listitem>
</orderedlist>
</section>
<section
xml:id=
"sda1_exam_2020_summer_aufgabe1_descr"
>
<title>
Description
</title>
<caution>
<para>
IntelliJ IDEA is partly broken with respect to XML Schema
flagging the subsequent instance as invalid: Use
<productname>
Oxygenxml
</productname>
instead!
</para>
</caution>
<para>
Consider a company's departments, employees and projects:
</para>
<programlisting
language=
"xml"
>
<
company xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="company.xsd"
>
<
departments
>
<
department
>
<
name
>
Headquarter
<
/name
>
<
member nickname = "jb"
>
Jim Beam
<
/member
>
<
department
>
<
!-- Sub department of »Headquarter« --
>
<
name
>
GUI Development
<
/name
>
<
member nickname="eg"
>
Eve Gardener
<
/member
>
<
member nickname="pt"
>
Pete Townsend
<
/member
>
<
/department
>
<
department
>
<
!-- Another sub department of »Headquarter« --
>
<
name
>
Database Development
<
/name
>
<
member nickname="ls"
>
Laura Stern
<
/member
>
<
/department
>
<
department
>
<
name
>
New stuff
<
/name
>
<
!-- No members yet --
>
<
/department
>
<
/department
>
<
/departments
>
<
projects
>
<
project slug="GUIGen" visibility="public"
>
<
name
>
GUI Generator
<
/name
>
<
developers
>
<
developer member="eg" role="manager"/
>
<
developer member="jb" role="guest"/
>
<
/developers
>
<
/project
>
<
project slug="dbSchemaGen" visibility="internal"
>
<
name
>
Database Schema Generator
<
/name
>
<
developers
>
<
developer member="pt" role="developer"/
>
<
/developers
>
<
/project
>
<
project slug="aBook" visibility="private"
>
<
name
>
Address Book
<
/name
>
<
developers
>
<
developer member="jb" role="manager"/
>
<
/developers
>
<
/project
>
<
/projects
>
<
/company
>
</programlisting>
<para>
The following data integrity rules shall apply:
</para>
<orderedlist>
<listitem>
<para>
A
<tag
class=
"starttag"
>
company
</tag>
database contains
<tag
class=
"starttag"
>
departments
</tag>
and
<tag
class=
"starttag"
>
projects
</tag>
.
</para>
</listitem>
<listitem>
<para><tag
class=
"starttag"
>
departments
</tag>
have an arbitrary
number of
<tag
class=
"starttag"
>
department
</tag>
children.
</para>
</listitem>
<listitem>
<para><tag
class=
"starttag"
>
department
</tag>
entries consist of a
<tag
class=
"starttag"
>
name
</tag>
, an arbitrary number of
<tag
class=
"starttag"
>
member
</tag>
children followed by an arbitrary
number of sub-
<tag
class=
"starttag"
>
department
</tag>
entries
allowing for nested departments.
<tag
class=
"starttag"
>
name
</tag>
must be unique among all departments.
</para>
</listitem>
<listitem>
<para>
Each
<tag
class=
"starttag"
>
member
</tag>
has got a
<tag
class=
"attribute"
>
@nickname
</tag>
attribute being unique among all
departments.
</para>
</listitem>
<listitem>
<para><tag
class=
"starttag"
>
projects
</tag>
consists of an arbitrary
number of
<tag
class=
"starttag"
>
project
</tag>
entries.
</para>
</listitem>
<listitem>
<para>
Each
<tag
class=
"starttag"
>
project
</tag>
has got
</para>
<itemizedlist>
<listitem>
<para>
a
<tag
class=
"starttag"
>
name
</tag></para>
</listitem>
<listitem>
<para>
a
<tag
class=
"starttag"
>
developers
</tag>
child
</para>
</listitem>
<listitem>
<para>
a required
<tag
class=
"attribute"
>
@slug
</tag>
attribute
carrying a shortened project's name of minimum length 5 not
containing whitespace characters. The
<tag
class=
"attribute"
>
@slug
</tag>
attribute values are unique among
all projects.
</para>
</listitem>
<listitem>
<para>
a required
<tag
class=
"attribute"
>
@visibility
</tag>
attribute
</para>
</listitem>
<listitem>
<para>
having exactly one value from {
<code>
"public"
</code>
,
<code>
"internal"
</code>
,
<code>
"private"
</code>
}.
</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>
Each
<tag
class=
"starttag"
>
developers
</tag>
child contains an
arbitrary set of
<tag
class=
"starttag"
>
developer
</tag>
entries.
</para>
</listitem>
<listitem>
<para>
Each
<tag
class=
"starttag"
>
developer
</tag>
has got two
mandatory attributes:
</para>
<orderedlist>
<listitem>
<para><tag
class=
"attribute"
>
@member
</tag>
referencing a
corresponding
<tag
class=
"starttag"
>
member nickname="..."
</tag>
entry.
</para>
</listitem>
<listitem>
<para><tag
class=
"attribute"
>
@role
</tag>
having exactly one
value from {
<code>
"manager"
</code>
,
<code>
"guest"
</code>
,
<code>
"developer"
</code>
}.
</para>
</listitem>
</orderedlist>
<para>
Within the same
<tag
class=
"starttag"
>
developers
</tag>
parent
element all
<tag
class=
"attribute"
>
@member
</tag>
attribute values
are unique. Each
<tag
class=
"attribute"
>
@member
</tag>
value
references a corresponding
<tag
class=
"starttag"
>
member
nickname="..."
</tag>
element.
</para>
</listitem>
</orderedlist>
</section>
<section
xml:id=
"sda1_exam_2020_summer_aufgabe1_task"
>
<title>
Tasks
</title>
<para>
Complete your schema's implementation in
<filename>
Schema/company.xsd
</filename>
using the
<productname>
Oxygenxml
</productname>
IDE. Hints:
</para>
<orderedlist>
<listitem>
<para><productname>
Junit
</productname>
execution of
<classname>
de.hdm_stuttgart.mi.sda1.test.ex1.SchemaTest
</classname>
from within IntelliJ executes all unit tests based on files residing
in your project's folder
<filename>
SchemaTest
</filename>
. Some of
these files e.g.
<filename>
SchemaTest/0105invalid_missingDepartments.xml
</filename>
contain comment hints regarding expected errors with respect to the
intended
<filename>
Schema/company.xsd
</filename>
:
</para>
<programlisting
language=
"xml"
>
...
<
!--
<
departments/
>
is missing --
>
...
</programlisting>
<para>
Clicking on file names within test failure reports will open
e.g.
<filename>
SchemaTest/0105invalid_missingDepartments.xml
</filename>
in
<productname>
IDEA
</productname>
. However opening the same file in
<productname>
Oxygenxml
</productname>
manually may save time due to
better
<abbrev>
XML
</abbrev>
support. IDEA' s schema support is
partly broken.
</para>
</listitem>
<listitem>
<para><emphasis
role=
"red"
>
Never
</emphasis>
touch your project's
unit tests in the
<filename>
SchemaTest
</filename>
folder: The
automated tests may end up throwing meaningless exceptions.
</para>
</listitem>
<listitem>
<para>
Edit
<filename>
Schema/company.xsd
</filename>
only by small
steps executing the tests immediately. Schema changes may cause
already working tests to fail again. In case of spoiling your schema
<quote>
undo
</quote>
is your friend.
</para>
</listitem>
</orderedlist>
<tip>
<itemizedlist>
<listitem>
<para>
XPath uses the dot (.) for selecting an element's content
e.g. "
<emphasis
role=
"red"
>
food
</emphasis>
" in
<tag
class=
"starttag"
>
cat
</tag><emphasis
role=
"red"
>
food
</emphasis><tag
class=
"endtag"
>
cat
</tag>
.
</para>
</listitem>
<listitem>
<para>
The
<link
xlink:href=
"https://freedocs.mi.hdm-stuttgart.de/__slidesda1_xmlschema_chap_Xmlschema.html#/sda1_xmlschema_fig_textContentAttribute"
>
Text
content and attributes
</link>
slide is your friend.
</para>
</listitem>
<listitem>
<para>
Consider the list of
<link
xlink:href=
"https://www.w3schools.com/xml/schema_dtypes_numeric.asp"
>
predefined
data types
</link>
near the page's bottom.
</para>
</listitem>
<listitem>
<para>
Use
<tag
class=
"starttag"
>
xs:selector
xpath=".//department/member"
</tag>
for constructing
<tag
class=
"starttag"
>
xs:key ...
</tag>
constraints on nested
<tag
class=
"starttag"
>
department
</tag>
elements.
</para>
</listitem>
<listitem>
<para>
Prefer
<abbrev>
XSD
</abbrev>
standard types rather than
defining own types by restriction.
</para>
</listitem>
<listitem>
<para><link
xlink:href=
"https://www.w3schools.com/xml/schema_facets.asp"
>
XSD
Restrictions/Facets
</link>
may be helpful.
</para>
</listitem>
</itemizedlist>
</tip>
</section>
<section
version=
"5.1"
xml:id=
"sda1_exam_2020_summer_uploadFirst"
>
<title>
Project upload
</title>
<para>
Export your project by hitting »File« --
>
»Export to Zip File«
in IDEA creating an
<abbrev>
e.g.
</abbrev>
<filename>
solution-1.zip
</filename>
file. Then enter your
<productname>
ILIAS
</productname>
browser, hit the
<quote>
choose
file
</quote>
button selecting
<filename>
solution-1.zip
</filename>
and
subsequently click
<quote>
upload
</quote>
. Do not forget to advance to
the next question hitting the »save+next« button for
<emphasis
role=
"bold"
>
actually saving your upload
</emphasis>
. Common
pitfalls:
</para>
<itemizedlist>
<listitem>
<para>
Do not select the wrong archive! In particular avoid choosing
the original
<filename>
exam.zip
</filename>
skeleton.
</para>
</listitem>
<listitem>
<para>
After uploading and hitting »save+next« check for
<filename>
solution_1.zip
</filename>
being visible in the examination
system.
</para>
</listitem>
<listitem>
<para>
You may upload multiple versions i.e.
<filename>
solution_2.zip
</filename>
etc. . Only your least uploaded
archive will become subject to marking.
</para>
</listitem>
</itemizedlist>
</section>
<section
xml:id=
"sda1_exam_2020_summer_examCaveats"
>
<title>
Caveats
</title>
<itemizedlist>
<listitem>
<para>
When approaching examination ending time check your input for
completeness.
</para>
</listitem>
<listitem>
<para>
Projects residing just on your local workstation cannot be
recovered after exam termination.
</para>
</listitem>
</itemizedlist>
</section>
</section>
<section
xml:id=
"sda1_exam_2020_summer_task2"
>
<title>
Relational representation of
<tag
class=
"starttag"
>
company
</tag>
document instances
</title>
<section
xml:id=
"sda1_exam_2020_summer_task2_prepare"
>
<title>
Preparation
</title>
<para>
If you already started the first task just continue working on
your project using IntelliJ. Otherwise read the first task regarding the
skeleton project import.
</para>
<para>
Hint: A global database connection is configured on IDEA
level.
</para>
</section>
<section
xml:id=
"sda1_exam_2020_summer_task2_descr"
>
<title>
Description / tasks
</title>
<para>
Extend the relational schema skeleton
<filename>
Schema/schema.sq
</filename>
l preparing your RDBMS to import
<tag
class=
"starttag"
>
company
</tag>
instances.
</para>
<para>
Note the pre-existing table
<code>
Company
</code>
: Add required
tables reflecting the integrity constraints from the first task.
</para>
<para>
Use CHECK(...) constraints where appropriate.
</para>
</section>
<section
version=
"5.1"
xml:id=
"sda1_exam_2020_summer_uploadFollow"
>
<title>
Solution upload
</title>
<para>
Upload your project using the previous task. Then enter «I'm
expecting points for my work on the current task» into the text field
below on this page.
</para>
</section>
</section>
<section
xml:id=
"sda1_exam_2020_summer_task3"
>
<title>
Import XML instances into RDBMS
</title>
<section
xml:id=
"sda1_exam_2020_summer_task3_prepare"
>
<title>
Preparation
</title>
<para>
If you already started the first task just continue working on
your project using IntelliJ. Otherwise read the first task regarding the
skeleton project import.
</para>
</section>
<section
xml:id=
"sda1_exam_2020_summer_task3_descr"
>
<title>
Description
</title>
<para>
Write a Java application reading
<tag
class=
"starttag"
>
company
</tag>
document instances and writing
<tag
class=
"starttag"
>
department
</tag>
elements among with their hierarchical
structure and
<tag
class=
"starttag"
>
member
</tag>
entries to a relational
database. Do not consider
<tag
class=
"starttag"
>
project
</tag>
related
data at all. Hints:
</para>
<itemizedlist>
<listitem>
<para><package>
de.hdm_stuttgart.mi.sda1
</package>
.
<classname>
Company2Rdbms
</classname>
contains
<abbrev>
JDBC
</abbrev>
related connection parameters and
boilerplate code.
</para>
</listitem>
<listitem>
<para>
Upon invocation class
<package>
de.hdm_stuttgart.mi.sda1
</package>
.
<classname>
Driver
</classname>
instantiates
<package>
de.hdm_stuttgart.mi.sda1
</package>
.
<classname>
Company2Rdbms
</classname>
thereby:
</para>
<itemizedlist>
<listitem>
<para>
Reading and parsing
<filename>
Schema/sampledata.xml
</filename>
.
</para>
</listitem>
<listitem>
<para>
Open a database connection to your local PostgreSQL
server.
</para>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</section>
<section
xml:id=
"sda1_exam_2020_summer_task3_tasks"
>
<title>
Tasks
</title>
<para>
Pre- create your database schema from your last task's
<filename>
Schema/schema.sql
</filename>
using the IDE prior to running
your application. Implement the subsequently mentioned features. Each
section adds points to your marking. Using
<link
xlink:href=
"https://klausur.mi.hdm-stuttgart.de/doc/openjdk-11-doc/api/java.sql/java/sql/PreparedStatement.html"
>
PreparedStatement
</link>
instances should be preferred. Idea:
</para>
<orderedlist>
<listitem>
<para>
Get all top level
<tag
class=
"starttag"
>
department
</tag>
entries first.
</para>
</listitem>
<listitem>
<para>
From each top level
<tag
class=
"starttag"
>
department
</tag>
recurse to
<tag
class=
"starttag"
>
department
</tag>
children actually
using
<abbrev>
JDBC
</abbrev>
to insert your data.
</para>
</listitem>
<listitem>
<para>
Allow for multiple invocations: Import conflicts
(
<acronym>
i.e.
</acronym>
duplicate lectures or marks) should create
informal warnings but your application should try to continue
anyway.
</para>
</listitem>
</orderedlist>
</section>
<section
xml:id=
"sda1_exam_2020_summer_task3_hints"
>
<title>
Hints
</title>
<itemizedlist>
<listitem>
<para>
Executing
<package>
de.hdm_stuttgart.mi.sda1
</package>
.
<classname>
Driver
</classname>
calls
<package>
de.hdm_stuttgart.mi.sda1
</package>
.
<classname>
Company2Rdbms
</classname>
.
<methodname>
execute()
</methodname>
already containing both your XML instance's root element and a
database connection handle.
</para>
</listitem>
<listitem>
<para>
Even if your application just fills in
<abbrev>
e.g.
</abbrev>
(only top level)
<tag
class=
"starttag"
>
department
</tag>
values
excluding
<tag
class=
"starttag"
>
member
</tag>
data you'll receive
points. Also partly meaningful but not fully working code may
contribute.
</para>
</listitem>
</itemizedlist>
</section>
<section
version=
"5.1"
xml:id=
"sda1_exam_2020_summer_task3_upload"
>
<title>
Solution upload
</title>
<para>
Upload your project using the first task. Enter either of the
following two texts below:
</para>
<itemizedlist>
<listitem>
<para>
I'm expecting points for my work on the current task.
</para>
</listitem>
<listitem>
<para>
I did not work on this task.
</para>
</listitem>
</itemizedlist>
<para>
You may as well add other marking related comments.
</para>
</section>
</section>
</section>
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment