Prüfung 2 Aufgabe 1: DOM (10 Punkte)

Werbung
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
Herunterladen