<<

112 Programmieren Linux-Magazin 11/09 PHP-Frameworks © Irina MANSIEUX, Fotolia.com Viel HolzfürdenRahmen chisch organisiert und zudem hierar- riesengroß. nicht Zend Firma der Stellung zentralen der trotz ist PHP-Szene Die ment (RAD). Develop- Application Rapid des Charme dem groß.erlagen PHP-Entwickler viele Auch PHP-Welt der in Resonanz die war erweiterte, Webframework ein um Ruby Skriptsprache handliche die Rails 2004 jedoch Als Gegenliebe. wenig auf -Weltder Community der in stießen aus Vorbilder Stunde. ersten der Firma jenseits des Angebots von Zend, der PHP- Frameworks für die beliebte Websprache Allzweck- kaum es gab 2005 etwa Bis Große Resonanz geeignetsten Umgebung. Hammerschwingen steht das Suchen der plizierten Code. Doch vor dem virtuellen Frameworksstellen. du- sparenund Zeit aufzu- Projekts neuen eines Gerüst das PHP-Entwickler auf fertige Formteile, um Das Linux-Magazin Funktionsumfang prüft undKomfort derbesten Frameworks. Wer sichmitPHPeineWebsite zimmernmöchte, freut sichüberdiegroße Zahl anvorfertigten Rahmenwerken. PHP-Frameworks imÜberblick Wie erfahrene Zimmerleute setzen auch seinen Anwendern beliebt. hat Symfony beliebt. Anwendern seinen bei und performant Shootingstar,ist als gilt interessantesten: drei die fünf verbleibenden den von wählt und aus Entwicklungsaktivität abnehmender mit Frameworks als Prado und PHP Cake schließt Er heraus: Vertreter typischen arche- die daher greift Artikel der ren, evaluie- Blickwinkeln vielen aus sich lassen Frameworks sieben diese Auch Vorauswahl ziehen (sieheTabelle 1). Yii und das Zend Framework in Betracht Symfony, Prado, , Codeigniter, PHP, Cake mindestens sollte möchte, stil geeigneten Angebot nichts verpassen für sein Projekt und seinen Programmier- einem nach Suche der auf Wer tragen. aussagekräftige Bezeichnung wenigFramework die die Internet, im sich finden Projekte hundert die An entwickeln. zu PHP Frameworksfür Rails-ähnliche fen, beru- dazu viele bald sich fühlten Daher uamn Auch zusammen. Alternativen“ „Die der fasst Frameworksrestlichen Funktionsumfang. Kerneigenschaften der größten den Abstand mit zeigt, tation Dokumen- der Inhaltsverzeichnis das in die Nummer klar Unternehmensumfeld im ist Framework Zend Das Entwicklerteam. großes ein und Community große eine Funktionsumfang bestreiten lassen. bereitgestellten Kapselung per dem mit komplexere -Funktionen meist nicht bedenken,sich aber dass sollten wickler Ent - kommt. Kontakt in Javascript mit dass der Entwickler zunächst nicht direkt Frameworks die Javascript-Bibliothek, so- die kapseln Zwar Wandgespielt. die an Interface-Library chere Yahoossowieselbst [9] weitumfangrei - teranen wie Prototype und Scriptaculous fang und gute Dokumentation hat sie Ve- Funktionsum- ihren Syntax, eingängige setzt Jquery Bibliothek Ajax-Funktionen auf für die neue Javascript- Yii dass ist, Vorteil handfester Ein zurückgezogen hat. Teamsich dessen er Prado-Projekts,aus entwickler ist Qiang Xue, der Initiator des und bei Freshmeat auf Platz eins. Haupt- Ohloh bei dann es liegt Anwendergunst der Bei werten. Frameworks etablierten Newcomerden Fortschrittals gegenüber sich im Internet zahlreiche Stimmen, die finden Dennoch Entwicklerportal. das kritisiert Code,kommentierterso dürftig und Entwicklergemeinde kleine eine (siehe aus Noten gute keine Yii stellt Codeanalyse Ohloh.nets E Nischen füllen. rerProjekte, funktionale nur oft aber die weite- Dutzende es gibt hinaus darüber Yii Peter Kreußel 1 und hat, wie schon ein Blick ein schon wie hat, und 1 inzwischen [10] . Durch ihre Durch [8]. Tabelle : Nur 1): Kasten Programmieren Folgender PHP-Code erzeugt in einem Yii- E Abbildung 1: Der Yii- View-File ein Autocompletion-Textfeld: Anwendungsgenerator erzeugt ein Webprojekt widget( mit drei Unterseiten, 'CAutoComplete', array('name'=>'username', 'url'=>$this‑>createUrl( Benutzerauthentifizie-

"autocomplete/autocomplete"), rung und einem Spam- PHP-Frameworks ) schutz mit Captcha. ); 113 ?> weist er sich den- PHP-Code erscheint oft als ein Fremdkör- noch als gut durch- per in Dateien, wenn sie sowohl HTML dacht. In MVC- als auch Teile der View-Programmlogik Umgebungen ste- 11/09 Linux-Magazin enthalten. Das gilt besonders, wenn auch hen sich Model Anwender ohne Programmierkenntnisse und View paar- sie bearbeiten. Yii enthält daher eine ein- weise gegenüber. fache Template-Engine, deren XML-Syn- Manchmal, zum tax sich bruchloser in HTML einfügt: Beispiel bei Cake PHP, sind sie durch verknüpft. In Yii dagegen ruft der Der Template-Code wirkt lesbarer, Controller eine View explizit durch /Controller/Action« auch flexibel kon- Schreibarbeit spart diese auf Anwen- »$this‑>render(View‑Name)« auf. figurierbare Pretty-URLs. »createURL()« dungsebene aktivierbare Syntaxvariante Es bleibt in Yii nicht bei der Paarrelation: erzeugt auch bei wechselnder Konfigura- aber nicht. Dafür beeinträchtigt sie auch Das Widget aus dem ersten Beispiel ist tion stets den richtigen Pfad. die Performance wenig, da Yii den Tem- nichts anderes als eine in eine View ein- plate-Code in PHP-Code übersetzt und gebettete Unter-View. Fakultativ gliedert Noch mehr Dynamik bis zur nächsten Änderung am Temp- ein separater Controller die Anwendungs- late zwischenspeichert. Die Yii-Klasse logik aus. Mit Hilfe von Widgets lassen Das Model-View-Controller-Designpat- »CViewRenderer« definiert außerdem sich dynamische Anzeige-Elemente wie tern sieht vor, dass ein per URL adres- das Interface »IViewRenderer«, sodass Menüs oder Datumswähler bequem an sierter Controller dynamisch erzeugten sich durch Ableitungen von dieser Klasse mehreren Stellen der Site platzieren. Code an vorgesehene Stellen in einer leicht Template-Engines wie Smarty [11] Die Methode »createUrl()« im Beispiel View platziert. Diese Verknüpfung zwi- einbinden lassen. erzeugt aus dem Controller-Namen und schen Model und View legt der Code Dieses Detail zeigt: Der Yii-Code ist, wie der in der Controller-Klasse aufzurufen- fest, daher bleibt sie zur Laufzeit statisch. Ohloh.net anmahnt, knapp und für Ein- den Methode (Action) einen absoluten Erst ab PHP 5.3 lassen sich Methodenauf- steiger nicht immer leicht verständlich Pfad. Dieser ließe sich auch fest ein- rufe über Variablen dynamisch nach dem kommentiert. Mit dem Interface an einer stellen, doch Yii unterstützt neben dem Muster »Klasse‑>$Variable()« gestalten. typischen Stelle für Erweiterungen er- Standard-URL-Mapping »Webroot/index. Das schadet aber oft der Lesbarkeit.

Tabelle 1: PHP-Frameworks Kategorie Cake PHP Codeigniter Kohana Prado Symfony Yii Zend Framework Version 1.2.4.8284 1.7.1 2.3.4 3.1.6 1.2.8 1.0.8 1.9.1 Lizenz, Link MIT, [1] BSD-artig, [2] BSD-artig, [3] BSD-artig, [4] MIT, [5] BSD-artig, [6] BSD-artig, [7] Freshmeat- 195.16 nicht gelistet 49.05 194.98 165.29 234.14 97.72 Popularity Ohloh-Users 885 80 58 15 173 17 254 User-Rating bei 4,5/​5 4,5/​5 4 , 7/ ​5 4,1/​5 4,4/​5 4 , 9 / ​5 4,0/​5 Ohloh (269 Stimmen) (36 Stimmen) (29 Stimmen) (12 Stimmen) (75 Stimmen) (8 Stimmen) (122 Stimmen) Entwicklungszeit 84 Mannjahre 9 Mannjahre 6 Mannjahre 70 Mannjahre 796 Mannjahre 45 Mannjahre 752 Mannjahre laut Ohloh Funktionsumfang ★★★★★ ★★★★★ ★★★★★ ★★★★★ ★★★★★ ★★★★★ ★★★★★ Code-Analyse Großes Team Etablierte Sehr großes Etablierte Sehr großes Kurze History Sehr großes nach Ohloh von Entwicklern; Codebasis; Team von Ent- Codebasis; zahl- Team; zuneh- des Code-Re- Team von Ent- etablierte Code- zahlreiche Code­ wicklern reiche Code­ mende Entwick- pository; wenig wicklern; zahlrei- basis; über die kommentare; kommentare; lungsaktivität; Kommentare im che Kommentare Jahre hin abneh- abnehmende abnehmende gut kommen- Code; kleines im Code mende Entwick- Entwicklungsak- Entwicklungsak- tiert; etablierte Entwicklerteam lungsaktivität tivität tivität Codebasis 114 Programmieren Linux-Magazin 11/09 PHP-Frameworks mag ud Nbn ie ausgefeilten einer Neben rund: umfang Funktions - tured“.der Tatsächlichwirkt fea- „full als selbst sich bezeichnet Yii Persistenzfunktionen einzubauen. etwa um lassen, hinzufügen Methoden zutasten – einer bestehenden Klasse neue an- Code bestehenden den ohne – sich Mixin Designpattern das setzen Sie Yii-Komponente. einer Charakteristikum zweite das haviors, Be- genannten so die sorgen Flexibilität mehr noch Für alles: nicht ist dies Doch den setzen. Metho- unveränderliche auf schließlich aus- die Klassen, als wiederverwenden besser damit und gestalten flexibler sich sie lassen So anzudocken. Funktionen wechselnde Komponenten an es, ben erlau Eventhooks Klasse. abgeleiteten tanz einer von »CApplicationComponent« lassen. »$Komponente« steht für eine Ins- wendungsübergreifend wiederverwenden an- anwendungsweitsogar sich oder die Klassen, für Yii in stehen Komponenten »$Komponente« im obigen Beispiel steckt: hinter was Erklärung, die noch fehlt Es Komponentenbauweise fest verlöteten Platine. len Steckverbindungen, nicht mehr einer struktur, die sich so ergibt, ähnelt variab- Anwendungs- Die aus. Handler rierten regist- nente‑>Eventname=$Callback« »$Kompo‑ mit Zeitpunkt diesem zu alle Yii führt so aus, Ereignis ein rameter)« ponente‑>raiseEvent('Eventname', »$Kom Aufruf der Löst Eventhandler. genannte so Callback-Funktionen, Methodennamen als Laufzeit zur akzep- tieren Sie Events: nämlich ein, zept Kon- bekanntes her Javascript von lern Webentwick- ein stattdessen führt Yii Die Alternativen View entfällt, dafür registriert der Entwickler der registriert dafür entfällt, View und Model zwischen Bindeglied als Controller Der Programmierung: -gesteuerte auf setztMVC-Framework, keinsondern ist Prado Performance nichtmessen. dessen mit aber sich können Yii, Newcomer dem ähneln Konzepte viele und Umfang men. auskomAttribute- und Methoden private ohne daher muss Quellcode sein 4, PHP noch stützt Jahrenetwas Zugkraftan eingebüßt.unter Es zweiletzten den PHP-Frameworks,in aber hat Cake PHP war eines der ersten leistungsfähigen m mt dem mit um, [12] Pa - ‑ ‑ - eainl apr ü de Datenbank­ die für Mapper Relational Object basierenden Active-Records auf einen Rails wie Yii bietet MVC-Struktur chas an, um Spamroboterauszusperren.um an, chas Strings und URLs, bietet aber auch Capt- oder Werte numerische untersucht Es bereit. Benutzereingaben von Prüfen zum Instrumentarium umfassendes ein stellt »system.validators« Yii-Paket Das Passkontrolle fürDaten wendungen nichtaufKnopfdruck. An- praxistaugliche entstehen ihnen bei auch doch mehr, etwas Stelle dieser an Symfonybieten und PHP Cake leichtert. er- Yii-Entwicklung die in Einstieg den (Abbildung zerauthentifikation View-Controller-Paaren und einer Benut- genannte mehreren mit Projekt ein Yii Technikin Scaffoldung diese erzeugt Datenmodell vorgegebenes ein Ohne gibt esauch. erzeugt, Datenmodell definiertes ein für (CRUD) Delete-Funktionen und Update- Anwendungsprototyp mit Create-, Read-, einen das Kommandozeilen-Tool, Ein Fehlerbehandlung. und Logging sowie Webservice-Schnittstelle rudimentäre eine Ajax-Effekte, um etwa sich mern küm- Die bereit. Module interessante Community die stellt rungsschnittstelle Erweite- eine Über Internationalisieren. mit: Das Framework cacht und hilft beim Grundlegendes Handwerkszeug bringt Yii die ODBC-Schnittstelle. für und Informix Server, SQL Microsoft den Firebird, IBM-DB, SQLite, Oracle, PostgreSQL, MySQL, für sie es gibt zeit Zur- ist. PHP-PDO-Treiberinstalliert ein Datenbanken, für die auf dem Webserver alle Yii unterstützt aufsetzt, (PDO) jects Ob- Data PHP den auf er Da anbindung. Codeigniter ist Favorit des PHP-Schöpfers Ras cked()« auf[28] . Callback-Funktion»saveButtonClidie matisch - /> tonClicked" » Codeschnipsel Der View. zur Entsprechung der Page-Template, im direkt Eventhandler igniter einObjectRelational Mapper(ORM). Code­ fehltFramework vorgestellten einzigen dem Als 2008. Froscon der auf er sagte an“, und fühlt sich am wenigsten wie ein Framework mus Lerdorf: „Es ist schneller, leichtgewichtiger

Angreifers vorzugsweise aus einem privile- Tests einfügen sollte. Ajax-Funktionen. Neulinge, aber auch PHP-Frameworks gierten Kontext heraus, etwa innerhalb einer Vom Angreifer kontrolliertes Javascript löst Fortgeschrittene fühlen sich mehr um- authentisierten Sitzung – eine Aktivität aus, Post-Requests auch ohne Benutzerinteraktion sorgt als bei Yii. Freilich erschließen sich 115 die der Angreifer ohne Authentisierung nicht aus, indem er zum Beispiel zuerst dynamisch Randbereiche auch bei Symfony nur über auszuführen vermag. ein Formular in das aktuelle Dokument schreibt die automatisch erzeugte, knappe API- Gelingt es dem Angreifer, in einem authenti- oder die Zieladresse eines bestehenden ver- Dokumentation. Gelegentlich hilf auch fizierten Kontext eine winzige Grafik mit dem ändert. Anschließend simuliert »document. noch das Symfony-Wiki mit Tipps oder 11/09 Linux-Magazin Code »Lime beherrscht stallieren [19]. Symfony-Versionen in­ stabilen in auch ein Plugin der SVN-Version. Es lässt sich erst jedoch HTML-Purifier mittels filtert Request Forgery erschweren. HTML-Code zu testende Seite testende zu [20], aber eben nicht alle. So Zend_Pdf_Color_Rgb(0,0,0)) Zend_Pdf_Color_Rgb(1,1,0)) Zend_Pdf_Color_Cmyk(1,0,0,0)) 5). Die Symfony-Klasse eg we i auf Yii wie zeugt er- Symfony Auch greift. zurück lieferns Aus- des während Server der die auf Apache-User, den für Dateien bare sen liegen schreib- Cache-Verzeichnis- den In aus: tisch fak- Webservers des Benutzer den für wendungscode '); 3) als auch -

')« simuliert einen simuliert »click('Name')« Cookies. ßend dieKreissegmente unddenText. eine neueSeite, setzt Farben undzeichnet anschlie- PDF-Generator (siehe Listing 1). DerCode erzeugt einzeln nutzbare Komponenten, zum Beispiel einen Abbildung 4: DasZend-Framework enthältviele hat einen etwas größeren Leistungsum- größeren etwas einen hat intuitiverbedienbar,als gilt pel Doctrine « etwa 250 versus » Anfrage die für Google leicht fällt, lässt sich daran ablesen, dass nicht ihnen zwischen Entscheidung die terne Projekte. Dass Symfony-Anwendern Doctrine unabhängiger Object-Relational-Manager, zweier Luxus den sich leistet Symfony Bremsklotz fenen Exceptions. ausgeworFramework- vom die auf griff Zu- direkten Lime hat least not but Last ul:nth‑child(2) li:contains(" $b‑>checkResponseElement('p:last U DOM oderCSS-3-Selektoren auswählen: über auch sondern Ausdrücke,reguläre fender Seitentext lässt sich nicht nur über Klick auf einen Button oder Link. Zu - prü ozpinl vn e adrn vorge- anderen den von konzeptionell Frameworksich unterscheidetZend Das E Steigerung derLeistung[24]. deutliche eine 2 Version die für tencier hosting. Außerdem verspricht Fabien Po- aber bei viel Traffic oder im Shared Web - Overhead der Relevantist kümmern. zu nicht dies braucht Hardwareden hostet, aktueller auf Seite besuchte schnittlich Codeigniter oder halb so viele Seiten wie die schnellen Yii marks oft an letzter Stelle und liefert nur gesamt angeht, steht Symfony bei Bench - Was die Performance des Framework ins- den siesichkaum. fang, bei der Geschwindigkeit unterschei- Dies isteinText Zend Dies isteinText [21] und Propel . Wer eine durch- Wereine [23]. 000 Treffer listet. Pro- [22] , beides ex SelektText ")'); - Programmieren load zur Verfügung Infos stehen. Das Zend Framework enthält [1] Cake PHP: [http://​­www.​­Cake PHP.​­org] einen PDF-Genera- [2] Codeigniter: tor, der mit PHP- [http://​­www.​­codeigniter.​­com]

Bordmitteln so- [3] Kohana: [http://​­www.​­kohanaphp.​­com] PHP-Frameworks wohl Text als auch [4] Prado: [http://​­www.​­pradosoft.​­com] grafische Elemente [5] Symfony: [http://​­www.​­symfony‑project.​­org] 117 einbettet. Listing 1 [6] Yii: [http://​­www.​­yiiframework.​­com] zeichnet ein Dia- [7] Zend Framework: gramm, das Abbil- [http://​­www.​­framework.​­zend.​­com] dung 4 zeigt. [8] Jqery: [http://​­www.​­jquery.​­com] 11/09 Linux-Magazin Abbildung 5: Im Debug-Modus blenden alle mit Symfony gerenderten Seiten auf Dem Zend Frame­ [9] Prototype: [http://​­www.​­prototypejs.​­org] Knopfdruck einen Stack Trace und grundlegende Profiling-Informationen ein. work haftet der [10] Yui: [http://​­developer.​­yahoo.​­com/​­yui/] Ruf an, den Ein- [11] Smarty: [http://​­www.​­smarty.​­net] stellten Frameworks: Es stellt wie diese stieg mit einer steilen Lernkurve zu er- [12] Mixin-Pattern: [http://​­www.​­wikiservice.​­at/​ das Fundament für ein Model-View-Con- schweren. Ohne Zweifel ist die MVC- ­dse/​­wiki.​­cgi?​­MixIn] troller-Design bereit – allerdings fakul- Komponente komplizierter als bei der [13] HTMLpurifier [http://​­htmlpurifier.​­org] tativ. Es lässt sich auch zusammen mit Konkurrenz, das zugehörige Handbuch [14] Yii-eigener Benchmark: [http://​­www.​ anderen Frameworks als Bibliothek für [27] stellenweise akademisch. Anderer- ­yiiframework.​­com/​­performance/] Helferfunktionen ohne Abhängigkeit zum seits gibt es auch für Zend ein verständ- [15] Kritik am Yii-Benchmark: restlichen Framework einsetzen. Yii- oder liches Einsteiger-Tutorial. Die Dokumen- [http://​­code.​­google.​­com/​­p/​­phpmark/​ Symfony-Entwickler binden das ganze tation ist sehr ausführlich und enthält ­issues/​­detail?​­id=1] Framework über einen Include-Befehl in Quellcode-Beispiele. [16] Daniel Carreras Benchmark: [http://​ die Datei »index.php« ein. Bei Zend las- Wer das ganze Leistungsspektrum des ­daniel.​­carrera.​­bz/​­2009/​­01/​­#​­performance] sen sich die Basisklassen der 65 Kompo- Framework kennenlernen möchte, muss [17] Trac des Symfony-Projekts: nenten auch einzeln integrieren. allerdings viel Zeit investieren. Wie das [http://​­trac.symfony​­ ‑project.​­org/​­wiki/] Ist unter den gewählten Komponenten Beispiel aus Listing 1 zeigt, bleibt der [18] Symfony-Bugtracker: [http://​­trac.​ der Zend-Controller, verhält sich das Aufwand beim Einarbeiten in einzelne ­symfony‑project.​­org/​­report/​­16] Zend-Frame wie Yii oder Symfony als Komponenten im Rahmen. Das Hand- [19] HTLM-Purifier für Symfony: MVC-Framework. Das Gerüst einer sol- buch erläutert sie, ohne Wissen zum rest- [http://​­webuser.​­hs‑furtwangen.de/ chen Zend-Anwendung erzeugt wie unter lichen Framework vorauszusetzen. ​­~gorges/​­resources/​sfHTMLPurifier Yii und Symfony ein Kommandozeilen- ValidatorPlugin.​­htm] Aufruf. Zend enthält zahlreiche Funkti- Umfangreiches Baumaterial [20] PHPunit: [http://​­www.​­phpunit.​­de] onen, die auf das Unternehmensumfeld­ [21] Doctrine: [http://​­www.​­doctrine‑project.​­org] zugeschnitten sind, etwa eine LDAP- Die drei PHP-Frameworks Yii, Symfony [22] Propel: [http://​­propel.phpdb.​­ ​­org/​­trac/] Anbindung, ein ACL-basiertes Rechte­ und Zend Framework decken ein brei- [23] Symfony-Benchmark: management oder eine XML-RPC- und tes Spektrum ab: Yii ist schnell und [http://​­www.​­sellersrank.​­com/ Soap-Schnittstelle. enthält neue interessante Konzepte. Die ​­web‑frameworks‑benchmarking‑results/] Viele Komponenten wie der PDF-Genera- Community ist klein, aber aktiv und [24] Fabien Potencier, „Symfony 2“: tor, der auch zeichnet, oder der vollstän- hilfsbereit. Symfony glänzt mit großem [http://​­fabien.​­potencier.​­org/​­media/​­talk/​ dig in PHP geschriebene Lucene-Port, Leistungsumfang, der auch auf das ­2009/​­phpquebec‑2009‑symfony‑2.​­pdf] der Word- und Powerpoint-2007-Dateien Framework abgestimmte Testkomponen- [25] Dojo: [http://​­www.​­dojotoolkit.​­org] liest und Fuzzy Search unterstützt, sind ten enthält. Community und Entwickler- [26] Handbuch Zend Framework: für viele Zielgruppen interessant. Beson- team sind viel größer als bei Yii. [http://​­framework.​­zend.​­com/​­manual/​­en/] ders erwähnenswert sind die Rechner Hinter dem Zend Framework steckt die [27] Zend-Controller: [http://​­framework.​­zend.​ für Maßeinheiten, Uhrzeiten und Kalen- Firma der PHP-3-Initiatoren ­com/​­manual/​­en/​­zend.​­controller.​­] derdaten. Das Zend Framework kapselt und , die PHP-Produkte für [28] Peter Kreußel, „Tragendes Rahmenwerk: auch die Javascript-Bibliotheken Dojo Unternehmen anbietet, außerdem tragen PHP-Anwendungsentwicklung mit Prado“: [25] und Jquery [8]. Einen Überblick Google, Microsoft und Strikeiron bei. So Linux-Magazin 01/​08, S. 40 der Komponenten gibt [26]. entstand ein Rahmenwerk, das den Be- darf von Enterprise-Projekten abdeckt. Der Autor Lernintensiv Wer jedoch nur einzelne Komponenten Peter Kreußel hat zahlreiche Artikel für das herauspicken möchte, findet im Zend Linux-Magazin verfasst. Er arbeitet als freier Au- Da sich längere Texte schlecht am Bild- Framework dank modularem Design und tor und Webenwickler. Sein besonderes Interesse schirm lesen lassen, schätzen es Seiten- gut gegliedertem Handbuch effiziente Lö- gilt semantischen Technologien und Cross-Media- besucher, wenn sie auch als PDF-Down- sungen für Einzelprobleme. (mg) n Publishing.