- Wiederholung/Übung - Einführung, XML-Grundlagen und -Konzepte 1 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Bestandteile hat ein XML-Dokument? Bestandteile eines XML-Dokuments XML-Dokument XML-Deklaration Namespace Kommentar Attribut Text Element <?xml version="1.0" encoding="iso-8859-1"?> <vorlesung titel="xml..." xmlns:dbis="http://www.minet.uni-jena.de/dbis/"> <! -Liste der Vorlesungsteilnehmer--> <dbis:teilnehmer dbis:matrikel="4711"> <dbis:name>mustermann</dbis:name> <dbis:vorname>max</dbis:vorname> <dbis:semester>5</dbis:semester> <dbis:studienfach>8</dbis:studienfach> </dbis:teilnehmer> <dbis:teilnehmer dbis:matrikel="4736"> <dbis:name>normalverbraucher</dbis:name> <dbis:vorname>otto</dbis:vorname> <dbis:semester>6</dbis:semester> <dbis:studienfach>10</dbis:studienfach> </dbis:teilnehmer> </vorlesung> 2 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Vorteile bietet XML? (6) Metasprache Offener Standard Trennung von Inhalt und Darstellung Vorteile von XML Lesbarkeit Plattformunabhängigkeit Einfacher, formaler und präziser Sprachentwurf 3 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Repräsentation passt zu unserem Beispiel? (1) (2) (3) 4 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Was ist Wohlgeformtheit und Gültigkeit? Welche Abhängigkeiten gelten? Wohlgeformheit (1) gültig wohlgeformt? (2) wohlgeformt gültig? Gültigkeit 5 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Prozesse finden statt? (1)? XML-Parsen (Analyse der Dokumentstruktur) <?xml version="1.0" encoding="iso-8859-1"?> <vorlesung titel="xml..."> <teilnehmer matrikel="4711"> <name>mustermann</name> <vorname>max</vorname> <semester>5</semester> <studienfach>8</studienfach> </teilnehmer> </vorlesung> <?xml version="1.0" encoding="iso-8859-1"?> <vorlesung titel="xml..."> <teilnehmer matrikel="4711"> <name>mustermann</name> <vorname>max</vorname> <semester>5</semester> <studienfach>8</studienfach> </teilnehmer> </vorlesung> (Rücküberführung zu Dokument) XML-Serialisieren (2)? 6 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Online Tools - Einführung, XML-Grundlagen und -Konzepte 7 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools XML Formatierer (http://www.bytechaser.com/en/resources/tp9h7nivzr/free-online-xml-formatting-tool.aspx) 8 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools Syntax Highlighter (http://tohtml.com/xml/) - auch für viele weitere Typen verwendbar 9 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Wiederholung/Übung - XML-Datenmodellierung / XML-Schemasprachen 11 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Schemasprachen haben wir kennengelernt? (4) RELAX NG DTD Schematron Welche XML-Schemasprachen XML-Schema 12 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wie heißen die Hauptelemente in DTDs? Document Type Definition (DTD) <!DOCTYPE vorlesung[ <!ELEMENT vorlesung (teilnehmer+)> <!ATTLIST vorlesung titel CDATA #REQUIRED> Attributliste Elementtyp ]> <!ELEMENT teilnehmer (name, vorname, semester, studienfach)> <!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT vorname (#PCDATA)> <!ELEMENT semester (#PCDATA)> <!ELEMENT studienfach (#PCDATA)> 13 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument dieser DTD? <!DOCTYPE vorlesung[ <!ELEMENT vorlesung (teilnehmer+)> <!ATTLIST vorlesung titel CDATA #REQUIRED> <!ELEMENT teilnehmer (name, vorname, semester, studienfach)> <!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED> ]> <!ELEMENT name (#PCDATA)> <!ELEMENT vorname (#PCDATA)> <!ELEMENT semester (#PCDATA)> <!ELEMENT studienfach (#PCDATA)> 14 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument dieser DTD? <!DOCTYPE vorlesung[ <!ELEMENT vorlesung (teilnehmer+)> <!ATTLIST vorlesung titel CDATA #REQUIRED untertitel CDATA #REQUIRED> <!ELEMENT teilnehmer (name, vorname, semester, studienfach)> <!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED> ]> <!ELEMENT name (#PCDATA)> <!ELEMENT vorname (#PCDATA)> <!ELEMENT semester (#PCDATA)> <!ELEMENT studienfach (#PCDATA)> 15 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument dieser DTD? <!DOCTYPE vorlesung[ <!ELEMENT vorlesung (teilnehmer+)> <!ATTLIST vorlesung titel CDATA #REQUIRED untertitel CDATA #IMPLIED> <!ELEMENT teilnehmer (name, vorname, semester, studienfach)> <!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED> ]> <!ELEMENT name (#PCDATA)> <!ELEMENT vorname (#PCDATA)> <!ELEMENT semester (#PCDATA)> <!ELEMENT studienfach (#PCDATA)> 16 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument dieser DTD? <!DOCTYPE vorlesung[ <!ELEMENT vorlesung (teilnehmer+)> <!ATTLIST vorlesung titel CDATA #REQUIRED> <!ELEMENT teilnehmer (name, vorname, semester)> <!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED> ]> <!ELEMENT name (#PCDATA)> <!ELEMENT vorname (#PCDATA)> <!ELEMENT semester (#PCDATA)> 17 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument dieser DTD? <!DOCTYPE vorlesung[ <!ELEMENT vorlesung (teilnehmer+, raum?)> <!ATTLIST vorlesung titel CDATA #REQUIRED> <!ELEMENT teilnehmer (name, vorname, semester, studienfach)> <!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT vorname (#PCDATA)> <!ELEMENT semester (#PCDATA)> <!ELEMENT studienfach (#PCDATA)> ]> <!ELEMENT raum(#pcdata)> 18 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Nachteile hat DTD? kaum Datentypen nur dokumentweite Eindeutigkeit keine XML-Dokumente Nachteile von DTD keine Sonderzeichen für Aufzählungstyp keine Namespaces separate Editoren 19 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wie charakterisieren sich die einzelnen Typen? Erzeugung eigener Typen Typen (1)? (2)? ohne (Kind-) Elemente und Attribute umfassen (Kind-) Elemente oder Attribute einfache Typen komplexe Typen einfacher Inhalt komplexer Inhalt (3)? (4)? ohne (Kind-) Elemente mit (Kind-) Elementen 20 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument diesem Schema? <?xml version="1.0" encoding="iso-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="vorlesung"> <xs:complextype> <xs:sequence> <xs:element maxoccurs="unbounded" name="teilnehmer"> <xs:complextype> <xs:sequence> <xs:element name="name" type="xs:string" /> <xs:element name="vorname" type="xs:string" /> <xs:element name="semester" type="xs:int" /> <xs:element name="studienfach" type="xs:int" /> </xs:sequence> <xs:attribute name="matrikel" type="xs:int" use="required" /> </xs:complextype> </xs:element> </xs:sequence> <xs:attribute name="titel" type="xs:string" use="required" /> </xs:complextype> </xs:element> </xs:schema> 21 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument diesem Schema? <?xml version="1.0" encoding="iso-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="vorlesung"> <xs:complextype> <xs:sequence> <xs:element maxoccurs="unbounded" name="teilnehmer"> <xs:complextype> <xs:sequence> <xs:element name="name" type="xs:int" /> <xs:element name="vorname" type="xs:int" /> <xs:element name="semester" type="xs:int" /> <xs:element name="studienfach" type="xs:int" /> </xs:sequence> <xs:attribute name="matrikel" type="xs:int" use="required" /> </xs:complextype> </xs:element> </xs:sequence> <xs:attribute name="titel" type="xs:string" use="required" /> </xs:complextype> </xs:element> </xs:schema> 22 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument diesem Schema? <?xml version="1.0" encoding="iso-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="vorlesung"> <xs:complextype> <xs:sequence> <xs:element maxoccurs="unbounded" name="teilnehmer"> </xs:element> </xs:sequence> <xs:attribute name="titel" type="xs:string" use="required" /> </xs:complextype> </xs:element> </xs:schema> 23 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument diesem Schema? <?xml version="1.0" encoding="iso-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element name="vorlesung"> <xs:complextype> <xs:sequence> <xs:element maxoccurs="unbounded" name="teilnehmer"> <xs:complextype> <xs:sequence> <xs:element name="name" type="xs:string" /> <xs:element name="vorname" type="xs:string" /> <xs:element name="semester" type="xs:string" /> <xs:element name="studienfach" type="xs:string" /> </xs:sequence> <xs:attribute name="matrikel" type="xs:int" use="required" /> </xs:complextype> </xs:element> </xs:sequence> <xs:attribute name="titel" type="xs:string" use="required" /> </xs:complextype> </xs:element> </xs:schema> 24 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument diesem Schema? <?xml version="1.0" encoding="iso-8859-1"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> <xs:element maxoccurs="unbounded" name="teilnehmer"> <xs:complextype> <xs:sequence> <xs:element name="name" type="xs:string" /> <xs:element name="vorname" type="xs:string" /> <xs:element name="semester" type="xs:int" /> <xs:element name="studienfach" type="xs:int" /> </xs:sequence> <xs:attribute name="matrikel" type="xs:int" use="required" /> </xs:complextype> </xs:element> </xs:schema> 25 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Online Tools - XML-Datenmodellierung / XML-Schemasprachen 26 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools DTD-Generator (http://www.on-xml.com/editor_demo.php) - ist gleichzeitig vollwertiger XML-Editor 27 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools XML-Schema-Generator (http://www.xmlforasp.net/codebank/system_xml_schema/buildschema/buildxmlschema.aspx) - verschiedene XML-Schema-Stile generierbar 28 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools XML-Validierung (http://xmlvalidation.com) - unterstützt DTD- und XML-Schema-Validierung 29 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Wiederholung/Übung - XML-Abfrage- und Transformationssprachen 31 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XML Warum sind die Attributwerte nicht im Ergebnis enthalten? XSLT 1.0 Standardregeln <?xml version="1.0" encoding="iso-8859-1"?> <vorlesung titel="xml..."> <teilnehmer matrikel="4711"> <name>mustermann</name> <vorname>max</vorname> <semester>5</semester> <studienfach>8</studienfach> </teilnehmer> <teilnehmer matrikel="4736"> <name>normalverbraucher</name> <vorname>otto</vorname> <semester>6</semester> <studienfach>10</studienfach> </teilnehmer> </vorlesung> <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> Der Name des Wurzelelements lautet: <xsl:value-of select="/child::node()/name()"/> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet> Ergebnis Der Name des Wurzelelements lautet: vorlesung Mustermann Max 5 8 Normalverbraucher Otto 6 10 32 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XSLT
Warum sind die Attributwerte nicht im Ergebnis enthalten? (1) XSLT 1.0 Standardregeln <?xml version="1.0" encoding="iso-8859-1"?> <vorlesung titel="xml..."> <teilnehmer matrikel="4711"> <name>mustermann</name> <vorname>max</vorname>... verwendete Standardregel <xsl:template match="*"> <xsl:apply-templates /> <xsl:template> (<xsl:apply-templates /> <xsl:apply-templates select="*" />) (2) <?xml version="1.0" encoding="iso-8859-1"?> <vorlesung titel="xml..."> <teilnehmer matrikel="4711"> <name>mustermann</name> <vorname>max</vorname>... ("*" "child::*") Attribute sind keine Kinder und daher nicht über die Achse child, sondern nur über die Achse attribute (@) selektierbar 33 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Warum sind die Attributwerte nicht im Ergebnis enthalten? XSLT XML Modifikation des Beispiels <?xml version="1.0" encoding="iso-8859-1"?> <vorlesung titel="xml..."> <teilnehmer matrikel="4711"> <name>mustermann</name> <vorname>max</vorname> <semester>5</semester> <studienfach>8</studienfach> </teilnehmer> <teilnehmer matrikel="4736"> <name>normalverbraucher</name> <vorname>otto</vorname> <semester>6</semester> <studienfach>10</studienfach> </teilnehmer> </vorlesung> <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> Der Name des Wurzelelements lautet: <xsl:value-of select="/child::node()/name()"/> <xsl:apply-templates/> </xsl:template> <xsl:template match="*"> <xsl:apply-templates select="* @"/> </xsl:template> </xsl:stylesheet> Ergebnis Der Name des Wurzelelements lautet: vorlesung XML... 4711 Mustermann Max 5 8 4736 Normalverbraucher Otto 6 10 34 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XPath 1.0 Datentypen (4) Zeichenketten Ein Text ID4711 007 XPath 1.0 Datentypen Zahlen 4711 0.815 <studienfach>8</studienfach> <studienfach>10</studienfach> Knotenmengen true false Wahrheitswerte 35 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wie leiten sich Wahrheitswerte ab? Wahrheitswert Zeichenketten Länge > 0 Länge = 0 true false Knotenmenge Menge ist nicht leer Menge ist leer ( ) true false Zahl Zahl 0 und Zahl NaN Zahl = 0 oder Zahl = NaN true false 36 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Zusammensetzung eines XPath 1.0 Ausdrucks am Beispiel Lokalisierungspfad (1)? child::vorlesung/child::teilnehmer[@matrikel="4711"]/child::name/child::text() child::teilnehmer[@matrikel="4711"] Lokalisierungsschritt (2)? Achse (3)? Knotentest (4)? Prädikat (5)? 37 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Achsen werden durch die Bereiche gekennzeichnet? ancestor preceding parent self child precedingsibling followingsibling following descendant 38 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Möglichkeiten bieten Knotentests? Knotentyp (1)? node() comment() text() Einschränkung nach teilnehmer * (2)? Knotenname 39 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Operatoren(-arten) sind in Prädikaten zulässig? (4) boolesche Operatoren and or Vergleichsoperatoren =,!= >, >= < (<), <= (<=) + - * div mod Operatoren arithmetische Operatoren Mengenoperatoren 40 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? der Name des Teilnehmers mit der Matrikelnummer 4711 vorlesung/teilnehmer[ @matrikel="4711" ]/name/text() Mustermann 41 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Vorlesungen die von mindestens zwei Teilnehmern besucht werden vorlesung[ count(teilnehmer) >= 2 ]/@titel titel="xml..." 42 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? alle Teilnehmer mit dem Studiengang 7 oder 8 vorlesung/teilnehmer[ studiengang = 7 or studiengang = 8 ]/@matrikel * * Im XML-Dokument heißt es nicht studiengang sondern studienfach 43 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? der Teilnehmer, der sich zuletzt eingeschrieben hat * vorlesung/teilnehmer[last()]/@matrikel matrikel="4736" * Annahme: Teilnehmer haben sich in der Reihenfolge eingeschrieben, in der sie im Dokument vermerkt sind 44 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Teilnehmer, die bereits überdurchschnittlich lange studieren vorlesung/teilnehmer[ semester/text() > ( sum(../teilnehmer/semester/text()) div (count(../teilnehmer)) ) ]/@matrikel matrikel="4736" 45 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Teilnehmer mit der größten Matrikelnummer vorlesung/teilnehmer[ (not(@matrikel < following-sibling::teilnehmer/@matrikel) or not(following-sibling::teilnehmer)) and (not(@matrikel < preceding-sibling::teilnehmer/@matrikel) or not(preceding-sibling::teilnehmer)) ]/@matrikel matrikel="4736" 46 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Funktion erfüllen die markierten XSLT-Anweisungen? XSLT 1.0 Basics für alle Childs der Wurzel ("/") in unserem Beispiel also alle Knoten des XML- Dokuments werden (falls vorhanden) weitere Template-Matchings durchgeführt für alle Childs der Wurzel ("/child::node()/name()") also stets genau einen Knoten wird der Name in das Transformationsergebnis geschrieben für die Wurzel wird ein spezifiziertes Template-Matching durchgeführt <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> Der Name des Wurzelelements lautet: <xsl:value-of select="/child::node()/name()"/> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet> 47 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wozu passen die Inhalte der Standardregeln? Element Wurzel Attribut <xsl:apply-templates /> <xsl:value-of select="."/> Prozessorinstruktion <! - keine Aktion --> Text Kommentar 48 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Template wird bei der Regelkollision verwendet? <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <xsl:apply-templates select="*/teilnehmer"/> </xsl:template> <xsl:template match="*"> 1 </xsl:template> <xsl:template match="vorlesung/teilnehmer"> 2 </xsl:template> <xsl:template match="teilnehmer"> 3 </xsl:template> </xsl:stylesheet> 49 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Möglichkeiten bieten XSLT 1.0 zum Kopieren von Knoten? xsl:copy (1)? kopiert einen einzelnen Knoten (aktuelle Kontextknoten) Möglichkeiten zum Kopieren von Knoten kopiert einen vollständigen (Teil-)Baum, entweder ausgehend vom Kontextknoten oder von beliebig selektierbarem Knoten (2)? xsl:copy-of 50 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche XSLT 1.0 Kontrollstrukturen haben wir kennengelernt? (3) bedingte Anweisungen (xsl:if) Schleifen (xsl:for-each) Welche Kontrollstrukturen Mehrfachverzweigungen (xsl:choose, xsl:when und xsl:otherwise) 51 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Platzhalter können in XSLT 1.0 verwendet werden? Variablen (1)? eher im Sinn einer Konstante zu verstehen, können innerhalb des definierten Kontexts verwendet werden Platzhalter in XSLT ähnlich zu Variablen, jedoch nur in Verbindung von benannten Templates (2)? Parameter 52 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen Wie lautet das Ergebnis und warum kommt es zustande? <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> </xsl:stylesheet> Mustermann Max 5 8 Normalverbraucher Otto 6 10 53 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen Wie lautet das Ergebnis und warum kommt es zustande? <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <xsl:apply-templates select="teilnehmer"/> </xsl:template> </xsl:stylesheet> 54 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen Wie lautet das Ergebnis und warum kommt es zustande? <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <xsl:apply-templates select="vorlesung/teilnehmer"/> </xsl:template> </xsl:stylesheet> Mustermann Max 5 8 Normalverbraucher Otto 6 10 55 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen Wie lautet das Ergebnis und warum kommt es zustande? <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <xsl:apply-templates select="vorlesung/teilnehmer/@*"/> </xsl:template> </xsl:stylesheet> 47114736 56 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen Wie lautet das Ergebnis und warum kommt es zustande? <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <xsl:for-each select="vorlesung/teilnehmer"> <xsl:value-of select="name"/> <xsl:if test="following-sibling::teilnehmer"> <xsl:text>, </xsl:text> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet> Mustermann, Normalverbraucher 57 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen Wie lautet das Ergebnis und warum kommt es zustande? <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="vorlesung"> <xsl:element name="verzeichnis"> <xsl:copy-of select="."/> <xsl:copy> <xsl:attribute name="titel">xml Fortsetzung</xsl:attribute> <xsl:copy-of select="teilnehmer"/> </xsl:copy> </xsl:element> </xsl:template> </xsl:stylesheet> <?xml version="1.0" encoding="iso-8859-1"?> <verzeichnis> <vorlesung titel="xml..."> <teilnehmer matrikel="4711">...</teilnehmer> <teilnehmer matrikel="4736">...</teilnehmer> </vorlesung> <vorlesung titel="xml Fortsetzung"> <teilnehmer matrikel="4711">...</teilnehmer> <teilnehmer matrikel="4736">...</teilnehmer> </vorlesung> </verzeichnis> 58 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Online Tools - XML-Abfrage- und Transformationssprachen 59 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools XPath-Scanner (http://chris.photobooks.com/xml/default.htm) - kann auch XSLT-Transformationen 60 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools XSLT-Prozessor (http://xslttest.appspot.com/) - besitzt Möglichkeit zur direkten Darstellung von HTML- Transformationsergebnissen 61 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Wiederholung/Übung - XML-Abfrage- und Transformationssprachen (Teil 2) 63 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Weiterentwicklungen ergaben sich durch XPath 2.0 (4) Sequenzen als Ersatz für Knotenmengen zusätzliche Ausdrücke Bedingungsausdrücke for-ausdrücke Quantifizierungsausdrücke Weiterentwicklungen in Anlehnung an XML-Schema (zzgl. 5 neuer Datentypen) erweitertes Typsystem erweiterte Operatoren und zahlreiche neue Funktionen neue Funktionen und Operatoren 64 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wie heißt das neue Konstrukt in XPath 2.0 und wie setzt es sich zusammen? XPath 2.0 Erweiterung des Datenmodells (1, "Ein Text") Sequenz (1)? Item Item (2)? (3)? (atomarer Typ) (atomarer Wert) 65 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Zusammensetzung eines XPath 2.0 Pfadausdrucks am Beispiel (1) Pfadausdruck? vorlesung/if (child) then (child::teilnehmer[@matrikel="4711"]/name) else "kein Teilnehmer" Lokalisierungsschritt (2)? XPath 2.0 Ausdruck (6)? (Bedingungsausdruck) child::teilnehmer[@matrikel="4711"] Achse (3)? Knotentest (4)? Prädikat (5)? 66 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Was gilt und warum gilt es? (1) (2) (3) (4) (5) (1 to 5) = reverse((5,4,3,2,1)) (1,2,3) = (3,2,1) ((1,3,2) > (1,2,3)) and ((1,3,2) < (1,2,3)) subsequence((1 to 5), 2, 1) = 2 0815 instance of xs:integer (6) (1,2,3,2) = (1,2,3) (7) 1,(2,3) = (1,2,3) 67 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche der Ausdrücke arbeiten mit Variablen? Bedingungsausdruck Quantifizierungsausdruck Variable for-ausdruck 68 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wo liegt der Unterschied zwischen den Vergleichsoperatoren? Sequenzvergleiche (und Einzelwertvergleiche) =,!=, <, >, <=, >= Unterschied eq, ne, lt, gt, le, ge Einzelwertvergleiche 69 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Teilnehmer mit der größten Matrikelnummer (vorlesung/teilnehmer[ @matrikel = max(parent::*/teilnehmer/@matrikel) ]/data(@matrikel)) (4736) vorlesung/teilnehmer[ (not(@matrikel < following-sibling::teilnehmer/@matrikel) or not(following-sibling::teilnehmer)) and (not(@matrikel < preceding-sibling::teilnehmer/@matrikel) or not(preceding-sibling::teilnehmer)) ]/@matrikel vgl. XPath 1.0 70 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Welche Veranstaltungen besuchen Max und Otto gemeinsam? (vorlesung/ (if (teilnehmer[@matrikel = 4711] and teilnehmer[@matrikel = 4736]) then @titel else ()) ) (XML...) 71 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? In welchen Semestern befinden sich die Teilnehmer der Vorlesung? (for $var1 in distinct-values(vorlesung/teilnehmer/semester) return concat( "Semester ", $var1, ": ", count(vorlesung/teilnehmer[semester = $var1]), " Teilnehmer") ) (Semester 5: 1 Teilnehmer, Semester 6: 1 Teilnehmer) 72 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Teilnehmer die im 5ten oder 6ten Semester sind bzw. deren Matrikelnummer mit 47 beginnt (vorlesung/teilnehmer[semester = 5 or semester = 6] /@matrikel, vorlesung/teilnehmer[starts-with(@matrikel, "47")] /@matrikel) (4711, 4736, 4711, 4736) 73 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Teilnehmer die im 5ten oder 6ten Semester sind bzw. deren Matrikelnummer mit 47 beginnt (vorlesung/teilnehmer[semester = 5 or semester = 6] /@matrikel union vorlesung/teilnehmer[starts-with(@matrikel, "47")] /@matrikel) (4711, 4736) 74 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Teilnehmer die im 5ten oder 6ten Semester sind bzw. deren Matrikelnummer mit 47 beginnt (vorlesung/teilnehmer[semester = 5 or semester = 6 or starts-with(@matrikel, "47")]/data(@matrikel)) (4711, 4736) 75 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Teilnehmer die im 5ten oder 6ten Semester sind bzw. deren Matrikelnummer mit 47 beginnt ((vorlesung/teilnehmer[semester = 5 or semester = 6], vorlesung/teilnehmer[starts-with(@matrikel, "47")]) /data(@matrikel)) (4711, 4736) 76 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Ist zu allen Teilnehmern ein Studienfach-Element enthalten? (data( every $teiln in vorlesung/teilnehmer satisfies $teiln/*[node-name(.) cast as xs:string = "studienfach"] )) true 77 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Aus welchen Klauseln besteht ein FLWOR-Ausdruck und wozu dienen diese? For definiert eine Variable, die eine Liste von Elementen durchläuft Let L definiert eine Variable, deren Wert eine ganze Liste von Elementen ist Where filtert das Ergebnis (ausgewählten Elemente) anhand einer Bedingung Order by sortiert das Ergebnis Return liefert das Ergebnis als Sequenz in der angegebenen Form zurück 78 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Selektionsklauseln sind im FLWOR-Ausdruck möglich? (2) for-klausel definiert Variable, die an jedes Element (Item) der Sequenz einzeln gebunden wird (per in) Selektionsklauseln definiert Variable, die an die ganze Sequenz gebunden wird (per :=) let-klausel 79 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welches Ergebnis resultiert für den Ausdruck in den einzelnen Fällen? for $var1 in (1,2) for $var2 in ("a","b") <t><v1>1</v1><v2>a</v2></t> <t><v1>1</v1><v2>b</v2></t> <t><v1>2</v1><v2>a</v2></t> <t><v1>2</v1><v2>b</v2></t> for $var1 in (1,2) let $var2 := ("a","b") <t><v1>1</v1><v2>a b</v2></t> <t><v1>2</v1><v2>a b</v2></t> Mehrere Variablen return <t><v1>{$var1}</v1><v2>{$var2}</v2></t> <t><v1>1 2</v1><v2>a</v2></t> <t><v1>1 2</v1><v2>b</v2></t> let $var1 := (1,2) for $var2 in ("a","b") <t><v1>1 2</v1><v2>a b</v2></t> let $var1 := (1,2) let $var2 := ("a","b") 80 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Ergebnisse liefern die FLWOR-Ausdrücke? let $var1 := (0) for $var2 in (1 to 5) let $var1 := $var1 + 1 return $var1 (1,1,1,1,1) let $var1 := (0) for $var2 in (1 to 5) for $var1 in $var1 + 1 return $var1 (1,1,1,1,1) Gültigkeitsbereich (3,3,3,3,3) let $var1 := (0) for $var2 in (1 to 5) let $var1 := $var1 + 1 let $var1 := $var1 + 2 return $var1 (1) let $var1 := (0) let $var2 := (1 to 5) let $var1 := $var1 + 1 return $var1 81 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Konstruktoren existieren in XPath 2.0? direkte Konstruktoren (1)? <name>inhalt</name> name="inhalt" Inhalt <!--Inhalt--> kein Konstruktor für Dokumentknoten <?name Inhalt?> Konstruktoren element name {Inhalt} attribute name {Inhalt} document {Inhalt} text {Inhalt} comment {Inhalt} processing-instruction name {Inhalt} (2)? berechnete Konstruktoren 82 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wie lassen sich XML-Dokumente klassifizieren? (1)? datenorientierte Dokumente Klassifizierung (2)? dokumentorientierte Dokumente 83 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Vorteile bietet XML? (6) strenge Schemata meist gezielter Zugriff auf Dokumentteile nötig standardisierter Datenaustausch datenorientierte Dokumente stark strukturierte und typisierte Speicherung XQuery zumeist Felddaten Dokumentreihenfolge meist irrelevant 84 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Vorteile bietet XML? (6) kaum vorhandene bzw. wenig strenge Schemata in der Regel Komplettzugriff (viel) Text und (wenig) Felddaten semistrukturiertes XML dokumentorientierte Dokumente XSLT Dokumentreihenfolge relevant Präsentation, Strukturierung oder Konvertierung von Dokumenten 85 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Die folgenden Beispielabfragen erwarten, dass im voraus das Beispiel- Dokument an die Variable $document gebunden werden muss. let $document := doc("http://www.informatik.uni-jena.de /dbis/lehre/ws2012/xml/beispiel.xml") <vorlesung titel="xml..."> <teilnehmer matrikel="4711"> <name>mustermann</name> <vorname>max</vorname> <semester>5</semester> <studienfach>8</studienfach> </teilnehmer> <teilnehmer matrikel="4736"> <name>normalverbraucher</name> <vorname>otto</vorname> <semester>6</semester> <studienfach>10</studienfach> </teilnehmer> </vorlesung> 86 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Wie heißen die Initialen der Teilnehmer? for $teiln in $document/vorlesung/teilnehmer let $vorname_kurz := concat(substring($teiln/vorname, 1, 1), ".", substring($teiln/name, 1, 1), ".") return <name>{$vorname_kurz}</name> <name>m.m.</name> <name>o.n.</name> 87 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Welche Teilnehmer sind nicht im 5ten Semester? for $teiln in $document/vorlesung/teilnehmer where $teiln/semester!= 5 return <matrikel>{$teiln/@matrikel}</matrikel> <matrikel matrikel="4736"/> 88 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Welche Teilnehmer sind nicht im 5ten Semester? for $teiln in $document/vorlesung/teilnehmer where $teiln/semester!= 5 return <matrikel>{data($teiln/@matrikel)}</matrikel> <matrikel>4736</matrikel> 89 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Sortiere die angegebenen Elemente nach dem Attribut j! for $var1 in ( <i j="1" k="a"/>, <i j="2" k="b"/>, <i k="c"/> ) order by document{$var1}/i/@j empty least return $var1 <i k="c"/> <i j="1" k="a"/> <i j="2" k="b"/> 90 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? In welchem Semester befindet sich die Mehrheit der Teilnehmer? let $subquery := ( for $sems in distinct-values($document/vorlesung/teilnehmer/semester) let $anz := count($document/vorlesung/teilnehmer[semester = $sems]) return document{<semester><sem>{$sems}</sem><anz>{$anz}</anz></semester>} ) return concat ("Die meisten Teilnehmer studieren im ", ($subquery/semester/sem[parent::*/anz = max($subquery/semester/anz)])[1], "ten Semester.") Die meisten Teilnehmer studieren im 5ten Semester. 91 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Online Tools - XML-Abfrage- und Transformationssprachen 92 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools XPath 2.0-Auswerter (http://www.qutoric.com/xslt/analyser/xpathtool.html) - XML-Dokument muss zuvor (per Drag-n-Drop) geuploadet werden 93 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools XQuery-Prozessor (http://www.zorba-xquery.com/html/demo) - setzt voraus, dass XML-Dokument online verfügbar ist 94 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Wiederholung/Übung - XML in relationalen Datenbanksystemen 96 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Gründe für XML-Datenbanken haben wir besprochen? XML in Datenbanken Warum? Datenaustausch sichere, dauerhafte Speicherung von (ausgetauschten) Dokumenten im Originalzustand (auch aufgrund rechtlicher Vorschriften)... Dokumentenverwaltung XML-Datenbanksystem als intelligentes und leistungsstarkes Backend mit Basisfunktionalitäten (wie bspw. Textsuchverfahren) für Dokumentenverwaltungssysteme XML effizientes Suchen in XML- Anwendungsdaten, Möglichkeit paralleler Mehrbenutzerzugriffe XML-basierte Anwendungen 97 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Modell für XML-Datenbanken haben wir kennengelernt? monolithische Ansatz fragmentorientierte Ansatz Modelle dokumentorientierte Ansatz 98 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche datenbankspezifischen Anforderungen stellen sich an XML-DBMS? Mehrbenutzerbetrieb Skalierbarkeit Transaktionskonzept (ACID) datenbankspezifische Sicherheit Verfügbarkeit Anforderungen Erweiterbarkeit Effizienz Speicherstrukturunabhängigkeit 99 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche XML-spezifischen Anforderungen stellen sich an XML-DBMS? Schemavorgabe und Validierung Strukturunabhängigkeit unterschiedlich granulare Möglichkeiten zur Autorisierung Schema- Evolution Dokumentenbehandlung Standardkonformität XML-spezifische Anforderungen Schemaunabhängigkeit offenes Inhaltsmodell Speicherung von Nicht-XML-Daten Web-Anbindung und andere Protokolle Kodierung und Internationalisierung XML-spezifische Schnittstellen zur Datenabfrage und manipulation 100 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Ansätze zur XML-Speicherung in rel. DBMS haben wir behandelt? inhaltsorientierte Zerlegung generisch definitorisch strukturorientierte Zerlegung XML in relationalen DBMS opake Speicherung 101 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche relationale XML-Speicherform wird beispielhaft dargestellt? strukturorientierte Zerlegung DOKUMENT- KENNUNG KNOTEN- NUMMER VORGÄNGER- NUMMER ORDNUNGS- ZAHL NAME 1 1 0 1 vorlesung WERT 1 2 1 titel XML... 1 3 1 1 teilnehmer 1 4 3 matrikel 4711 1 5 3 1 name Mustermann 1 6 3 2 vorname Max 1 7 3 <vorlesung titel="xml..."> 3 <teilnehmer semester matrikel="4711"> 5 1 8 3 4 <name>mustermann</name> <vorname>max</vorname> studienfach 8 <semester>5</semester> <studienfach>8</studienfach> </teilnehmer> </vorlesung> 102 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche relationale XML-Speicherform wird beispielhaft dargestellt? generische inhaltsorientierte Zerlegung CREATE TABLE TEILNEHMER (MATRIKEL INT NOT NULL, NAME VARCHAR(20) NOT NULL, VORNAME VARCHAR(20) NOT NULL, STUDIENFACH INT NOT NULL, SEMESTER INT NOT NULL) <!ELEMENT TEILNEHMER (Row*)> <!ELEMENT Row (MATRIKEL, NAME, VORNAME, SEMESTER, STUDIENFACH)> <!ELEMENT MATRIKEL (#PCDATA)> <!ELEMENT NAME (#PCDATA)> <!ELEMENT VORNAME (#PCDATA)> <!ELEMENT SEMESTER (#PCDATA)> <!ELEMENT STUDIENFACH (#PCDATA)> 103 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche relationale XML-Speicherform wird beispielhaft dargestellt? opake Speicherung CREATE TABLE VORLESUNG (ID INT NOT NULL, XML CLOB(1M)) <!ELEMENT vorlesung (teilnehmer+)> <!ATTLIST vorlesung titel CDATA #REQUIRED> <!ELEMENT teilnehmer (name, vorname, semester, studienfach)> <!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT vorname (#PCDATA)> <!ELEMENT semester (#PCDATA)> <!ELEMENT studienfach (#PCDATA)> 104 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche relationale XML-Speicherform wird beispielhaft dargestellt? strukturorientierte Zerlegung CREATE TABLE VORLESUNG (DOKUMENTKENNUNG INT NOT NULL, KNOTENNUMMER INT NOT NULL, VORGÄNGERNUMMER INT NOT NULL, ORDNUNGSZAHL INT NULL, NAME VARCHAR(1000) NOT NULL, WERT VARCHAR(1000) NULL) <!ELEMENT vorlesung (teilnehmer+)> <!ATTLIST vorlesung titel CDATA #REQUIRED> <!ELEMENT teilnehmer (name, vorname, semester, studienfach)> <!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT vorname (#PCDATA)> <!ELEMENT semester (#PCDATA)> <!ELEMENT studienfach (#PCDATA)> 105 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche relationale XML-Speicherform wird beispielhaft dargestellt? generische inhaltsorientierte Zerlegung MATRIKEL NAME VORNAME SEMESTER STUDIENFACH 4711 Mustermann Max 5 8 <TEILNEHMER> <ROW> <MATRIKEL>4711</MATRIKEL> <NAME>Mustermann</NAME> <VORNAME>Max</VORNAME> <SEMESTER>5</SEMESTER> <STUDIENFACH>8</STUDIENFACH> </ROW> </TEILNEHMER> 106 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Aspekte werden durch SQL/XML genormt? Abbildungsvorschriften zwischen SQL und XML relationaler Datentyp XML SQL/XML XML-spezifische (SQL-)Funktionen 107 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Typen von Funktionen werden durch SQL/XML genormt? Konstruktionsfunktionen Funktion zur Zerlegung Funktion zur XML-Schemavalidierung XML-spezifische (SQL-)Funktionen Konvertierungsfunktionen Funktion zur Auswertung 108 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Transformiere die Daten jedes Teilnehmers ins XML-Format! MATRIKEL NAME VORNAME SEMESTER STUDIENFACH 4711 Mustermann Max 5 8 4736 Normalverbraucher Otto 6 10 SELECT XMLELEMENT(NAME "teilnehmer", XMLATTRIBUTES( MATRIKEL AS "matrikel" ), XMLFOREST( NAME AS "name", VORNAME AS "vorname", SEMESTER AS "semester", STUDIENFACH AS "studienfach" ) ) FROM TEILNEHMER <teilnehmer matrikel="4711"> <name>mustermann</name> <vorname>max</vorname> <semester>5</semester> <studienfach>8</studienfach> </teilnehmer> <teilnehmer matrikel="4711"> <name>normalverbraucher</name> <vorname>otto</vorname> <semester>6</semester> <studienfach>10</studienfach> </teilnehmer> 109 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Erstelle im XML-Format eine Liste aller Teilnehmer! MATRIKEL NAME VORNAME SEMESTER STUDIENFACH 4711 Mustermann Max 5 8 4736 Normalverbraucher Otto 6 10 SELECT XMLELEMENT(NAME "TEILNEHMERLISTE", XMLAGG( XMLELEMENT(NAME "TEILNEHMER", CONCAT(VORNAME, CONCAT(' ', NAME) ) ) ) ) FROM TEILNEHMER; <TEILNEHMERLISTE> <TEILNEHMER> Max Mustermann </TEILNEHMER> <TEILNEHMER> Otto Normalverbraucher </TEILNEHMER> </TEILNEHMERLISTE> 110 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Erstelle im XML-Format eine Liste aller Teilnehmer in Abhängigkeit ihres Studienfachs! MATRIKEL NAME VORNAME SEMESTER STUDIENFACH 4711 Mustermann Max 5 8 4736 Normalverbraucher Otto 6 10 SELECT XMLELEMENT(NAME "TEILNEHMERLISTE", XMLAGG(SUB.FACHLISTE) ) FROM ( SELECT XMLELEMENT(NAME "STUDIENFACH", XMLATTRIBUTES(STUDIENFACH AS "ID"), XMLAGG( XMLELEMENT(NAME "TEILNEHMER", CONCAT(VORNAME, CONCAT(' ', NAME) ) ) ) ) AS FACHLISTE FROM TEILNEHMER GROUP BY STUDIENFACH) AS SUB; <TEILNEHMERLISTE> <STUDIENFACH ID="8"> <TEILNEHMER> Max Mustermann </TEILNEHMER> </STUDIENFACH> <STUDIENFACH ID="10"> <TEILNEHMER> Otto Normalverbraucher </TEILNEHMER> </STUDIENFACH> </TEILNEHMERLISTE> 111 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Ermittle die Matrikelnummern der Teilnehmer! ID XML_DATEN 1 <teilnehmer matrikel="4711"> <name>mustermann</name><vorname>max</vorname> <semester>5</semester><studienfach>8</studienfach> </teilnehmer> SELECT XMLQUERY( 'for $var1 in //teilnehmer return $var1/@matrikel' PASSING XML_DATEN ) AS ERGEBNIS FROM TEILNEHMER ERGEBNIS 4711 112 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Prüfe ob jede Matrikelnummer nur einmal vergeben wurde! ID XML_DATEN 1 <teilnehmer matrikel="4711"> <name>mustermann</name><vorname>max</vorname> <semester>5</semester><studienfach>8</studienfach> </teilnehmer> SELECT XMLQUERY( 'for $var1 in //teilnehmer return $var1/@matrikel' PASSING XML_DATEN ) AS MATRIKEL, COUNT(*) AS PRUEFWERT FROM TEILNEHMER GROUP BY PRUEFWERT ORDER BY PRUEFWERT DESC FETCH FIRST 1 ROW ONLY; MATRIKEL 4711 1 PRUEFWERT 113 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Extrahiere die Matrikelnummer aus den XML-Daten und verwende sie als ID! ID XML_DATEN 1 <teilnehmer matrikel="4711"> <name>mustermann</name><vorname>max</vorname> <semester>5</semester><studienfach>8</studienfach> </teilnehmer> ID XML_DATEN UPDATE TEILNEHMER T_NEU SET ID = SELECT X.MATRIKEL FROM TEILNEHMER T_ALT, XMLTABLE( '$xml_daten/teilnehmer' PASSING T_ALT.XML_DATEN AS "xml_daten" COLUMNS MATRIKEL INTEGER PATH '@matrikel', ) X WHERE T_ALT.ID = T_NEU.ID; 4711 <teilnehmer matrikel="4711"> <name>mustermann</name><vorname>max</vorname> <semester>5</semester><studienfach>8</studienfach> </teilnehmer> 114 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen Was wird abgefragt und wie lautet das Ergebnis? Überführe die Inhalte der XML-Daten in separate Spaltenwerte! ID XML_DATEN 1 <teilnehmer matrikel="4711"> <name>mustermann</name><vorname>max</vorname> <semester>5</semester><studienfach>8</studienfach> </teilnehmer> SELECT X.MATRIKEL, X.NAME, X.VORNAME, X.SEMESTER, X.STUDIENFACH FROM TEILNEHMER T, XMLTABLE( '$xml_daten/teilnehmer' PASSING T.XML_DATEN AS "xml_daten" COLUMNS MATRIKEL INTEGER PATH '@matrikel', NAME VARCHAR(20) PATH 'name', VORNAME VARCHAR(20) PATH 'vorname', SEMESTER INTEGER PATH 'semester', STUDIENFACH INTEGER PATH 'studienfach' ) X; MATRIKEL NAME VOR- NAME 4711 Mustermann SEMESTER Max 5 8 STUDIEN- FACH 115 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen