Anwendungen der Prozessdatenverarbeitung SS 2003-07-06. Anwendungen der Prozessdatenverabeitung SS 2003. HtTidyVis. Zehra Sen Frank Schneider 1/39



Ähnliche Dokumente
Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Tipps und Tricks zu den Updates

Wählen Sie bitte START EINSTELLUNGEN SYSTEMSTEUERUNG VERWALTUNG und Sie erhalten unter Windows 2000 die folgende Darstellung:

Adminer: Installationsanleitung

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Lokale Installation von DotNetNuke 4 ohne IIS

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Anleitung BFV-Widget-Generator

Kleines Handbuch zur Fotogalerie der Pixel AG

Step by Step Webserver unter Windows Server von Christian Bartl

TechNote. Produkt: TWINFAX 7.0 (ab CD_24), TWINFAX 6.0 Modul: SMTP, T611, R3 Kurzbeschreibung: Briefpapier- und Mailbodyunterstützung

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen

Auto-Provisionierung tiptel 30x0 mit Yeastar MyPBX

INSTALLATION VON INSTANTRAILS 1.7

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Musterlösung für Schulen in Baden-Württemberg. Windows Basiskurs Windows-Musterlösung. Version 3. Stand:

Artikel Schnittstelle über CSV

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

Content Management System (CMS) Manual

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

MetaQuotes Empfehlungen zum Gebrauch von

VB.net Programmierung und Beispielprogramm für GSV

Dokumentation: Balanced Scorecard

Installation und Inbetriebnahme von Microsoft Visual C Express

4D Server v12 64-bit Version BETA VERSION

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

Live Update (Auto Update)

Informationen zur Verwendung von Visual Studio und cmake

ÖKB Steiermark Schulungsunterlagen

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

PHPNuke Quick & Dirty

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

Bedienungsanleitung für den SecureCourier

Intrexx auf einem Windows 2012 Server

Einfügen von Bildern innerhalb eines Beitrages

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

ARAkoll 2013 Dokumentation. Datum:

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

Anleitung zum Download und zur Bedienung des Tarifbrowsers für Mac OSX und Safari / Mozilla Firefox

Anleitung zum Download und zur Bedienung des Tarifbrowsers für Microsoft Windows 7 und Mozilla Firefox

Intrexx unter Windows Server 2008

Leitfaden zur Installation von Bitbyters.WinShutdown

WordPress lokal mit Xaamp installieren

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Outlook 2000 Thema - Archivierung

Installation im Netzwerk

IBM Software Demos Tivoli Provisioning Manager for OS Deployment

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Tutorial -

Um in das Administrationsmenü zu gelangen ruft Ihr Eure Seite auf mit dem Zusatz?mod=admin :

Datei Erweiterungen Anzeigen!

COSA. Portal Client Installation JAVA J2SE / JRE Version 1.4.2_09, Stand Copyright

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Anleitung öffentlicher Zugang einrichten

Update und Konfiguraton mit dem ANTLOG Konfigurations-Assistenten

CMS.R. Bedienungsanleitung. Modul Cron. Copyright CMS.R Revision 1

Visualisierung auf Büro PC s mit dem ibricks Widget

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Qt-Projekte mit Visual Studio 2005

Wie richten Sie Ihr Web Paket bei Netpage24 ein

Sichern der persönlichen Daten auf einem Windows Computer

YouTube: Video-Untertitel übersetzen

GEONET Anleitung für Web-Autoren

Handbuch PCI Treiber-Installation

System-Update Addendum

MSDE 2000 mit Service Pack 3a

Erstellung botoptimierter Partnerlinks

lññáåé=iáåé===pìééçêíáåñçêã~íáçå=

Erzherzog Johann Jahr 2009

Installationsanleitung

Computeria Solothurn

Write-N-Cite eine Kurzanleitung

Diese Anleitung enthält Anweisungen, die nur durch erfahrene Anwender durchgeführt werden sollten!

Python Installation. 1 Vorbereitung. 1.1 Download. Diese Anleitung ist für Windows ausgelegt.

Anleitung zum Extranet-Portal des BBZ Solothurn-Grenchen

Datensicherung. Beschreibung der Datensicherung

Hex Datei mit Atmel Studio 6 erstellen

Kapitel 3 Frames Seite 1

Installationsanleitung für FireFTP 1.0.7

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Nutzung der VDI Umgebung

Urlaubsregel in David

INSTALLATION. Voraussetzungen

Übung: Verwendung von Java-Threads

Anleitung über den Umgang mit Schildern

1. Loggen Sie sich mit Ihrem Benutzernamen in den Hosting-Manager (Confixx) auf Ihrer entsprechenden AREA ein. Automatische Wordpress Installation

Update von Campus-Datenbanken (FireBird) mit einer Version kleiner 9.6 auf eine Version größer 9.6

Grafikbausatz Overlays Profi. für iphone/pocket Visu & PC Visualisierungen

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte:

Voraussetzungen und Installation

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Überprüfung der digital signierten E-Rechnung

Tutorial. In diesem Tutorial möchte ich die Möglichkeiten einer mehrspracheigen Web-Site erläutern.

Transkript:

Anwendungen der Prozessdatenverabeitung SS 2003 HtTidyVis Zehra Sen Frank Schneider 1/39

I. Inhaltsangabe I. Inhaltsangabe... 2 II. Vorwort... 4 III. Aufgabenstellung... 5 IV. Kurzer Überblick über die benötigten Tools...6 Cygwin:... 6 HtDig:... 7 HTML Tidy... 8 V. Analyse der HtDig... 11 Einbauen der Tidy Funktion in HtDig... 11 HTML Parser... 12 Retriever... 12 VI. Erweiterung der HtDig... 13 HTML Parser... 13 Parsable... 13 Retriever... 14 AddTidyErrorWarning()... 15 TidyDoc tdoc...15 TidyDoc tidycreate ( )... 15 int tidyparsestring ( TidyDoc tdoc, ctmbstr content )...15 int tidyerrorcount ( TidyDoc tdoc )...16 int tidywarningcount ( TidyDoc tdoc )...16 int tidyrelease ( TidyDoc tdoc )... 16 Speicherung Berkley DB...17 DocumentRef Fehler und Warnungen... 17 DocumentDB... 17 DocumentRef Serialize... 18 Auslesen der Berkley DB... 19 DocumentDB - DumpDB...19 DocumentRef... 19 VII. Kompilieren des HtDig...20 Makefile.config... 20 VIII.Visualisierung der Fehler und Warnungen... 21 Apache Server:... 22 Was ist Apache?...22 Warum Apache?...23 Installation...23 PHP... 24 Was ist PHP?...24 Plattformen...26 Erste Schritte... 27 Warum PHP als Apache Modul?... 28 Installation...28 httpd.conf... 28 2/39

php.ini... 29 JpGraph 1.11... 30 Was ist JpGraph?... 30 Warum JpGraph?... 31 Erste Schritte... 32 Installation...36 IX. Ausführen der Visualisierung... 37 HtDig... 37 Download des aktuellen Htdigs unter :... 37 Dateien für die Visualisierung... 38 SearchFile.html... 38 HtdigHisto.php...38 Htdig.php...39 3/39

II. Vorwort Dies ist eine Dokumentation über das Projekt von Zehra Sen und Frank Schneider im Sommersemester 2003. Realisiert wurde es im Rahmen der Vertiefung Anwendungen der Prozessdatenverarbeitung. Ziel des Projektes war Qualitätsbewertung einer Website durch eine Web Visualisierung. Zur Qualitätsbewertung wurde der HTML Code der Seite auf seine Korrektheit geprüft. Die Visualisierung wurde mittels PHP realisiert. Alle von unserem Programm benötigten Dateien finden Sie im Zip-File auf der Startseite des Projekts. Wie mit den einzelnen Programmen zu verfahren ist werden wir hier in den Unterpunkten erklären. Vorab schon mal die Information das unser Projekt unter Cygwin (www.cygwin.com) entwickelt wurde. 4/39

III. Aufgabenstellung Ø Durchsuchen einer Website mittels HtDig um alle Subseiten zu finden. Ø Implementation des HTML Parsers Tidy in die HtDig. Ø Erweiterung der HtDig zur Ausgabe der Fehler und Warnungen des HTML Parsers. Ø Statistische Auswertung der HTML Fehler. Ø Serverseitige Visualisierung der Auswertung im Browser durch PHP. 5/39

IV. Kurzer Überblick über die benötigten Tools Cygwin: Cygwin ist eine Linux ähnliche Entwicklungsumgebung, welche eine menge von nützlichen Linux Tools beinhaltet. Unser Projekt muss im Normalfall natürlich nicht mehr kompiliert werden, jedoch für den Fall das man es modifizieren möchte, wird der Quellcode mitgeliefert. Für diesen Fall ist eine Cygwin Umgebung eine Notwendigkeit. Um Cygwin auf Ihrem Windows Betriebssystems zu installieren, wechseln Sie auf der beigelegten CD-ROM in den Ordner Cygwin. Führen Sie die Datei Setup.exe aus. Nun beginnt eine Installationsroutine. Wählen Sie Installation from local Directory und geben Sie anschließend den Unterordner Release an. Dort befinden sich die Standart Pakete für eine Cygwin Installation. Anschließend kann der Installationspfad für Cygwin modifiziert werden. Abschließend kann man sich noch die zu installierenden Packages auswählen. Wir empfehlen hier die Standart Auswahl (komplett) beizubehalten, auf jeden Fall sollte man aber die Entwicklungsumgebung mitinstallieren. Nun einfach die Installation bestätigen und schon haben wir eine Linux ähnliche Entwicklungsumgebung für Windows. Falls eine neue Version von Cygwin gewünscht wird kann man sich diese auch direkt vom Internet installieren. Einfach statt Installation from local directory Installation from the internet auswählen. Auf diese Weise kann man auch leicht und bequem fehlende Pakete nachinstallieren. Sollten Probleme bei der Installation auftreten, sollte man sich mal auf www.cygwin.com umsehen. Dort ist eine ausführliche Dokumentation sowie ein hilfreiches FAQ vorzufinden. 6/39

HtDig: HtDig ist eine Suchmaschine die es erlaubt mehrere Server in einem Netzwerk zu durchsuchen, indem sie wie ein WWW Browser arbeitet. Sie ist frei verfügbar unter der GNU General Public License. Des weiteren ist auch der gesamte Quellcode frei im Internet verfügbar. Im wesentlichen geht sie in drei Schritten vor: Seitensuche: Bevor Webseiten durchsucht werden legt die HtDig eine Datenbank von allen relevanten Dokumenten an. Da sie wie ein WWW Browser arbeiten kann sie allen Hyperlinks in der Seite folgen. In wie weit dies geschehen soll kann man in der Konfigurationsdatei festlegen. Nach diesem Vorgang legt sie mindestens zwei Dateien an, zum einen eine Liste von allen vorgekommenen Wörtern und zum anderen eine Datenbank von Internetadressen und Informationen über diese. Weitere mögliche Dateien sind z.b. eine Liste von allen Adressen die gesehen wurden, eine Liste von allen Bildern die gesehen wurden oder aber auch ASCII Versionen der Datenbanken. Datenbank erstellen: Nachdem der Suchvorgang abgeschlossen ist müssen die gesammelten Daten so abgeändert werden das die HtDig damit arbeiten kann. Dieser Vorgang verarbeitet die Datenbanken aus dem Suchvorgang zu etwas Programmspezifischeren Datenbanken. Textsuche: Nachdem die Datenbanken erzeugt wurden beginnt der eigentliche Suchlauf nach den gesuchten Begriffen. Anschließend werden die gefundenen Ergebnisse in HTML angezeigt. Falls keine Übereinstimmungen mit dem Suchbegriff gefunden wurde, wird auch dies angezeigt. 7/39

HTML Tidy Tidy ist ein freies Tool, entwickelt von David Ragget, das HTML Code durchsucht und perfektioniert. Dabei werden zum einen optische Layout Veränderungen vorgenommen und zum anderen der Quellcode auf Fehler untersucht und diese behoben. Dabei parst es durch die HTML Dateien, korrigiert alle Fehler die es erkennt und beheben kann automatisch. Diese werden zur Information des Users als Warnungen ausgegeben. Dazu kurz einige Beispiele: Fehlende oder falsch platzierte Tags korrigiert: werden gefunden und <h1>heading <h2>subheading</h3> Wird korrigiert zu: <h1>heading</h1> <h2>subheading</h2> Abschlusstags in der falschen Reihenfolge werden korrigiert: <p>here is a para <b>bold <i>bold italic</b> bold?</i> normal? Wird korrigiert zu: <p>here is a para <b>bold <i>bold italic</i> bold?</b> normal? Löst das Problem der führenden Style Tags <h1><i>italic heading</h1> <p>new paragraph Dies führt dazu das im Netscape, sowie im Internet Explorer alles diesem Head folgende in dessem Font dargestellt wird. Nicht der gewünschte Effekt Wird korrigiert zu: <h1><i>italic heading</i></h1> <p>new paragraph 8/39

Sortiert vermischte Tags <i><h1>heading</h1></i> <p>new paragraph <b>bold text> <p>some more bold text Wird korrigiert zu: <h1><i>heading</i></h1> <p>new paragraph <b>bold text</b> <p><b>some more bold text</b> Stellt <hr> Tags an die richtige Stelle <h1><hr>heading</h1> <h2>sub<hr>heading</h2> Wird korrigiert zu: <hr> <h1>heading</h1> <h2>sub</h2> <hr> <h2>heading</h2> Fügt das fehlende / in Ende Tags ein a href="#refs">references<a> Wird korrigiert zu: <a href="#refs">references</a> Perfectioniert Listen indem es vergessene Tags einfügt <body> <li>1st list item <li>2nd list item Wird korrigiert zu: <body> <ul> <li>1st list item</li> <li>2nd list item</li> </ul> Alle Fehler die nicht zugeordnet, nicht behoben werden können, oder auf die Tidy nicht weis wie es reagieren soll gibt Tidy als nur Fehler aus und korrigiert diese logischerweise auch nicht. 9/39

Für unsere Zwecke benötigten wir die Autokorrektur nicht, da wir davon ausgehen das wir auf die heruntergeladen Seiten keine Schreibrechte haben, also nicht die korrigierten Seiten wieder hochladen. Wäre theoretisch aber denkbar. Wir benötigten von Tidy lediglich die Anzahl der gefunden Fehler und Warnungen. Eine enthusiastische Gruppe von Freiwilligen hat die Pflege und Weiterentwicklung von Tidy von David Ragget übernommen. Dort finden sich mittlerweile der Quellcode und bereits Ausführbare Dateien von Tidy für viele Plattformen. Die neueste Version von Tidy kapselt eine Library (TidyLib) und wurde extra entwickelt um es besser in andere Projekte zu Integrieren. Der Tidy Quellcode kann unter www.tidy.sourceforge.net heruntergeladen werden (Die im Cygwin bereits vorhandene TidyLib Version ist leider nicht ganz Fehlerfrei). 1. Entpacken des Tidy Ordners in einen Ordner eigener Wahl (z.b. C:/Tidy). 2. Wechseln in den Ordner C:/Tidy/build/gmake/ 3. Ausführen des Makefiles 4. Kopieren der Datei libtidy.a im Ordner C:/Tidy/lib in den tidy Ordner von HtDig 5. Kopieren der Header Dateien tidy.h, buffio.h aus dem Tidy Ordner in den tidy Ordner von HtDig 10/39

V. Analyse der HtDig Für die, im Kapitel Aufgabenstellung beschriebene, graphische Darstellung der Fehler und Warnungen auf HTML Seiten war es notwendig, die HtDig zu erweitern. Diese Erweiterungen der HtDig umfassen die Ausgabe der Anzahl der Fehler und Warnungen auf den durch HtDig gefundenen Seiten. Die Ausgabe dieser Daten erfolgt wie alle Informationen des Programms in die Datenbank der HtDig (db.docdb Berkley DB). Um die Fehler und Warnungen ermitteln zu können, muss die, im Kapitel Makefile.config beschriebene, Tidy Bibliothek in unser Projekt eingebunden werden. Einbauen der Tidy Funktion in HtDig Für das einfügen der Funktionalität von Tidy, war es erforderlich eine geeignete Stelle im Quellcode von HtDig zu finden. Die Stelle musste verschiedene Kriterien erfüllen: - Referenz für den Eintrag in die Berkley DB - Die aktuell analysierte Seiten in Form eines Strings Der Quellcode von HtDig hat einen großen Datenumfang. Um die oben genannten Anforderungen erfüllen zu können, war es notwendig die Klassen zu untersuchen, welche das Parsen einer HTML Seite ermöglichen. Es gab zwei Möglichkeiten für den Einbau von Tidy. 1. External Parser 2. HTML Parser Die zweite der beiden Möglichkeiten war für unsere Zwecke und Anforderungen am besten geeignet, da HTML Seiten auf Fehler und Warnungen geparst werden sollen. 11/39

HTML Parser HTML Parser parst die von HtDig gefundenen HTML Seiten. Der Parser ist in Form einer Klasse realisiert. Die Klassendefinition findet im HTML.h und die Implementierung der Methoden findet im HTML.cc im Ordner htdig des Sourcecodes statt. Auf den Parser wird über die Klasse Retriever zugegriffen. Retriever Die Retriever Klasse ermöglicht es die aktuelle Seite, die als Instanz der Klasse Document vorliegt über verschiedene Funktionen zu analysieren (http://www.htdig.org/). Der Aufruf des HTML Parsers erfolgt in der Funktion RetrievedDocument. 12/39

VI. Erweiterung der HtDig HTML Parser Die Erweiterung der Klasse HTML erfolgte durch das Hinzufügen der Funktion. void HTML::AddTidyErrorWarning(DocumentRef *ref); Die Erweiterung war jedoch etwas aufwendig. Der Parser wird nicht über eine Instanz direkt aufgerufen. Der Aufruf erfolgt über die Klasse Parsable. HTML hat als Oberklasse die Parsable. Die als virtuelle Funktion definierte Methode parse wird in der Klasse HTML implementiert. In der oben genannten Funktion wird die aktuelle Seite durch Tidy geparst und die Anzahl der Fehler und Warnungen in Variablen über die Referenz ref eingetragen. Die Seite in Form eines Strings in der Klasse Parsablevor und ist über den Aufruf contents->get() abrufbar. Eine detaillierte Erklärung der Funktion erfolgt im Abschnitt AddTidyErrorWarning. Parsable Die Parsable Klasse stellt sowohl für HTML, als auch für die Klassen ExternalParser und Plaintext die Übergeordnete Klasse dar. In jeder der genannten Klassen wird die virtuelle Funktion parse implementiert. Die Funktion AddTidyErrorWarning wird in der Klasse HTML eingefügt. Da diese Funktion über die Klasse Parsable angesprochen wird muss sie auch als virtuelle Methode definiert sein. 13/39

Der Nachteil davon ist, dass dann in allen anderen oben genannten Klassen diese Funktion auch in irgendeiner Form implementiert werden muss. Da der Hintergrund für die Erweiterung der HTML Klasse der war, dass wir HTML Seiten analysieren wollten, findet in den anderen Klassen kein parsen nach Fehlern und Warnungen statt. void HTML::AddTidyErrorWarning(DocumentRef *ref){}; Retriever In der Funktion RetrievedDocument wird über die Funktion getparsable() der Klasse Document eine Referenz der Klasse Parsable zurückgegeben. Die Referenz kann einer der Klassen HTML, ExternalParser oder Plaintext sein. Die Überprüfung welche der Instanzen als Referenz zurückgegeben werden soll, erfolgt über den Contenttype der aktuell zu parsenden Seite. Die Retriever Klasse hat als Parameter eine Referenz auf DocumentRef. Das DokumentRef definiert Methoden, die zu einer Seite die Daten in der Berkley DB abspeichern. Damit die Fehler und Warnungen nach parsen der Seite durch Tidy in die Datenbank eingetragen werden kann wird diese als Referenz mit an die Funktion AddTidyErrorWarning übergeben. Die detaillierte Beschreibung der Erweiterungen zur Speicherung der Fehler und Warnungen erfolgt in dem Abschnitt Speicherung Berkley DB. 14/39

AddTidyErrorWarning() HTML::AddTidyErrorWarning(DocumentRef *ref) { int out=-1; TidyBuffer errwarnbuf = {0}; TidyDoc tdoc = tidycreate(); tidyoptsetbool( tdoc, TidyQuiet, yes ); //no summary, welcome etc. tidyoptsetbool( tdoc, TidyShowMarkup, no ); //not show HTML, since we do not need it here printf( "\ntidying: %s\n", ref->docurl()); if (debug < 3) tidyoptsetbool( tdoc, TidyShowWarnings, no ); //show no warnings if (debug < 2) tidyoptsetint( tdoc, TidyShowErrors, 10 ); //show Errors if (debug < 1) tidyoptsetint( tdoc, TidyShowErrors, 0 ); //show nothing out=tidyseterrorbuffer( tdoc, &errwarnbuf ); if(out >= 0) { tidyparsestring( tdoc, contents->get() ); ref->doctidyerrorcount(tidyerrorcount( tdoc )); ref->doctidywarningcount(tidywarningcount( tdoc )); } if(out > 0) printf( "\ndiagnostics:\n%s", errwarnbuf.bp ); else printf( "\nno Errors and Warnings\n"); } tidybuffree( &errwarnbuf ); tidyrelease( tdoc ); TidyDoc tdoc Instanz der Klasse TidyDoc, der die Document darstellt, der analysiert wird. TidyDoc tidycreate ( ) Gibt eine Instanz von Typ TidyDoc zurück. int tidyparsestring ( TidyDoc tdoc, ctmbstr content ) Parst den String und gibt als return Wert zurück 0 Keine Fehler und Warnungen >0 Es sind Fehler und Warnungen in dem übergebenen String vorhanden 15/39

int tidyerrorcount ( TidyDoc tdoc ) Gibt die Anzahl der Fehler zurück, die auf der Seite gefunden wurden und in entsprechenden Variablen in tdoc gespeichert wurden. int tidywarningcount ( TidyDoc tdoc ) Gibt die Anzahl der Warnungen zurück, die auf der Seite gefunden wurden und in entsprechenden Variablen in tdoc gespeichert wurden. int tidyrelease ( TidyDoc tdoc ) Löscht die Instanz der Klasse TidyDoc. Die Reihenfolge zum parsen der Seite nach den Fehlern und Warnungen ist fest vorgegeben. Als erstes wird eine Instanz der Klasse TidyDoc erstellt. Der durch tidycreate() erstellten Instanz werden über tidyparsestring die Informationen zu dem analysierten String eingetragen. Nach dem parsen des Strings kann die Anzahl der darin gefundenen Fehler und Warnungen abgerufen werden. Die Abfrage erfolgt über tidyerrorcount und tidywarningcount. Nach dem die erforderlichen Daten abgerufen wurden kann die tdoc gelöscht und sein Speicher freigegeben werden. Für die Speicherung der Fehler und Warnungen werden diese, über den Aufruf der Funktionen ref->doctidyerrorcount(tidyerrorcount( tdoc )) ref->doctidywarningcount(tidywarningcount( tdoc )); in definierte Variablen in der Referenz eingetragen, die dann später in die Berkley DB eingetragen werden. 16/39

Speicherung Berkley DB Für die Speicherung werden die Daten aus der Referenz der Klasse DokumentRef ausgelesen. Damit die Fehler und Warnungen auch eingelesen werden können muss eine entsprechende Funktion definiert werden. DocumentRef Fehler und Warnungen Hinzufügen der Variablen für das Speichern der Fehler und Warnungen im DocumentRef.h: - int doctidyerrorcount - int doctidywarningcount Einlesen der Fehler und Warnungen in die Instanz des DocumentRef void DocTidyErrorCount(int er) {doctidyerrorcount = er;} void DocTidyWarningCount(int wa) {doctidywarningcount = wa;} Alle Daten einschließlich der Fehler und Warnungen werden über die Methode Add ( DocumentRef &ref ) der Klasse DocumentDB in der Datenbank abgelegt. DocumentDB Die Funktion Add führt die Speicherung der Daten in der Berkley DB durch. Der Aufruf der Funktion void DocumentRef::Serialize(String &s) schreibt alle Daten über eine Seite in den String s. Dieser so ermittelte String wird über die Funktion Put der Klasse Database in die Datenbank eingetragen. Jede Zeile in der Datenbank stellt die Informationen zu einer durch HtDig 17/39

gefundenen Seite dar. Die Funktion Put ist eine durch HtDig definierte Funktion. Die dazugehörige Implementierung befindet sich im Ordner htlibim Database.cc des Quellcodes. Eine detaillierte Beschreibung findet sich in der Dokumentation von HtDig. DocumentRef Serialize Damit die Fehler und Warnungen in den String geschrieben werden, welches im Abschnitt DocumentDB beschrieben wurde müssen entsprechende Funktionsaufrufe erfolgen. addnum(doc_error_count, s, doctidyerrorcount); addnum(doc_warning_count, s, doctidywarningcount); enum { DOC_ID, // 0 DOC_TIME, // 1 DOC_ACCESSED, // 2 DOC_STATE, // 3 DOC_SIZE, // 4 DOC_LINKS, // 5 DOC_IMAGESIZE, // 6 DOC_HOPCOUNT, // 7 DOC_URL, // 8 DOC_HEAD, // 9 DOC_TITLE, // 10 DOC_DESCRIPTIONS, // 11 DOC_ANCHORS, // 12 DOC_EMAIL, // 13 DOC_NOTIFICATION, // 14 DOC_SUBJECT, // 15 DOC_STRING, // 16 DOC_METADSC, // 17 DOC_BACKLINKS, // 18 DOC_KEYWORDS, // 19 DOC_SIG, // 20 DOC_ERROR_COUNT, // 21 DOC_WARNING_COUNT // 22 }; Die Fehler und Warnungen müssen im Htidg über enum definiert werden und werden mit dem Index 21 für Fehler und 22 für Warnungen erkannt. 18/39

Auslesen der Berkley DB HtDig bietet die Möglichkeit eine Textversion der Berkley DB zu erstellen Dump File. Dafür müssen die vorher in der Datenbank gespeicherten Daten wieder ausgelesen werden und in ein Textfile gespeichert werden. Diese Funktionalität bietet die Funktion DumpDB der Klasse DocumentDB. DocumentDB - DumpDB In dieser Funktion wird die Datenbank Zeilenweise aus der BerkleyDB gelesen. Diese Zeile wird über die Funktion Deserialize der Klasse DocumentRef ausgewertet und eine neue Referenz erstellt in der alle Daten aus der Berkley DB in die entsprechenden Variablen der Referenz eingetragen werden. Diese Variablen, darunter auch die Fehler und Warnungen, werden über die Referenz ausgelesen und in das File db.docs geschrieben. fprintf(fl, "\ter:%d", ref->doctidyerrorcount()); fprintf(fl, "\twa:%d", ref->doctidywarningcount()); DocumentRef Auslesen der Fehler und Warnungen aus der Referenz int DocTidyErrorCount() {return doctidyerrorcount;} int DocTidyWarningCount() {return doctidywarningcount;} Deserialisieren der Zeile aus der Datenbank getnum(x, s, doctidyerrorcount); getnum(x, s, doctidywarningcount); Bei dem Auslesen der Datenbank ist ein Mechanismus eingebaut worden, bei dem eingegeben werden kann, welche Daten aus der Berkley DB ausgelesen werden sollen. Im Falle der weiterführenden Visualisierung der Fehler und Warnungen ist nur noch ein weiteres Datum von Bedeutung. Um die Anzahl der Fehler und Warnungen den entsprechenden Internetseiten zuzuweisen und eine Visualisierung wie im nächsten Abschnitt beschrieben durchzuführen ist es die URL, die zusätzlich zu den Fehlern und Warnungen in das Textfile geschrieben wird. 19/39

VII. Kompilieren des HtDig Das kompilieren des HtDig erfolgt in wie in vorherigen Versionen von HtDig über die Ausführung des Makefiles. Das Makefile.config, das bei der Ausführung des Makefiles eingebunden wird, enthält unter anderem Informationen über Bibliotheken, die eingelinkt werden. Makefile.config Um die Tidy-Funktionen in HtDig übersetzen zu können, muss die dazugehörige Bibliothek eingebunden werden. Diese Bibliothek ist das libtidy.a und liegt im tidy Ordner des Quellcodes vor. Das Makefile.config muss um den folgenden Eintrag erweitert werden, damit der tidy-code erkannt und übersetzt werden kann: HTLIBS=../htcommon/libcommon.a \../htlib/libht.a \../db/dist/libdb.a \../tidy/libtidy.a 20/39

VIII.Visualisierung der Fehler und Warnungen Für die Visualisierung der Fehler und Warnungen sind die im Kapitel Aufgabenstellung genannten Punkte notwendig. Die Visualisierung ist so vorgesehen mit Hilfe von PHP als Apache Modul, unter Verwendung der GD und JpGraph Library die Fehler und Warnungen als Säulendiagramm darzustellen. Auf den folgenden Seiten werden die für die Visualisierung nötigen Bestandteile eingehend erklärt. 21/39

Apache Server: Was ist Apache? Der Apache ist ein ein mächtiger, flexibler, HTTP/1.1 konformer Web Server. Der Name Apache steht für >>A PAtCHy server<< und basiert auf eine Reihe von patch Dateien. Der Apache httpd server hat folgende Funktionen - implementiert die aktuellsten Protokolle, includierd HTTP/1.1 (RFC2616) - ist weithergehend erweiterbar und konfigurierbar über andere Module (z.b. PHP Modul ). - Ist auf den meisten Betriebssystemen installierbar. Da wären Windows NT/9x, Netware 5.x und mehr, OS/2 und mit den meisten Versionen von Unix, sowie weitere hier nicht genannte. Stellt den kompletten Quellcode mit uneingeschränkter Lizenz zur Verfügung und erlaubt durch einfache Mittel das einbinden der hier benötigten Module zur Ausführung von PHP Skripts. Weiterführende Informationen zu dem Apache Server und seiner Funktionalität finden sie im Manual unter http://httpd.apache.org/docs/ 22/39

Warum Apache? In dem vorhergehenden Abschnitt wurde über die Eigenschaften des Apache Servers berichtet. Der Apache Server ist schnell, performant bessere Funktionalität als andere Server. und hat eine Die Installation erfolgt leicht und unkompliziert. Die für die Visualisierung notwendige Einbindung von PHP als Apache Modul erfolgt relativ einfach. In dem Abschnitt Installation im Kapitel PHP ist dies genauer aufgelistet und beschrieben. Installation Die Installation erfolgt sehr einfach. 1. Apache als Zip Datei auf der Seite www.apache.org herunterladen 2. Die Zip Datei in den Ordner C:/Programme/Apache entpacken 3. Die in dem Ordner befindliche Apache.exe ausführen 4. Apache ist nun installiert und der Apache ist gestartet. 5. Wenn man nun den Apache startet erscheint die Begrüßungsseite des Apache Servers. 23/39

PHP Was ist PHP? Die Abkürzung PHP steht für >>PHP: Hypertext Preprocessor<<. PHP ist eine in HTML eingebettete Skriptsprache für die dynamische Erzeugung von Webseiten, deren Syntax an die Sprachen C, Java und Perl angelehnt ist. Im Gegensatz zu clientseitigen Skriptsprachen wie JavaScript wird der PHP-Code auf dem Server ausgeführt. Im Vergleich zu Konkurrenzprodukten glänzt PHP besonders durch seinen großen Umfang an fertigen Funktionen für alle Anwendungsbereiche. Es gibt drei Hauptgebiete, in denen PHP Skripte genutzt werden. Serverseitige Skripte o Dies ist traditionelle und auch Hauptfeld von PHP. Dazu werden drei Dinge benötigt. Den PHP Parser (als CGI oder Server-Modul eingebaut), einen Webserver ( in diesem Projekt der Apache Server) und einen Webbrowser ( z.b. Internet Explorer). Der im vorherigen Abschnitt beschriebene Apache-Server muss mit einer eingebundenen PHP Installation gestartet werden. Die Ausgabe der hier definierten PHP Programme können über den Server mit einem Webbrowser angesehen werden. Für weitere Informationen steht der Abschnitt Installation zur Verfügung. 24/39

Skripte auf der Kommandozeile Es gibt die Möglichkeit PHP Skripte zu schreiben, um sie ohne einen Server oder einen Browser laufen zu lassen. Hierfür wird nur der PHP Parser benötigt. Diese Art der Verwendung ist für die regelmäßig auszuführende Skripte mittels cron (unter *nix oder Linux) oder dem Task Scheduler (unter Windows). Diese Skripte können auch für einfache Aufgaben zur Verarbeitung von Text verwendet werden. Weitere Informationen dazu finden Sie in der Dokumentation von PHP auf www.php.net im Abschnitt Using PHP from the command line. Schreiben clientseitiger GUI Applikationen PHP ist wahrscheinlich nicht die beste Sprache um GUI- Applikationen zu schreiben, aber wenn man in der Programmierung von PHP bewandert ist und einige weiterführende Funktionen in clientseitige Applikationen benutzen möchte, kann man PHP-GTK nutzen, um so benötigte Programme zu schreiben. Auf diese Art bietet sich auch die Möglichkeit, Plattformübergreifende Applikationen zu schreiben. PHP-GTK ist eine Erweiterung von PHP, welche in der Hauptdistribution nicht enthalten ist. Sollte das für eine Entwicklung interessant sein, gibt ein Besuch auf den http://gtk.php.net/ einen tieferen Einblick in den Umgang mit GUI Applikationen. 25/39

Plattformen PHP kann auf allen gängigen Betriebssystemen verwendet werden, inkl. Linux, vielen Unix-Varianten (inkl. HP-UX, Solaris und OpenBSD), Microsoft Windows, Mac OS X, RISC OS und auf vielen anderen Betriebssystemen. PHP unterstützt auch die meisten der heute gebräuchlichen Webserver. Dies umfasst Apache, Microsoft Internet Information Server, Personal Web Server, Netscape und iplanet Server, Oreilly Website Pro Server, Caudium, Xitami, OmniHTTPd, und viele andere. Für den Großteil der Server bietet PHP ein eigenes Modul, für die anderen, welche den CGI Standard unterstützen, kann PHP als CGI Prozessor arbeiten. Mit PHP bietet sich die Freiheit an, es auf dem Betriebssystem und dem Webserver Ihrer Wahl laufen zu lassen. In der derzeitigen Version von PHP ist nicht jedes Standard OOP als Feature realisiert, dennoch sind viele Bibliotheken und große Applikationen (inklusive der PEAR Bibliothek) exklusiv unter Verwendung von OOP Code geschrieben worden. PHP beschränkt seine Ausgabe nicht auf HTML. Seine Fähigkeiten umfassen auch das dynamische Generieren von Bildern, PDF Dateien und Flash Animationen (mittels libswf und Ming). So ist es auch möglich leicht jede Art von Text, wie XHTML oder irgendeine andere XML Datei auszugeben. PHP kann diese Dateien automatisch generieren und im Dateisystem speichern, anstatt diese nur auszugeben bzw. auszudrucken, und formt auch serverseitigen Zwischenspeicher Ihrer dynamischen Inhalte. Vielleicht die größte und bemerkenswerteste Stärke von PHP ist seine Unterstützung für eine breite Masse von Datenbanken. Eine datenbankgestützte Website zu erstellen ist unglaublich einfach ( z.b. MySQL, Oracle). Adabas D Ingres Oracle (OCI7 und OCI8) dbase InterBase Ovrimos Empress FrontBase PostgreSQL 26/39

Erste Schritte Der PHP Code kann in HTML Code einbettet oder alleine benutzt werden. Dazu wird der PHP Code mittels spezieller Tags vom umgebenden HTML Code abgegrenzt werden <?php [PHP CODE]?> Das >>Hallo, Welt<< - Programm <html> <head> <title> Beispiel </title> </head> <body> <?php echo Hallo, Welt ;?> </body> </html> Mit der echo - Anweisung kann ein Text ausgegeben werden. Um das Beispielprogramm einzugeben, kann man einen beliebigen Texteditor verwenden. Die Datei muss dann im document_root Ordner des Apache Servers gespeichert werden und als Dateiendung muss.php benutzt werden. Startet man nun den Webbrowser und gibt die URL ein, bestehend aus der Serveradresse und, durch ein Schrägstrich abgetrennt, den Dateinamen Eine weitergehende Dokumentation über die Syntax und Semantik sowie Variabelendefinition findet sich auf der PHP Homepage unter dem Abschnitt Handbuch zu PHP. 27/39

Warum PHP als Apache Modul? Wie im Kapitel Aufgabenstellung beschrieben, sollte der PHP Parser als Modul in den Apache eingebaut werden. Die Vorteile des Apache Servers wurden in den Abschnitten Was ist Apache? und Warum Apache? beschrieben. In dem vorhergehenden Teil Was ist PHP? wurden mehrere Möglichkeiten beschrieben, wie man PHP einsetzen kann. Die Visualisierung ist ein Teil der HtDig Funktionalität. Die erste Version der PHP Anwendung in Form der Serverseitige Skripte ist die gebräuchlichste Art. Diese Form der Einbindung von PHP bietet die Möglichkeit in einfacher Form die Visualisierung zugänglich zu machen. Es ermöglicht die Ansicht der Visualisierung ohne zusätzliche Installation spezifischer Tools zur Ausführung und Ansicht der Graphik über die Fehler und Warnungen auf HTML Seiten. Installation Im Abschnitt Installation Kapitel Apache wurden die nötigen Schritte zur Installation des Apache Servers detailliert erklärt. Für das einbinden von PHP als Modul in den Apache müssen einige Eintragungen in der conf Datei des Apache Servers erfolgen. Damit die Änderungen im Apache wirksam werden, muss der Server gestoppt werden und nach den Änderungen neu gestartet. httpd.conf LoadModule php4_module c:/php/sapi/php4apache.dll AddModule mod_php4.c AddType application/x-httpd-php.php Diese Zeilen binden das PHP Modul zur Ausführung der PHP Anwendungen auf dem Server ein. 28/39

php.ini doc_root ="c:\programme\apache\htdocs" Das legt den doc_root auf den Pfad des Document Ordners vom Apache Server. Der Dokument Ordner ist das Verzeichnis, indem über den Server aufgerufene Seiten gesucht werden. Z.B. Aufruf /localhost/helloworld.php => HelloWorld.php im Verzeichnis c:\programme\apache\htdocs\ zu speichern. Dann muss die Datei in den Systemordner verschoben werden (Windows XP, C:\Windows) 29/39

JpGraph 1.11 Was ist JpGraph? JPGraph von Johan Persson ist eine sehr leistungsfähige Chart-Engine, die eine Vielzahl von Chart-Typen kennt. Neben den Standardtypen wie Balken-, Linien- und Pie-Diagrammen kenntjpgraph auch die Erzeugung von 3D Pies, mehrere Pies in einer Grafik, horizontale Balkendiagramme und vieles mehr. Eines der Highlights von JPGraph dürfte sicherlich auch die Erzeugung von Gantt-Diagrammen sein, was JPGraph für die Entwickler von Projektmanagement-Software interessant macht. Aber auch z.b. Entwickler von Content Management Systemen, die Statistiken visualisieren wollen, haben mit JPGraph ein ideales Werkzeug an der Hand. In der neuen Version 1.11 haben so genannte Odometers (Tachometerähnliche Grafiken) Einzug gehalten. JpGraph ist in PHP geschrieben und ist unkompliziert in eigene Anwendungen eingebaut werden.jpgraph findet sich auf http://www.aditus.nu/jpgraph/ Für den Privatgebrauch ist JPGraph kostenlos unter der QPL Lizenz zu beziehen. Für alle anderen Zwecke im kommerziellen Bereich ist die Lizenzierung Pflicht. Mehr zu diesem Thema auf den Seiten www.rent-a-phpwizard.de/jpgraph_landing.php Zusätzlich zu den hier genannten Quellen bietet Björn Schotte weitergehenden Support sowie kommerzielle Lizenzen an (den der Autor von JPGraph nicht bietet), die bei ihm zu beziehen sind. Kontakt zu Björn Schotte mailto:bjoern@rent-a-phpwizard.de 30/39