Zürcher Hochschule Winterthur XML Prüfung 2 10. Juli 2003 Name, Vorname Zeit Totale Punktzahl Hilfsmittel Klasse Punkte Note 80 Minuten 50 Beliebige persönliche Unterlagen, Bücher und Taschenrechner, aber weder ein in Java programmierbarer Recher noch Natel noch sonstige Kommunikationsmittel (MitstudentIn inbegriffen). Füllen Sie das erste Aufgabenblatt aus und schreiben Sie alle Lösungsblätter mit Ihrem Namen, Vornamen und Ihrer Klasse sowie der entsprechenden Aufgabennummer an. Geben Sie alle Aufgaben- und Lösungsblätter ab. Lesen Sie alle Aufgabenstellungen sorgfältig durch, bevor Sie mit der Bearbeitung der ersten Aufgabe beginnen. Die Aufgaben könne in beliebiger Reihenfolge gelöst werden. Halten Sie sich nicht zulange an einer Aufgabe auf. Abgabe Hinweis Aufgabe 1: DOM (10 Punkte) 1.1 Varia (3 Punkte) 1. Die Klasse javax.xml.parsers.DocumentBuilder des JAXP ist ein Parser. richtig falsch 2. Das w3-Konsortium hat Schnittstellen und Implementierungen um mit dem DOM zu arbeiten definiert. richtig falsch 3. Wieviel Knoten enthält das untenstehende Dokument und von welchem Typ sind sie? ……………….…… ……………….…… ……………….…… 4. Wieviel ChildNodes hat der ElementNode PERSON in untenstehendem Dokument? ………… <ADRESSBUCH> <PERSON KATEGORIE="Politiker"> <NAME>Christoph Blocher</NAME> <WOHNORT>Herrliberg</WOHNORT> </PERSON> </ADRESSBUCH> 1.2. Dokument bearbeiten (7 Punkte) Das obige XML-Dokument entspricht dem folgenden Schema: Rea/Frp (Juli 2003) — 1 — Test2_Juli_03.doc <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="ADRESSBUCH"> <xsd:complexType> <xsd:sequence> <xsd:element name="PERSON" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="NAME" type="xsd:string"/> <xsd:element name="WOHNORT" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="KATEGORIE" use="required"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> Das untenstehende Programm soll ein Dokument, das dem obigen Schema entspricht, verarbeiten und dabei alle Personen mit dem KATEGORIE-Attribut Politiker mit einem zusätzlichen Element PARTEI vom Typ xsd:string versehen. Vervollständigen Sie dieses Programm. Wenn Sie den Namen des Politikers haben, können Sie dessen Partei einer Hashtable parteiTabelle entnehmen: Rea/Frp (Juli 2003) — 2 — Test2_Juli_03.doc import javax.xml.parsers.*; import java.io.*; ... nichts zu ergänzen public class DOMAufgabe { public static void main (String args[]) { Document doc; Hashtable parteiTabelle = new Hashtable(); parteiTabelle.put("Christoph Blocher", "SVP"); ... nichts zu ergänzen // Get Document ... nichts zu ergänzen Element root = doc.getDocumentElement(); // Alle Personen NodeList personen = ...................................................... for (int i=0 ; i<personen.getLength() ; i++) { Element person = (Element) personen.item(i); // Prüfen ob Politiker if (................................................................................................) { String name = ........................................................................ .......................................................................................... String partei = (String) parteiTabelle.get(name); if (partei != null) { // Neues Element PARTEI mit Inhalt partei erzeugen und // einfügen ................................................................................ ................................................................................ ................................................................................ ................................................................................ } } } } } Rea/Frp (Juli 2003) — 3 — Test2_Juli_03.doc Aufgabe 2: SAX (10 Punkte) Das folgende Programm soll die Namen aller Personen mit Wohnort in Winterthur ausgeben. Ergänzen Sie es. Die DTD ist gegeben durch: <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST <!ATTLIST ADRESSBUCH (PERSON)*> PERSON (VOLLER_NAME,ADRESSE)> VOLLER_NAME (NAME,VORNAME)> NAME (#PCDATA)> VORNAME (#PCDATA)> ADRESSE (STRASSE,POSTFACH?,POSTLEITZAHL,ORT)> STRASSE (#PCDATA)> POSTFACH (#PCDATA)> POSTLEITZAHL (#PCDATA)> ORT (#PCDATA)> PERSON KATEGORIE CDATA #REQUIRED > PERSON PERSON_ID CDATA #REQUIRED > Ein Ausschnitt aus dem einzulesenden XML-File ist: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE ADRESSBUCH SYSTEM "adressbuch.dtd"> <ADRESSBUCH> <PERSON KATEGORIE="Privat" PERSON_ID="1"> <VOLLER_NAME> <NAME>Baumgartner</NAME> <VORNAME>Andreas</VORNAME> </VOLLER_NAME> <ADRESSE> <STRASSE>Zwischen dem Berg 2</STRASSE> <POSTLEITZAHL>9000</POSTLEITZAHL> <ORT>St.Gallen</ORT> </ADRESSE> </PERSON> <PERSON KATEGORIE="Privat" PERSON_ID="2"> <VOLLER_NAME> <NAME>Boder</NAME> <VORNAME>Bruno</VORNAME> </VOLLER_NAME> <ADRESSE> <STRASSE>Lindenstrasse 2</STRASSE> <POSTLEITZAHL>8400</POSTLEITZAHL> <ORT>Winterthur</ORT> </ADRESSE> </PERSON> ... </ADRESSBUCH> Rea/Frp (Juli 2003) — 4 — Test2_Juli_03.doc import org.xml.sax.*; ... nichts zu ergänzen public class SAXAufgabe extends DefaultHandler { .......................................... .......................................... public SAXAufgabe(String xmlfile) { try { SAXParserFactory spfactory = SAXParserFactory.newInstance(); SAXParser saxParser = spfactory.newSAXParser(); XMLReader parser = saxParser.getXMLReader(); parser.setContentHandler(.................................); parser.parse(new InputSource(new FileReader(new File(xmlfile)))); } catch(Exception e) {e.printStackTrace();System.exit(1);} } public static void main (String[] args) { if(args.length != 1) { System.err.println("Usage java SAXAufgabe <XML file>"); System.exit(1); } new SAXAufgabe (args[0]); } public void startElement(String namespaceURI, String localName, String rawName, Attributes atts) throws SAXException { .......................................... .......................................... } public void endElement(String namespaceURI, String localName, String rawName) throws SAXException { .......................................... .......................................... } public void characters(char[] ch, int start, int length) throws SAXException { .......................................... .......................................... .......................................... .......................................... } } } Aufgabe 3: SVG (10 Punkte) 1. Definieren Sie ein Rechteck (ohne es zu zeichnen) mit Seitenlängen 200/100 Pixel an der Position (0,0) und schreiben Sie ins Innere des Rechtecks den Text "SVG". Rea/Frp (Juli 2003) — 5 — Test2_Juli_03.doc 2. Definieren Sie für alle Elemente dieser Graphik in einem internen Stylesheet den Stil stroke:black; stroke-width:2; fill:yellow; font-size:25 3. Zeichnen Sie nun das Rechteck (inkl. Text) um 30° gedreht mit der oberen linken Ecke an der Position (200, 100). 4. Ergänzen Sie Ihr SVG-File, sodass sich das Rechteck nach zwei Sekunden mit einer Frequenz von 1 Hz um sein Zentrum zu drehen beginnt. <?xml version="1.0"?> <!DOCTYPE svg SYSTEM "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"> <svg width="500" height="500"> ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ Rea/Frp (Juli 2003) — 6 — Test2_Juli_03.doc Aufgabe 4: SOAP, WSDL (10 Punkte) Ergänzen Sie untenstehendes WSDL, so dass sie die Schnittstelle (interface Calculator) der Klasse CalculatorService mit der Fakultätsfunktion double fak(double a) beschreibt. <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions name="Calculator" targetNamespace="http://localhost:8080/axis/Calculator" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/Calculator" xmlns:intf="http://localhost:8080/axis/Calculator" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:typens="http://localhost:8080/axis/CalcMessage/" xmlns:wsdl= xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:message name= > <wsdl:part name='Response' type= </wsdl:message> <wsdl:message name= /> > /> <wsdl:part name='a' type= </wsdl:message> <wsdl:portType name="Calculator"> <wsdl:operation name= <wsdl:input message="impl:fakRequestMsg" name="fakRequestOp" /> <wsdl:output message="impl:fakResponseMsg" name="fakResponseOp"/> </wsdl:operation> </wsdl:portType> > <wsdl:binding name="CalculatorSoapBinding" type="impl:Calculator"> Rea/Frp (Juli 2003) — 7 — Test2_Juli_03.doc <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name= <wsdl:input name="fakRequestOp"> <wsdlsoap:body > encodingStyle= namespace="http://localhost:8080/axis/Calculator" use="encoded"/> </wsdl:input> <wsdl:output name="fakResponseOp"> <wsdlsoap:body encodingStyle= namespace="http://localhost:8080/axis/Calculator" use="encoded"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="CalculatorService"> <wsdl:port binding="impl:CalculatorSoapBinding" name= > <wsdlsoap:address location="http://localhost:8080/axis/services/Calculator"/> </wsdl:port> </wsdl:service> </wsdl:definitions> Rea/Frp (Juli 2003) — 8 — Test2_Juli_03.doc Aufgabe 5: XML Datenbanken (10 Punkte) Gegeben sei folgendes XML-Dokument mit der dazugehörigen DTD: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE ADRESSBUCH SYSTEM "adressbuch.dtd"> <ADRESSBUCH> <PERSON ADRESSE_REF="A1" > <NAME>Baumgartner</NAME> <VORNAME>Andreas</VORNAME> </PERSON> <PERSON ADRESSE_REF="A2"> <NAME>Boder</NAME> <VORNAME>Bruno</VORNAME> </PERSON> <PERSON ADRESSE_REF="A2"> <NAME>Boder</NAME> <VORNAME>Petra</VORNAME> </PERSON> <ADRESSE ADRESSE_ID="A1"> <STRASSE>Zwischen dem Berg 2</STRASSE> <POSTLEITZAHL>9000</POSTLEITZAHL> <ORT>St.Gallen</ORT> </ADRESSE> <ADRESSE ADRESSE_ID="A2"> <STRASSE>Lindenstrasse 2</STRASSE> <POSTLEITZAHL>8400</POSTLEITZAHL> <ORT>Winterthur</ORT> </ADRESSE> </ADRESSBUCH> <!ELEMENT <!ELEMENT <!ATTLIST <!ELEMENT <!ELEMENT ADRESSBUCH (PERSON*,ADRESSE*)> PERSON (NAME,VORNAME)> PERSON ADRESSE_REF IDREF #REQUIRED > NAME (#PCDATA)> VORNAME (#PCDATA)> <!ELEMENT <!ATTLIST <!ELEMENT <!ELEMENT <!ELEMENT ADRESSE (STRASSE, POSTLEITZAHL,ORT)> ADRESSE ADRESSE_ID ID #REQUIRED > STRASSE (#PCDATA)> POSTLEITZAHL (#PCDATA)> ORT (#PCDATA)> a) Bilden Sie dieses XML-Dokument auf eine relationale Datenbank ab. Kennzeichnen Sie die Schlüssel-Attribute mit einem S und die Fremdschlüssel mit einem F. Rea/Frp (Juli 2003) — 9 — Test2_Juli_03.doc ....................... ....................... b) Formulieren Sie eine FWLR-Abfrage, so dass die Vornamen der Personen mit dem Nachnamen Boder als Elementsequenz <FIRSTNAME>Bruno</FIRSTNAME> <FIRSTNAME>Petra</FIRSTNAME> ausgegeben wird. ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ Rea/Frp (Juli 2003) — 10 — Test2_Juli_03.doc