Lösungen der Aufgaben zur Klausurvorbereitung
Transcription
Lösungen der Aufgaben zur Klausurvorbereitung
HTW Dresden Fakultät Informatik/Mathematik Internettechnologien Lösungen der Aufgaben zur Klausurvorbereitung Aufgabe 1: a) was sagen die folgenden Eigenschaften eines XML-Dokumentes aus? □ wohlgeformt □ gültig wohlgeformt, dann wenn die Regeln von XML eingehalten werden, d.h. Inhalte durch öffnende und schließende Tags eingeschlossen werden. Die Tags sind hierarchisch verschachtelt. gültig, wenn Tag-Reihenfolge, bzw. -Schachtelung und Werte mit DTD oder XMLSchema einhergehen. Ein gültiges Dokument setzt Wohlgeformtheit voraus. b) Zeigen Sie am unten stehenden XML-Dokument, an welchen Stellen welche dieser Eigenschaften verletzt werden. DTD: <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT musiksammlung (album)*> <!ATTLIST musiksammlung eigentuemer CDATA #REQUIRED> <!ELEMENT album ((interpret), albumtitel, songs) > <!ELEMENT songs (song)* > <!ELEMENT interpret (#PCDATA) > <!ELEMENT albumtitel (#PCDATA) > <!ELEMENT song (#PCDATA) > XML: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE musiksammlung SYSTEM "musiksammlung.dtd"> <musiksammlung eigentuemer="Max Meier"> <album> <interpret>Die Singfreunde</interpret> <albumtitel> Unsere Lieder <songs> …. nicht wohlgeformt: </albumtitel> fehlt <song>Lied 1</song> <song>Lied 2</song> </albumtitel> … nicht wohlgeformt: </albumtitel> passt hier nicht </songs> </album> <album> … nicht gültig: Albumtitel fehlt <titel> Wanderlieder </titel> … nicht gültig: Element Titel nicht in DTD <song>Schlaflieder</song> … nicht gültig: Elemente song nur innerhalb von songs </album> </musiksammlung> Aufgabe 2: Erläutern Sie die Softwarearchitektur einer 3-Tier-Web-Anwendung! Geben Sie dazu je Schicht die verwendeten Software-Instanzen(z.B. Webbrowser), die Dokumentauszeichnungssprachen bzw. die Skript-Programmiersprachen an! Antwort: Schicht 1 – Darstellungsschicht, Webbrowser, zeigt HTML, eingebettete Inhalte und XML an, führt JavaScript aus, führt xslt- und css-Transformationen aus Schicht 2 – Bereitstellung, Webserver, speichert und überträgt HTML- und XMLDokumente, speichert und überträgt xslt- und css-Dokumente, speichert und überträgt JavaScript (keine Ausführung), speichert und überträgt eingebettete Inhalten (Images, SoundDateien) Schicht 3 – serverseitige Verarbeitung (Scripting), Programmiersprache PHP, verarbeitet PHP, erzeugt HTML, erzeugt XML, erzeugt zum Teil JavaScript (Parameter, Funktionsaufrufe, auch Codeerzeugung möglich, wenngleich nicht üblich) Hinweis: In der Klausur werden derart ausführliche Beschreibungen nicht erwartet. Aufgabe 3: Antworten: a) IP-Adresse und Port, auch URL b) DNS, richtigerweise Domain Name Service übersetzt URLs in IP-Adressen c) Durch welches Programm, bzw. auch durch welches Objekt wird kann ein httpRequest ausgelöst werden? Antwort: (1) durch den Webbrowser (z.B. nach Eingabe einer URL, nach Anklicken eines Links, bei Absenden eines Formulars) (2) durch das XMLHttpRequestObject (AJAX) … auch ein Webservice-Client kann einen http_request auslösen d) Im Query String (GET), oder im Body einer Request-Nachricht (POST) Geben Sie jeweils eine konkrete Nutzung für http-Header e) in einer http-Request-Nachricht z.B. User-Agent: …. [Browserkennung] … d) und in einer http-Response-Nachricht an: z. B. Content-Type: text/html; z. B. Content-Length: 1025 Aufgabe 4: Es soll ein FORM-Formular in HTML erstellt werden, das zwei eingegebene Zahlen an den Server übergibt. Benutzten Sie die GET-Methode und nehmen Sie an, dass ein Skript auswertung.php auf der Serverseite existiert. a) Geben Sie den HTML-Code-Ausschnitt für das FORM-Formular an! b) Geben Sie die ersten zwei Zeilen des http-Requests an, der beim Absenden des Formulars übertragen wird. Es muss erkennbar sein, wo und in welcher Syntax die eingegeben Werte transportiert werden. c) Geben Sie den Ausschnitt des PHP-Skripts an, das die zwei Zahlen in ein Array zur weiteren Verarbeitung überträgt. Lösung a) <form name="Formular" method="GET" action="auswertung.php"> <input name="zahl1" type="text" size="10" value="0.0"></input><br/> <input name="zahl2" type="text" size="10" value="0.0"> </input><br/> <input type="submit" value="Absenden"/> </form> Lösung b) Nach Eingabe von 47.11 und 0.815 … GET auswertung.php?zahl1=47.11&zahl2=0.815 Lösung c) … $z1 = $_GET[‘zahl1‘]; $z2 = $_GET[‘zahl2‘]; HTTP/1.1 Aufgabe 5: Ein POST-Request mit den folgenden Eingabedaten im Body wird an den WebServer gesendet und dort von einem PHP-Skript verarbeitet. xpos=45.33 & ypos=20.25 & r=10.14 Entwickeln Sie ein PHP-Skript, das den Flächeninhalt des Kreises (durch xpos, ypos und r beschrieben) als HTML-formatierten Text ausgibt. $r = $_POST[‘r‘]; $f = pi()*$r*$r; // auch PI*$r*$r mit define (“PI“, “3.14159“); echo(“<p>Die Kreisflaeche betraegt $f Einheiten. </p>“; Um ein gültiges HTML-Dokument zu erzeugen , ist noch die Ausgabe der HTML-, HEAD und BODY-Tags nötig. Das kann man hier aber weglassen. Aufgabe 6: Lösung: var p1obj; var p2obj; var x1,x2,y1,y2; p1obj = xmlobj.getElementById(‘p1'); p2obj= xmlobj.getElementById(‘p2’); x1=parseFloat( p1obj.getElementsByTagName(‘x’)[0].firstChild.nodeValue); y1=parseFloat(p1obj.getElementsByTagName(‘y’)[0].firstChild.nodeValue); x2=parseFloat( p2obj.getElementsByTagName(‘x’)[0].firstChild.nodeValue); y2=parseFloat(p2obj.getElementsByTagName(‘y’)[0].firstChild.nodeValue); // euklidische Distanz: var dx = x1 – x2; var dy = y1 – y2; var dist = Math.sqrt( dx*dx + dy*dy ); Aufgabe 7: Ergänzen Sie den Script-Teil der im folgenden gegebenen Webseite, dass zwischen dem Absenden des Requests und dem vollständigen Vorliegen der Antwort der Text “Auftrag wird bearbeitet“ im Textfeld (id=“dyntext“) als “innerHTML“ angezeigt wird. Wenn die Antwort vollständig übertragen worden ist, so soll der als responseText zurückgelieferte Text des AJAX-Requests angezeigt werden. <?xml version=\"1.0\" encoding=\"UTF-8\"?> <!DOCTYPE html \nPUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"> <head> <title>AJAX-Demo</title> <script type="text/javascript"> //<![CDATA[ function ajaxload() { var req = new XMLHttpRequest(); var requesturl = "beispiel.php"; req.open("GET", requesturl, true); // hier Loesung einfügen req.onreadystatechange = function () { var dt = document.getElementById("dyntext"); if (req.readyState == 4) { if (req.status == 200) { dt.innerHTML = req.responseText; } else{ dt.innerHTML = “Anfrage beendet, Fehler!”; } } else { dt.innerHTML = “Auftrag wird bearbeitet …”; } } req.send(NULL); } //]] > </script> </head> <body onload="ajaxload()"> <H1>AJAX-Demonstration </H1> <div>Antwort:</div><div id="dyntext"></div><br/> </body> </html> Aufgabe 8: a) Geben Sie mindestens zwei Unterschiede an, die SOAP und REST unterscheiden! Unterschied 1: SOAP umschließt die Nutznachrichten in einem s.g. SOAP-Envelope - einem XML-Dokument, das zum Transport dient. Dabei ist z.B. auch das Referenzieren einer Web-Service-Beschreibung in einem WSDL-Dokument möglich. REST transportiert die Service-Anfragen und -Antworten direkt über http und kodiert Daten als XML. Einen Envelope (vgl. SOAP) gibt es hier aber nicht. Die Nachrichten sind daher kürzer. Unterschied 2: REST bezieht sich auf Ressourcen, die serverseitig erzeugt, gelesen, geändert und gelöscht werden können. SOAP hingegen macht keine solche Einschränkungen. SOAP wird typischerweise zur internen Realisierung von RPC’s benutzt. b) Angenommen der in der Vorlesung vorgestellte Webservice mit der Funktion Kontakt soll anstatt wie in der unten dargestellten Nachricht <SOAP-ENV:Envelope ….. > <SOAP-ENV:Body> <ns1:Kontakt> <param0 xsi:type="xsd:string">Start</param0> </ns1:Kontakt> </SOAP-ENV:Body> </SOAP-ENV:Envelope> den Parameter (hier Start) mit den Tags <Kommando> …</Kommando> umschließen? Wie kann man das erreichen? (Angabe des Prinzips reicht aus) Antwort: Durch Bereitstellung einer WSDL-Datei. Die Eingabenachricht wird dann mit einem Parameter <Kommando> spezifiziert, z.B. so <element name="Request "> <complexType> <all> <element name="Kommando" type="string"/> </all> </complexType> </element> c) Wie wird eine Ressource in einem REST-Webservice-Request identifiziert? Antwort: Entweder als Query-String-Parameter, oder als Teil der URL. Beispiele: http://myhome.net/temperatureservice?position=Eingang HTTP/1.1 http://myservice.net/hello/FRITZ Bei AWS auch so: PUT /my-image.jpg HTTP/1. Host: htw.s3.amazonaws.com (hier ist die Bucket-Ressource htw ein Teil des Hostnamen)