- 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 2 <?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> XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Welche Vorteile bietet XML? (6) Metasprache Trennung von Inhalt und Darstellung Offener Standard 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? (1) gültig wohlgeformt ? Wohlgeformheit (2) wohlgeformt gültig ? 5 Gültigkeit 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 Schematron DTD 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> <!ELEMENT teilnehmer (name, vorname, semester, studienfach)> <!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED> Attributliste <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT Elementtyp name (#PCDATA)> vorname (#PCDATA)> semester (#PCDATA)> 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 <!ELEMENT <!ELEMENT <!ELEMENT name (#PCDATA)> vorname (#PCDATA)> semester (#PCDATA)> 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 <!ELEMENT <!ELEMENT <!ELEMENT name (#PCDATA)> vorname (#PCDATA)> semester (#PCDATA)> 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 <!ELEMENT <!ELEMENT <!ELEMENT name (#PCDATA)> vorname (#PCDATA)> semester (#PCDATA)> 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 <!ELEMENT <!ELEMENT <!ELEMENT name (#PCDATA)> vorname (#PCDATA)> semester (#PCDATA)> 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 separate Editoren keine Namespaces 19 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Wie charakterisieren sich die einzelnen Typen? Erzeugung eigener Typen Typen ohne (Kind-) Elemente und Attribute (1) ? (2) ? einfache Typen komplexe Typen einfacher Inhalt (3) ? ohne (Kind-) Elemente 20 umfassen (Kind-) Elemente oder Attribute komplexer Inhalt (4) ? mit (Kind-) Elementen 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 Warum sind die Attributwerte nicht im Ergebnis enthalten? XSLT XSLT 1.0 Standardregeln XML <?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> <?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> 32 Der Name des Wurzelelements lautet: vorlesung Mustermann Max 5 8 Ergebnis Normalverbraucher Otto 6 10 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Warum sind die Attributwerte nicht im Ergebnis enthalten? XSLT 1.0 Standardregeln verwendete Standardregel (1) (2) <?xml version="1.0" encoding="ISO-8859-1"?> <vorlesung titel="XML ..."> <teilnehmer matrikel="4711"> <name>Mustermann</name> <vorname>Max</vorname> ... <?xml version="1.0" encoding="ISO-8859-1"?> <vorlesung titel="XML ..."> <teilnehmer matrikel="4711"> <name>Mustermann</name> <vorname>Max</vorname> ... <xsl:template match="*"> <xsl:apply-templates /> <xsl:template> (<xsl:apply-templates /> ≙ <xsl:apply-templates select="*" />) ("*" ≙ "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? Modifikation des Beispiels XSLT <?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> XML <?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> 34 Ergebnis Der Name des Wurzelelements lautet: vorlesung XML ... 4711 Mustermann Max 5 8 4736 Normalverbraucher Otto 6 10 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen XPath 1.0 Datentypen (4) Zeichenketten Zahlen Ein Text ID4711 007 4711 0.815 XPath 1.0 Datentypen <studienfach>8</studienfach> <studienfach>10</studienfach> Knotenmengen 35 true false Wahrheitswerte XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Wie leiten sich Wahrheitswerte ab? Wahrheitswert Länge > 0 true Länge = 0 false Zeichenketten Menge ist nicht leer true Knotenmenge Menge ist leer (∅) false Zahl ≠ 0 und Zahl ≠ NaN true Zahl Zahl = 0 oder Zahl = NaN 36 false XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Zusammensetzung eines XPath 1.0 Ausdrucks am Beispiel (1) ? Lokalisierungspfad child::vorlesung/child::teilnehmer[@matrikel="4711"]/child::name/child::text() (2) ? Lokalisierungsschritt child::teilnehmer[@matrikel="4711"] (3) ? Achse 37 (4) ? Knotentest (5) ? Prädikat XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Welche Achsen werden durch die Bereiche gekennzeichnet? ancestor precedingsibling parent followingsibling self preceding child following descendant 38 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Welche Möglichkeiten bieten Knotentests? Knotentyp (1) ? node() comment() text() Einschränkung nach teilnehmer * Knotenname (2) ? 39 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Welche Operatoren(-arten) sind in Prädikaten zulässig? (4) boolesche Operatoren Vergleichsoperatoren and or + * div mod =, != >, >= &lt; (<), &lt;= (<=) Operatoren | arithmetische Operatoren 40 Mengenoperatoren 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 XMLDokuments – 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 xsl:copy-of (2) ? 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 Parameter (2) ? 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> <?xml version="1.0" encoding="ISO-8859-1"?> </xsl:template> <verzeichnis> </xsl:stylesheet> <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 HTMLTransformationsergebnissen 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) erweiterte Operatoren und zahlreiche neue Funktionen erweitertes Typsystem 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) ? Sequenz (1, "Ein Text") Item (2) ? (atomarer Typ) 65 Item (3) ? (atomarer Wert) XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Zusammensetzung eines XPath 2.0 Pfadausdrucks am Beispiel Pfadausdruck (1) ? vorlesung/if (child) then (child::teilnehmer[@matrikel="4711"]/name) else "kein Teilnehmer" Lokalisierungsschritt (2) ? XPath 2.0 Ausdruck (6) ? child::teilnehmer[@matrikel="4711"] (Bedingungsausdruck) (3) ? Achse 66 (4) ? Knotentest (5) ? Prädikat XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Was gilt und warum gilt es? (1) (2) 67 (1 to 5) = reverse((5,4,3,2,1)) (1,2,3) = (3,2,1) (3) ((1,3,2) > (1,2,3)) and ((1,3,2) < (1,2,3)) (4) subsequence((1 to 5), 2, 1) = 2 (5) 0815 instance of xs:integer (6) (1,2,3,2) = (1,2,3) (7) 1,(2,3) = (1,2,3) 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 70 vgl. XPath 1.0 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? F For – definiert eine Variable, die eine Liste von Elementen durchläuft L Let – definiert eine Variable, deren Wert eine ganze Liste von Elementen ist W Where – filtert das Ergebnis (ausgewählten Elemente) anhand einer Bedingung O Order by – sortiert das Ergebnis R 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") 80 <t><v1>1 2</v1><v2>a b</v2></t> let $var1 := (1,2) let $var2 := ("a","b") 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 let $var1 := (0) for $var2 in (1 to 5) for $var1 in $var1 + 1 return $var1 (1,1,1,1,1) (1,1,1,1,1) Gültigkeitsbereich (3,3,3,3,3) (1) let $var1 := for $var2 in let $var1 := let $var1 := return $var1 81 (0) (1 to 5) $var1 + 1 $var1 + 2 let $var1 := (0) let $var2 := (1 to 5) let $var1 := $var1 + 1 return $var1 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 attribute name document text comment processing-instruction name {Inhalt} {Inhalt} {Inhalt} {Inhalt} {Inhalt} {Inhalt} (2) ? berechnete Konstruktoren 82 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Wie lassen sich XML-Dokumente klassifizieren? (1) ? datenorientierte Dokumente Klassifizierung dokumentorientierte Dokumente (2) ? 83 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Welche Vorteile bietet XML? (6) strenge Schemata meist gezielter Zugriff auf Dokumentteile nötig standardisierter Datenaustausch datenorientierte Dokumente XQuery zumeist Felddaten stark strukturierte und typisierte Speicherung Dokumentreihenfolge meist irrelevant 84 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen Welche Vorteile bietet XML? (6) in der Regel Komplettzugriff kaum vorhandene bzw. wenig strenge Schemata (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 BeispielDokument 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? sichere, dauerhafte Speicherung von (ausgetauschten) Dokumenten im Originalzustand (auch aufgrund rechtlicher Vorschriften) Datenaustausch ... Dokumentenverwaltung XML-Datenbanksystem als intelligentes und leistungsstarkes Backend mit Basisfunktionalitäten (wie bspw. Textsuchverfahren) für Dokumentenverwaltungssysteme 97 XML effizientes Suchen in XMLAnwendungsdaten, Möglichkeit paralleler Mehrbenutzerzugriffe XML-basierte Anwendungen 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 Anforderungen Verfügbarkeit Erweiterbarkeit Sicherheit 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 Schemaunabhängigkeit SchemaEvolution Dokumentenbehandlung Standardkonformität XML-spezifische Anforderungen 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 DOKUMENTKENNUNG KNOTENNUMMER VORGÄNGERNUMMER ORDNUNGSZAHL NAME 1 1 0 1 vorlesung 1 2 1 1 3 1 1 4 3 1 5 3 1 6 3 1 7 3 1 8 3 102 titel 1 WERT XML... teilnehmer matrikel 4711 1 name Mustermann 2 vorname Max <vorlesung titel="XML ..."> 3 <teilnehmer semester 5 matrikel="4711"> <name>Mustermann</name> 4 studienfach 8 <vorname>Max</vorname> <semester>5</semester> <studienfach>8</studienfach> </teilnehmer> </vorlesung> 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 <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT 103 MATRIKEL (#PCDATA)> NAME (#PCDATA)> VORNAME (#PCDATA)> SEMESTER (#PCDATA)> STUDIENFACH (#PCDATA)> 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 <!ELEMENT <!ELEMENT <!ELEMENT 104 name (#PCDATA)> vorname (#PCDATA)> semester (#PCDATA)> studienfach (#PCDATA)> 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 <!ELEMENT <!ELEMENT <!ELEMENT 105 name (#PCDATA)> vorname (#PCDATA)> semester (#PCDATA)> studienfach (#PCDATA)> 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 109 <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> 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; 110 <TEILNEHMERLISTE> <TEILNEHMER> Max Mustermann </TEILNEHMER> <TEILNEHMER> Otto Normalverbraucher </TEILNEHMER> </TEILNEHMERLISTE> 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; 111 <TEILNEHMERLISTE> <STUDIENFACH ID="8"> <TEILNEHMER> Max Mustermann </TEILNEHMER> </STUDIENFACH> <STUDIENFACH ID="10"> <TEILNEHMER> Otto Normalverbraucher </TEILNEHMER> </STUDIENFACH> </TEILNEHMERLISTE> 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 112 ERGEBNIS 4711 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; 113 MATRIKEL PRUEFWERT 4711 1 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> 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; 114 ID XML_DATEN 4711 <teilnehmer matrikel="4711"> <name>Mustermann</name><vorname>Max</vorname> <semester>5</semester><studienfach>8</studienfach> </teilnehmer> 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; 115 MATRIKEL NAME VORNAME SEMESTER STUDIENFACH 4711 Mustermann Max 5 8 XML-Grundlagen, -Sprachen, -Datenhaltungsfragen