Lösning Tentamen IV1023 Avancerad Datahantering Med XML 2011-10-20
Total Page:16
File Type:pdf, Size:1020Kb
KTH/ICT/SCS IV1023 Lösning Tenta 2011-10-20 nikos dimitrakas Lösning Tentamen IV1023 Avancerad datahantering med XML 2011-10-20 Tentan består av 3 delar: Del 1 Teori och modellering (uppgift 1, 2, 3) Del 2 Frågespråk för SSD och XML (uppgift 4, 5) Del 3 XML och relationsdatabaser (uppgift 6) Tentan betygsätts enligt skalan F/Fx/E/D/C/B/A. För E krävs c:a 60% av totalpoängen, men också c:a 40% av poängen för varje del. Man måste alltså uppvisa kunskaper i alla tre områden (tentadelar). De exakta betygsgränserna för A-E är: Hela tentan Per del A-gräns 94% 87% B-gräns 85% 75% C-gräns 77% 64% D-gräns 68% 52% E-gräns 60% 40% Får man minst 75% på en del utan att uppnå E-gränsen, får man rest (Fx) (på de delar som man inte fick 75%), dvs möjligheten att endast göra vissa delar vid nästa tenta och kan då få högst E. Man behöver inte använda sig av denna möjlighet. Använder man Fx/Rest gäller E-gränserna för de delar man skriver: 60% på hela tentan och 40% per del. Skriv endast på en sida av varje blad! Skriv namn och uppgiftsnummer på varje blad! Fyll i skanningsbladet så att det framgår vilka uppgifter som har lösts och hur många blad som har lämnats in! Inga hjälpmedel tillåtna förutom ordböcker för översättning mellan svenska och främmande språk LYCKA TILL! KTH/ICT/SCS IV1023 Lösning Tenta 2011-10-20 nikos dimitrakas Uppgift 1 (9 poäng) Uppgift 1 består av 9 frågor. Några frågor är flervalsfrågor där det alternativ som är rätt skall väljas (bara ett alternativ är rätt). Några frågor är termer som skall förklaras kortfattat så att det framgår att man förstår vad termen betyder. Inga långa uppsatser, tack. Förklara följande termer: 1. SVG 2. shredding 3. well-formed XML 4. processing-instruction Välj ett av alternativen för var och en av flervalsfrågorna nedan: 5. Vilken nodtyp kan inte vara en child till en elementnod enligt XQuery-modellen? a. element b. text c. comment d. attribute 6. XML står för: a. Extendable Meta Language b. Extensible Meta Language c. Extendable Markup Language d. Extensible Markup Language 7. Ett rdf:predicate måste alltid vara a. En resurs av typen rdfs:Container b. En resurs av typen rdf:Property c. En literal d. En resurs av typen rdfs:Class 8. Vilket av följande är korrekt? a. Ett element kan innehålla antingen subelement eller kommentarer. b. Ett element får inte ha ett subelement med samma namn som ett attribut. c. Ett element får inte tillhöra flera namespaces. d. Två subelement under samma element får inte vara identiska. e. Ett element och ett subelement får inte ha samma namn. 9. Vad kan man inte göra med XQuery Update facility? a. Byta plats på två syskon-elementnoder. b. Skapa flera nya noder samtidigt. c. Ta bort en elementnod som har subelement. d. Ersätta en nod med två nya noder. e. Skapa en kommentarnod som sista nod i en elementnod. 1. Scalable Vector Graphics - Ett XML-baserat språk för att representera vektorgrafik. 2. Shredding innebär att man delar upp ett XML-dokument till sina data-element och placerar värdena i t ex en relationsdatabas. 3. Ett XML-dokument som har ett rotelement och är syntaktiskt korrekt så att alla element är nästlade i varandra korrekt, alla element och attribut öppnas och stängs korrekt. Ett well-formed XML-dokument skall börja med XML-deklarationen. 4. En speciell typ av XML-nod som har följande format: <?namn innehåll?> XML- deklarationen är en processing-instruction. 5. d 6. d 7. b 8. c 9. a KTH/ICT/SCS IV1023 Lösning Tenta 2011-10-20 nikos dimitrakas Uppgift 2 (3 poäng) Använd RDF och RDFS för att beskriva nedanstående information! Lösningen skall vara antingen grafer eller XML. En Fanta 500 ml kostar 11 kronor. Vi kan skapa en resurs för "Fanta 500 ml" som har tre properties: namn, storlek och pris: Fanta 500 storlek namn pris 11 P Som RDF/XML blir det enligt följande: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description about="P"> <namn>Fanta</namn> <storlek>500</storlek> <pris>Volvo</pris> </rdf:Description> </rdf:RDF> Resursen ovan borde tillhöra en klass och tre properties borde skapas med den klassen som domain: rdfs:Class namn rdf:type rdfs:domain rdf:type rdf:type rdfs:domain storlek rdf:Property Produkt rdfs:domain rdf:type pris rdfs:range rdfs:range rdfs:range rdfs:Literal KTH/ICT/SCS IV1023 Lösning Tenta 2011-10-20 nikos dimitrakas I RDF/XML ser det ut såhär: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> <rdfs:Class rdf:ID="Produkt" /> <rdf:Property rdf:ID="namn"> <rdfs:domain rdf:resource="Produkt"/> <rdfs:range rdf:resource="rdfs:Literal"/> </rdf:Property> <rdf:Property rdf:ID="storlek"> <rdfs:domain rdf:resource="Produkt"/> <rdfs:range rdf:resource="rdfs:Literal"/> </rdf:Property> <rdf:Property rdf:ID="pris"> <rdfs:domain rdf:resource="Produkt"/> <rdfs:range rdf:resource="rdfs:Literal"/> </rdf:Property> </rdf:RDF> Man kan även tänka sig göra produktens namn till en klass, t ex "Märke". Man kan även utöka modellen med att ha priset och storleken som resurser som har värde och valuta, respektive värde och måttenhet. Informationen om resurserna skulle kunna även representeras som reifierade påståenden (rdf:Statement) med subjekt, predikat och objekt. Resurserna i RDF/XML kan representeras med den förkortade syntaxen där klassens namn blir elementets namn. Det tidigare XML-dokumentet skulle då bli såhär: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <Produkt rdf:about="P"> <namn>Fanta</namn> <storlek>500</storlek> <pris>Volvo</pris> </Produkt> </rdf:RDF> KTH/ICT/SCS IV1023 Lösning Tenta 2011-10-20 nikos dimitrakas Uppgift 3 (3 poäng) Ta fram en DTD för att representera samma information som relationsmodellen nedan! Tabellen Plantering innehåller information om vad som har platerats i varje skog vid varje datum, medan tabellen Skogsträd innehåller information om den aktuella mängden träd av varje typ i varje skog. <!ELEMENT DB (Trädtyp*, Skog*)> <!ELEMENT Trädtyp EMPTY> <!ELEMENT Skog (Träd*, Planteringstillfälle*)> <!ELEMENT Träd EMPTY> <!ELEMENT Planteringstillfälle (Plantering+)> <!ELEMENT Plantering EMPTY> <!ATTLIST Trädtyp namn ID #REQUIRED medellivslängd CDATA #REQUIRED> <!ATTLIST Skog namn ID #REQUIRED ytakvm CDATA #REQUIRED> <!ATTLIST Träd typ IDREF #REQUIRED antal CDATA #REQUIRED> <!ATTLIST Planteringstillfälle datum CDATA #REQUIRED> <!ATTLIST Plantering trädtyp IDREF #REQUIRED antal CDATA #REQUIRED> Eftersom ID och IDREF har använts, måste vi förutsätta att ingen trädtyp har samma namn som en skog. Annars kan man använda en surrogatnyckel (som vi gjorde i relationsdatabasen). Vi kan även ha attributen definierade endast som CDATA men då blir det ingen kontroll att referensvärdena finns och att dubbletter inte förekommer. En annan lösning är att nästla trädtyperna som subelement till Skog och Plantering, men då har vi redundans som vi kanske vill undvika. Det är även korrekt att använda element istället för attribut eller nästla på något annat sätt, t ex sätta trädtyperna under rotelementet och nästla skog och planteringar i trädtyperna, men det känns mindre naturligt. KTH/ICT/SCS IV1023 Lösning Tenta 2011-10-20 nikos dimitrakas Uppgift 4 (2 + 2 = 4 poäng) Betrakta nedanstående XML-dokument som endast innehåller testdata för att illustrera strukturen. XML-dokumentet innehåller information om olika organisationer och deras medlemmar. Ni kan förutsätta att alla namn är unika, dvs inga två organisationer har samma namn och inga två personer har samma namn. <?xml version="1.0" encoding="ISO-8859-1"?> <OrgDB> <Organisation namn="Träd i staden" skapades="1999"> <Medlem namn="Lisa Berg" från="1999" till="2001"/> <Medlem namn="Marcus Berg" från="1999" till="2008"/> <Medlem namn="Lisa Berg" från="2005"/> <Medlem namn="Karl Sjögren" från="2000"/> </Organisation> <Organisation namn="Rädda valen" skapades="2008"> <Medlem namn="Lisa Berg" från="2008" till="2010"/> <Medlem namn="Lisa Sunesson" från="2008"/> <Medlem namn="Mia Appelgren" från="2009"/> <Medlem namn="Patrik Nordlander" från="2008" till="2009"/> </Organisation> <Organisation namn="Schacksällskapet" skapades="1991"> <Medlem namn="Bertil Karlgren" från="1991" till="2008"/> <Medlem namn="Lisa Sunesson" från="2000" till="2004"/> <Medlem namn="Mia Appelgren" från="2004"/> <Medlem namn="Katrin Ljung" från="1993" till="1997"/> <Medlem namn="Katrin Ljung" från="2002" till="2006"/> <Medlem namn="Anders Ljung" från="1993" till="1997"/> <Medlem namn="Anders Ljung" från="2003"/> </Organisation> </OrgDB> Skriv XQuery för följande: a) Ta fram information om antal aktuella medlemmar per organisation! Resultatet skall ha följande struktur: <Resultat> <Organisation> <Namn>namnet</Namn> <AntalMedlemmar>antalet</AntalMedlemmar> </Organisation> <Organisation> <Namn>namnet</Namn> <AntalMedlemmar>antalet</AntalMedlemmar> </Organisation> </Resultat> element Resultat { for $o in //Organisation let $n := element Namn {$o/@namn/string()} let $am := element AntalMedlemmar {count($o/Medlem[not(@till)])} return element Organisation {$n, $am} } KTH/ICT/SCS IV1023 Lösning Tenta 2011-10-20 nikos dimitrakas b) Ta fram namn på organisationer som varje person har någon gång varit medlem i! Resultatet skall ha följande struktur: <Resultat> <Person namn=""> <Organisation namn=""/> <Organisation namn=""/> </Person> <Person namn=""> <Organisation namn=""/> <Organisation namn=""/> </Person> </Resultat> element Resultat { for $pn in distinct-values(//Medlem/@namn) let $orgs := for $o in //Organisation[Medlem/@namn = $pn] return element Organisation {$o/@namn} return element Person {attribute namn {$pn}, $orgs} } Eller med hjälp av preceding-axis (så att vi inte behöver återkonstruera attributet namn): element Resultat { for $pn in //Medlem[not(@namn = preceding::Medlem/@namn)]/@namn let $orgs := for $o in //Organisation[Medlem/@namn = $pn] return element Organisation {$o/@namn} return element Person {$pn, $orgs} } KTH/ICT/SCS IV1023 Lösning Tenta 2011-10-20 nikos dimitrakas Uppgift 5 (3 poäng) Betrakta XML-dokumentet i uppgift 4! Skriv ett XSLT (med XSLT 1.0) för följande beskrivning! Ta fram en HTML-sida där varje person har en rubrik och en tabell med sina medlemskap.