250 likes | 395 Views
Entwicklung UnivIS-Anbindung auf Basis von PHP und DOM-XML Manuel Zieger Harald Kolbe. Agenda. 1 Einleitung 2 Architektur und verwendete Technologien 3 Entwicklung/Quellcode 4 Vergleich mit Alternativlösung. Ziel des Teilprojekts.
E N D
Entwicklung UnivIS-Anbindung auf Basis von PHP und DOM-XML Manuel Zieger Harald Kolbe
Agenda 1 Einleitung 2 Architektur und verwendete Technologien 3 Entwicklung/Quellcode 4 Vergleich mit Alternativlösung
Ziel des Teilprojekts • Realisierung einer Abfragemöglichkeit der UnivIS-Datenbank über verschiedene Clients: • PC • Pocket PC • Mobiltelefon • Entwicklung der UnivIS-Anbindung auf PHP-Basis
Warum ein eigenes Teilprojekt? • PHP stellt eigene Methoden zur Verfügung, um XML-Daten einlesen und manipulieren zu können • Generelles Interesse an PHP-Entwicklung und dem Ausbau vorhandener Kenntnisse • Beschränkung auf eine Technologie
Agenda 1 Einleitung 2 Architektur und verwendete Technologien 3 Entwicklung/Quellcode 4 Vergleich mit Alternativlösung
PC • HTML • Pocket-PC • cHTML • Mobiltelefon • WML Systemarchitektur • Webserver • PHP • DOMXML-Extension UnivIS DB XML-Schnittstelle Clients
UnivIS • Universitäres Informationssystem zur Abfrage von: • Personen • Veranstaltungen • Institutionen • Unterschiedliche Abfragemöglichkeiten: • Webbasiert (http://univis.uni-frankfurt.de) • UnivIS-eigene Abfragesprache • PRG-Schnittstelle (Parameterübergabe durch URLs)
XML/DTD • XML (eXtensible Markup Language) • textbasierte Meta-Auszeichnungssprache • ermöglicht hierarchisch strukturierte Ablage und Darstellung von Informationen • Standardformat für plattformunabhängigen Datenaustausch zwischen Anwendungen • DTD (Document Type Definition) • Beschreibung der Struktur eines XML-Dokuments • ermöglicht Validierung des XML-Dokuments
Beispiel: UnivIS XML-Dokument <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE UnivIS SYSTEM "http://univis.uni-frankfurt.de/univis.dtd"> <UnivIS version="1.3"> <Person key="Person.fb2.wi2.wikoen.knigwo"> <firstname>Wolfgang</firstname> <lastname>König</lastname> <locations> <location> <email>wkoenig@wiwi.uni-frankfurt.de</email> <fax>069/798-28585</fax> <ort>60054 Frankfurt am Main</ort> <office>206 C</office> <street>Mertonstr. 17</street> <tel>069/798-28594</tel> <url>http://www.wi-frankfurt.de/</url> </location> </locations> </Person> </UnivIS>
PHP/DOMXML • PHP (Hypertext Preprocessor) • objektorientierte Skriptsprache wie ASP/JSP • plattformunabhängig • unterstützt die gängigsten Webserver (z.B. Apache und IIS) • wird hauptsächlich für die Erzeugung dynamischer Webseiten verwendet • DOMXML • Erweiterung für PHP • ermöglicht Zugriff auf sowie Manipulation und Ausgabe von DOM-Objekten über PHP
DOM • DOM (Document Object Model) • ermöglicht Zugriff auf die Elemente einer Markup Language, z.B. HTML oder XML • keine eigene Sprache • Definition von Objekten, Eigenschaften und Methoden, die eine DOM-fähige Skriptsprache umsetzen muss • jede Skriptsprache (z.B. PHP, ASP und JSP) besitzt eine eigene DOM-Implementierung • Beispiel für PHP DOM-Methode $dom->get_elements_by_tagname(“email“)
XML-Dokument als DOM-Struktur $dom->get_elements_by_tagname(„firstname“) $dom $dom->document_element() UnivIS person firstname lastname locations $locations->child_nodes() $firstname->get_content() „Wolfgang“ location email fax ort … url
WML • WML (Wireless Markup Language) • XML-basierter Standard zur Darstellung von Informationen auf Mobiltelefonen und PDAs • vergleichbar mit HTML, aber reduzierte Auswahl an Gestaltungselementen <wml> <card id="card1"> <p>Hello World!</p> <do type="accept" label="Suche"> Zur Suchseite<go href="suche.wml" /></do> </card> </wml>
Agenda 1 Einleitung 2 Architektur und verwendete Technologien 3 Entwicklung/Quellcode 4 Vergleich mit Alternativlösung
Webserver • PHP • DOMXML-Extension UnivIS DB XML-Schnittstelle Clients • PC • HTML • Pocket-PC • cHTML • Mobiltelefon • WML Systemarchitektur
Suchformular HTML WML Quelle: http://www.wiwi.uni-frankfurt.de/~kolbe/praktikum/search.php Quelle: http://www.wiwi.uni-frankfurt.de/~kolbe/praktikum/search.wml
Quellcode (1) • HTTP-Request für UnivIS-Abfrage ... $request = http://univis.uni-frankfurt.de/prg?search=lectures&name=logistik&show=xml ... Quelle: http://www.wiwi.uni-frankfurt.de/~kolbe/praktikum/query.php
Quellcode (2) • Rückgabeformat von UnivIS wird überprüft • XML-Dokument einlesen ... // Test, ob ein XML-oder HTML-Dokument zurückgegeben wird // Wenn HTML zurück, dann Vorgang abbrechen $check_document = implode ('', file ($request)); $sub = substr($check_document, 0, 6); if ($sub == "<html>") { die("Leider hat es zu Ihrer Suche kein Ergebnis gegeben. (<a href='javascript:history.back()'>Zurück</a>)"); } //XML-Dokument in DOM-Objekt einlesen $dom = xmldocfile($request); ... Quelle: http://www.wiwi.uni-frankfurt.de/~kolbe/praktikum/query.php
Quellcode (3) • Auswahl zwischen der Suche nach Personen und Veranstaltungen ... //SWITCH für die Suchparameter (persons, lectures) switch ($type) { //Suche nach Personen case "persons": include("persons.php"); break; //Suche nach Veranstaltungen case "lectures"; include("lectures.php"); break; } ... Quelle: http://www.wiwi.uni-frankfurt.de/~kolbe/praktikum/query.php
Quellcode (4) • Einlesen der auszugebenden Inhalte in Arrays ( Array: speichert Sequenz von Datenwerten) ... //Inhalte der XML-Elemente in Variablen ablegen $lastname = $dom->get_elements_by_tagname("lastname"); $firstname = $dom->get_elements_by_tagname("firstname"); $title = $dom->get_elements_by_tagname("title"); $orgname = $dom->get_elements_by_tagname("orgname"); $email = $dom->get_elements_by_tagname("email"); $phone = $dom->get_elements_by_tagname("tel"); $fax = $dom->get_elements_by_tagname("fax"); $office = $dom->get_elements_by_tagname("office"); $ort = $dom->get_elements_by_tagname("ort"); ... Quelle: http://www.wiwi.uni-frankfurt.de/~kolbe/praktikum/persons.php
Quellcode (5) • Auswahl des Ausgabemediums • ... • // SWITCH für die einzelnen Devices • switch ($HTTP_GET_VARS[device]) { • // Inhalte als HTML rausschreiben • case 1: • for($i=0;$i<$array_length;$i++){ • echo "<a href='result.php? • type=" . $type . • "&firstname=". urlencode($firstname[$i]). "&lastname=" . urlencode($lastname[$i]) . "&orgname=" . urlencode ($orgname[$i]) . • "&email=" . urlencode ($email[$i]) . "'>"; • echo $lastname[$i] . ", " . $firstname[$i] . "</a>\n"; • } • ... Quelle: http://www.wiwi.uni-frankfurt.de/~kolbe/praktikum/persons.php
Quellcode (6) • Ausgabe der im URL-String enthaltenen Parameter als HTML bzw. WML ... //Inhalte der XML-Elemente in Variablen ablegen echo "<p><b>Ergebnisse</b></p>"; echo "<b>Name: </b>"; echo $HTTP_GET_VARS[firstname] . " " . $HTTP_GET_VARS[lastname] . "<br />"; if(!$HTTP_GET_VARS[orgname] == "") { echo "<b>Lehrstuhl:</b>".$HTTP_GET_VARS[orgname].„<br/>";}; if(!$HTTP_GET_VARS[email] == "") { echo "<b>Email:</b> ".$HTTP_GET_VARS[email].„<br />";}; ... Quelle: http://www.wiwi.uni-frankfurt.de/~kolbe/praktikum/result.php
Agenda 1 Einleitung 2 Architektur und verwendete Technologien 3 Entwicklung/Quellcode 4 Vergleich mit Alternativlösung
Vergleich mit Alternativlösung • Vorteile: • keine zusätzliche Software (AxKit) nötig • Beschränkung auf eine Technologie • kein Einarbeiten in neue Technologien nötig • bei einfachen Anwendungen schnelle Umsetzung möglich • vermutlich höhere Performance • Nachteile: • DOMXML noch in Entwicklungsphase • XSLT bietet mehr Flexibilität bei der Transformation von XML-Daten • bei komplexen Anwendungen können PHP-Lösungen schnell unübersichtlich werden