vorlesung datenbankeinsatz ws 04/05 ipd Übung 2: xml / xquery
TRANSCRIPT
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übung 2: XML / XQueryÜbung 2: XML / XQuery
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
In jedem Protokoll müssen enthalten sein:In jedem Protokoll müssen enthalten sein:• TitelTitel• DatumDatum• ZeitZeit• OrtOrt• ProtokollführerProtokollführer
Protokollkopf mit diesen DatenProtokollkopf mit diesen Daten
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Protokollkopf mit:Protokollkopf mit:Titel, Protokolldatum, Zeit, Ort, ProtokollführerTitel, Protokolldatum, Zeit, Ort, Protokollführer
<!ENTITY % protokollkopf "titel,datum,zeit,ort,protokollfuehrer"><!ELEMENT titel (#PCDATA)><!ELEMENT datum (#PCDATA)><!ELEMENT zeit (#PCDATA)><!ELEMENT ort (#PCDATA)><!ELEMENT protokollfuehrer (person)>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentyp Der Datentyp person<!ELEMENT person (%anrede;,vorname?,name)><!ATTLIST person bemerkung CDATA #IMPLIED ident ID #IMPLIED>
Die Datentypen Die Datentypen vorname & name<!ELEMENT vorname (#PCDATA)><!ELEMENT name (#PCDATA)>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentyp Der Datentyp anrede<!ENTITY % anrede "(prof_dr|prof|dr|herr|frau)?">
Die Datentypen Die Datentypen prof_dr, prof, dr, herr & frau<!ELEMENT prof_dr EMPTY><!ELEMENT prof EMPTY><!ELEMENT dr EMPTY><!ELEMENT herr EMPTY><!ELEMENT frau EMPTY>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
<xsd:element name="protokoll"> <xsd:complexType> <xsd:sequence> <xsd:element ref="titel"/> <xsd:element ref="datum"/> <xsd:element ref="zeit"/> <xsd:element ref="ort"/> <xsd:element name="protokollfuehrer" type="protokollfuehrerType"/> ... </xsd:sequence> </xsd:complexType> </xsd:element>
Protokollkopf mit:Protokollkopf mit:Titel, Protokolldatum, Zeit, Ort, ProtokollführerTitel, Protokolldatum, Zeit, Ort, Protokollführer
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentypen Der Datentypen titel, datum, zeit & ort <xsd:element name="titel" type="xsd:string"/> <xsd:element name="datum" type="xsd:date"/> <xsd:element name="zeit" type="xsd:time"/> <xsd:element name="ort" type="xsd:string"/>
Der Datentyp Der Datentyp protokollführerType <xsd:complexType name="protokollfuehrerType"> <xsd:sequence> <xsd:element name="person" type="personType"/> </xsd:sequence> </xsd:complexType>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentyp Der Datentyp personType <xsd:complexType name="personType"> <xsd:sequence> <xsd:choice> <xsd:element ref="prof_dr"/> <xsd:element ref="prof"/> <xsd:element ref="dr"/> <xsd:element ref="herr"/> <xsd:element ref="frau"/> </xsd:choice> <xsd:element ref="vorname" minOccurs="0"/> <xsd:element ref="name"/> </xsd:sequence> <xsd:attribute name="bemerkung" type="xsd:string"/> <xsd:attribute name="ident" type="xsd:ID"/> </xsd:complexType>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentypen Der Datentypen vorname & name <xsd:element name="name" type="xsd:string"/> <xsd:element name="vorname" type="xsd:string"/>
Die Datentypen Die Datentypen prof_dr, prof, dr, herr & frau <xsd:element name="prof_dr"> <xsd:complexType/> </xsd:element> <xsd:element name="prof"> <xsd:complexType/> </xsd:element> <xsd:element name="dr"> <xsd:complexType/> </xsd:element> <xsd:element name="herr"> <xsd:complexType/> </xsd:element> <xsd:element name="frau"> <xsd:complexType/> </xsd:element>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Die Teilnehmerliste soll alle An- und Die Teilnehmerliste soll alle An- und Abwesenden auflisten: Abwesenden auflisten: • Ordentliche TeilnehmerOrdentliche Teilnehmer• GästeGäste• Entschuldigt AbwesendeEntschuldigt Abwesende• Unentschuldigt AbwesendeUnentschuldigt Abwesende
Je eine Teilliste mit diesen PersonenJe eine Teilliste mit diesen Personen
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Liste von Personen mitListe von Personen mitAnwesenden, Gästen, (un)entschuldigt Anwesenden, Gästen, (un)entschuldigt
AbwesendenAbwesenden<!ENTITY % teilnehmerliste "teilnehmer,gaeste?,entschuldigt?,unentschuldigt?">
<!ELEMENT teilnehmer (person)+><!ELEMENT gaeste (person)+><!ELEMENT entschuldigt (person)+><!ELEMENT unentschuldigt (person)+>
Die Datentypen Die Datentypen teilnehmer, gaeste,entschuldigt, unentschuldigt
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Listen von Personen mit:Listen von Personen mit:Anwesenden, Gästen, (un)entschuldigt Anwesenden, Gästen, (un)entschuldigt
AbwesendenAbwesenden
Übungsblatt 2Übungsblatt 2
<xsd:element name="protokoll"> <xsd:complexType> <xsd:sequence> ... <xsd:element name="teilnehmer" type="teilnehmerType"/> <xsd:element name="gaeste" type="gaesteType" minOccurs="0"/> <xsd:element name="entschuldigt" type="entschuldigtType" minOccurs="0"/> <xsd:element name="unentschuldigt" type="unentschuldigtType" minOccurs="0"/> ... </xsd:sequence> </xsd:complexType> </xsd:element>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentypen Der Datentypen teilnehmerType, gaesteType,entschuldigtType, unentschuldigtType
<xsd:complexType name="teilnehmerType"> <xsd:sequence> <xsd:element name="person" type="personType" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="gaesteType"> ... </xsd:complexType> <xsd:complexType name="entschuldigtType"> ... </xsd:complexType> <xsd:complexType name="unentschuldigtType"> ... </xsd:complexType>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Zu Tagesordnungspunkten muß angegebenZu Tagesordnungspunkten muß angegebenwerden:werden:• Antragsteller / BerichterAntragsteller / Berichter• Beschlußziffer (nur Beschlüsse)Beschlußziffer (nur Beschlüsse)• Beschlußdatum (nur Beschlüsse)Beschlußdatum (nur Beschlüsse)• Abstimmungsresultat (nur Beschlüsse)Abstimmungsresultat (nur Beschlüsse)
Datentyp für KenntnisnahmenDatentyp für Kenntnisnahmen Datentyp für BeschlüsseDatentyp für Beschlüsse
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Tagesordnungspunkte sollen enthalten:Tagesordnungspunkte sollen enthalten:• Einen oder mehrere AbschnitteEinen oder mehrere Abschnitte• Spezielle Kennzeichnungen fürSpezielle Kennzeichnungen für
• NamenNamen• ZeitenZeiten• DatenDaten
Datentyp für AbschnittDatentyp für Abschnitt Datentypen für Daten & ZeitenDatentypen für Daten & Zeiten
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentyp Der Datentyp beschluss<!ELEMENT beschluss (titel,ziffer,inhalt,resultat)><!ATTLIST beschluss antragsteller IDREFS #REQUIRED>
Die Datentypen Die Datentypen ziffer, inhalt & resultat<!ELEMENT ziffer (#PCDATA)><!ELEMENT resultat (#PCDATA)><!ELEMENT inhalt (p)*>
Die Datentyp Die Datentyp p<!ELEMENT p (#PCDATA|name|zeit|datum)*>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentyp Der Datentyp kenntnisnahme<!ELEMENT kenntnisnahme (titel,inhalt)><!ATTLIST kenntnisnahme berichter IDREFS #REQUIRED>
Die Datentypen Die Datentypen ziffer, inhalt & resultat<!ELEMENT ziffer (#PCDATA)><!ELEMENT resultat (#PCDATA)><!ELEMENT inhalt (p)*>
Die Datentyp Die Datentyp p<!ELEMENT p (#PCDATA|name|zeit|datum)*>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentyp Der Datentyp beschlussType <xsd:complexType name="beschlussType"> <xsd:sequence> <xsd:element ref="titel"/> <xsd:element ref="ziffer"/> <xsd:element name="inhalt" type="inhaltType"/> <xsd:element ref="resultat"/> </xsd:sequence> <xsd:attribute name="antragsteller" type="xsd:IDREFS" use="required"/> </xsd:complexType>
Die Datentypen Die Datentypen ziffer & resultat <xsd:element name="ziffer" type="xsd:string"/> <xsd:element name="resultat" type="xsd:string"/>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentyp Der Datentyp inhaltType <xsd:complexType name="inhaltType"> <xsd:sequence> <xsd:element name="p" type="pType" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType>
Der Datentyp Der Datentyp pType <xsd:complexType name="pType" mixed="true"> <xsd:choice minOccurs="0"> <xsd:element ref="ein_name"/> <xsd:element ref="ein_datum"/> <xsd:element ref="eine_zeit"/> </xsd:choice> </xsd:complexType>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Die Datentypen Die Datentypen ein_name, ein_datum & eine_zeit <xsd:element name="ein_name" type="xsd:string"/> <xsd:element name="ein_datum" type="xsd:string"/> <xsd:element name="eine_zeit" type="xsd:string"/>
Der Datentyp Der Datentyp kenntnisnahmeType <xsd:complexType name="kenntnisnahmeType"> <xsd:sequence> <xsd:element ref="titel"/> <xsd:element name="inhalt" type="inhaltType"/> </xsd:sequence> <xsd:attribute name="berichter" type="xsd:IDREFS" use="required"/> </xsd:complexType>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentyp Der Datentyp protokoll<!ELEMENT protokoll (%protokollkopf;,%teilnehmerliste;,(beschluss|kenntnisnahme)+)>
Und wie wird das alles zusammengesetzt?Und wie wird das alles zusammengesetzt?
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 2Übungsblatt 2
Der Datentyp Der Datentyp protokoll <xsd:element name="protokoll"> <xsd:complexType> <xsd:sequence> <xsd:element ref="titel"/> ... <xsd:element name="protokollfuehrer" type="protokollfuehrerType"/> <xsd:element name="teilnehmer" type="teilnehmerType"/> ... <xsd:element name="unentschuldigt" type="unentschuldigtType" minOccurs="0"/> <xsd:choice maxOccurs="unbounded"> <xsd:element name="beschluss" type="beschlussType"/> <xsd:element name="kenntnisnahme" type="kenntnisnahmeType"/> </xsd:choice> </xsd:sequence> </xsd:complexType> </xsd:element>
Und wie wird das alles zusammengesetzt?Und wie wird das alles zusammengesetzt?
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3
Stellen Sie die Gesamtzahl sowie die Anzahl der männlichen und der weiblichen Sitzungsteilnehmer fest.
<numberOfPersons>{let $t := count(doc("protokoll.xml")/protokoll/teilnehmer/person)let $g := count(doc("protokoll.xml")/protokoll/gaeste/person)return $t + $g}</numberOfPersons>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3
Stellen Sie die Gesamtzahl sowie die Anzahl der männlichen und der weiblichen Sitzungsteilnehmer fest.
<numberOfMen>{let $t := count(doc("protokoll.xml")/protokoll/teilnehmer/person)let $g := count(doc("protokoll.xml")/protokoll/gaeste/person)let $f1 := count(doc("protokoll.xml")/protokoll/teilnehmer/person/frau)let $f2 := count(doc("protokoll.xml")/protokoll/gaeste/person/frau)return $t + $g - $f1 - $f2}</numberOfMen>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3
Stellen Sie die Gesamtzahl sowie die Anzahl der männlichen und der weiblichen Sitzungsteilnehmer fest.
<numberOfWomen>{let $f1 := count(doc("protokoll.xml")/protokoll/teilnehmer/person/frau)let $f2 := count(doc("protokoll.xml")/protokoll/gaeste/person/frau)return $f1 + $f2}</numberOfWomen>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3
Extrahieren Sie die Personen, denen keine ID zugeordnet ist (kein „ident“-Attribut im <person>-Tag), generieren Sie dieses Attribut aus dem Nachname und erstellen Sie ein neues <person>-Tag. Der Rest des Protokolls soll dabei kopiert werden, so daß am Ende das komplette Protokoll wieder zur Verfügung steht, mit „ident“-Attribut für jede Person.
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3
Teilen Sie das Protokoll zwecks besserer Strukturierung in bedeutungsmäßige Blöcke ein (zB Kopf, Personen und Verlauf), und erstellen Sie ein XQuery, das den Inhalt des ursprünglichen Protokolls in diese Blöcke kopiert.
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3declare function local:bemCheck( $p ){if (compare($p/@bemerkung, '') = 1)then <person ident="{lower-case($p/name)}" bemerkung="{$p/@bemerkung}"> {$p/*} </person>else <person ident="{lower-case($p/name)}">{$p/*}</person>};
declare function local:identCheck( $p ){if (compare($p/@ident, '') = 1)then $pelse local:bemCheck($p)};
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3<protokoll> <protokollkopf>{for $n in doc("protokoll.xml")/protokoll/titel return $n}...{for $n in doc("protokoll.xml")/protokoll/protokollfuehrer return $n} </protokollkopf> <teilnehmerliste> <teilnehmer>{for $n in doc("protokoll.xml")/protokoll/teilnehmer/person return local:identCheck($n)} </teilnehmer> <gaeste> <entschuldigt> <unentschuldigt> </teilnehmerliste> <verlauf>{for $n in doc("protokoll.xml")/protokoll/* where (compare(name($n), "beschluss") = 0 or compare(name($n), "kenntnisnahme") = 0)return $n} </verlauf></protokoll>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3
Extrahieren Sie Abstimmungen, die nicht einstimmig getroffen wurden, sowie den zugehörigen Antragsteller.
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3
<kritischeBeschluesse>{for $n in doc("protokoll.xml")/protokoll/beschlusswhere (compare($n/resultat, "einstimmig") > 0 or compare($n/resultat, "einstimmig") < 0)return <kritischerBeschluss>{$n}{for $a in doc("protokoll.xml")/protokoll/*/personwhere (compare($n/@antragsteller, $a/@ident) = 0)return <antragsteller>{$a}</antragsteller>}</kritischerBeschluss>}</ kritischeBeschluesse >
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3
Erstellen Sie ein XQuery, um zu prüfen, ob in Traktat-Texten (Beschlüsse und Kenntnisnahmen) genannten Personen anwesend sind, oder ob über dritte gesprochen wird.
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3
<personen> <anwesende>{for $n in doc("protokoll.xml")/protokoll/*/inhalt/p/namereturn <person>{for $p in doc("protokoll.xml")/protokoll/teilnehmer/person/name union doc("protokoll.xml")/protokoll/gaeste/person/namewhere (ends-with($n, $p)) return $p} </person>} </anwesende> <abwesende></personen>
Übung 2: XML / XQuery
Vorlesung Datenbankeinsatz WS 04/05 Vorlesung Datenbankeinsatz WS 04/05 IPD IPD
Übungsblatt 3Übungsblatt 3
Extrahieren Sie die Kenntnisnahmen von Beschlüssen, die vor mehr als drei Sitzungen gefaßt wurden (Tip: Die Ziffer enthält die SitzungsNummer)
Sorry, ging gar nicht, da Kenntnisnahmen die Ziffer nicht enthalten ...