Unterabschnitte


Technische Grundlagen

In diesem Kapitel sollen die Grundlagen erläutert werden, welche die technischen Voraussetzungen für das Common Information Model bilden, das in Kapitel 5 detailliert besprochen wird. Zunächst soll erläutert werden, welche Tätigkeiten das Systems- und Konfigurationsmanagement umfasst (Kapitel 3.1). Danach werden Grundlagen und aktuelle Ansätze zur Konfiguration von Anwendungen erläutert (Kapitel 3.2). Schließlich werden die Standards vorgestellt, auf denen CIM beruht. Dies sind:

Die Reihenfolge richtet sich dabei nach der zeitlichen Entstehung der Standards.


Systems und Konfigurationsmanagement

Wie in der Einleitung bereits angedeutet wurde, fallen unter das Systems Management alle Tätigkeiten im Rahmen des Betriebs eines Informationssystems. Diese sind Aufgaben, die im Anschluss an eine erfolgreiche Inbetriebnahme nötig sind, um ein zufriedenstellendes Funktionieren des Systems sicherzustellen. Dazu sind im Genauen zwei Dinge durchzuführen:

Diese beiden Aufgaben, also Überwachung und Steuerung, stehen in einem ständigen Wechsel zueinander: Wird im Rahmen der Überwachung festgestellt, dass eine Änderung am System nötig ist, muss anschließend im Rahmen der weiteren Überwachung beobachtet werden, ob die Modifikationen wirksam sind.

Die genauen Aufgaben, die beim Betrieb eines IT-Systems durchzuführen sind, wurden in den achtziger Jahren durch die ISO kategorisiert [4]. Damals war man auf der Suche nach einem methodischen Ansatz für das Management von Netzwerken, da viele verschiedene Netzwerkstandards Verbreitung gefunden hatten und eine einheitliche Verwaltung unmöglich war.

Abbildung 3.1: hierarchische Einteilung von Systems- und Konfigurationsmanagement
Image systems-management.gif 

Die Kategorien des Systems Management (siehe auch Abbildung 3.1) sind im Einzelnen:

Fehlermanagement:
Aufgabe des Fehlermanagements ist es, Fehlfunktionen zu erkennen, die Verantwortlichen darüber in Kenntnis zu setzen und wenn möglich den Fehler zu beheben.

Dabei kommt es darauf an, einen Fehler korrekt einzugrenzen: Beispielsweise könnte ein Überwachungssystem zu dem Schluss kommen, dass ein Netzwerkgerät, das sich aus Sicht des Managers hinter einem anderen Gerät befindet, defekt ist, obwohl es nur nicht erreicht werden kann, da die davorgeschaltete Komponente ausgefallen ist.

Performance Management:
Das Performance Management soll im Rahmen des Betriebs gewährleisten, dass das Gesamtverhalten des Systems hinsichtlich Geschwindigkeit und Antwortverhalten alle Anforderungen erfüllt. Daher sind für ein Performance Management drei Schritte nötig:
  1. Festschreibung von Mindestanforderungen
  2. Messung von Performanceparametern
  3. Analyse der Messwerte und Vergleich mit den Anforderungen. Werden die Mindestanforderungen nicht eingehalten, wird ein Fehler festgestellt.

Im Rahmen des Performance Managements ist es zusätzlich sinnvoll, Tendenzen zu erkennen, die sich bei den Messungen feststellen lassen, um Maßnahmen zu treffen, bevor sich die Leistung des Systems nicht mehr in den festgelegten Randparametern bewegt.

Accounting Management:
Auch beim Accounting Management erfolgt eine Messung von Systemparametern, welche die Auslastung betreffen. Ziel ist es aber festzustellen, welche Benutzerkreise die jeweilige Last verursachen. Dies ermöglicht die gerechte Verteilung von Systemressourcen oder die Weiterberechnung der Auslastung einer Ressource.

Konfigurationsmanagement:
Auf das Konfigurationsmanagement wird im folgenden Kapitel 3.2.1 genauer eingegangen.

Sicherheitsmanagement:
Die Aufgaben, die für das Management der Sicherheit von Informationssystemen anfallen, sind sehr vielschichtig:

Die Gesamtaufgabe des Sicherheitsmanagement ist in jedem Falle

Unter die Aufgaben des Sicherheitsmanagements fallen beispielsweise (die Liste ließe sich fast beliebig fortsetzen):

physikalische Zutrittskontrollsysteme:
Der Zugang zu vertraulichen Daten kann dadurch sichergestellt werden, dass die Infrastruktur des Systems (Server, Netzwerke) nur von Personen erreicht werden kann, die mit dem Betrieb beauftragt sind.
Benutzerverwaltung:
Mit Maßnahmen zur Authentifizierung, wie Passwörtern oder Sicherheitstokens, soll sichergestellt werden, dass ein Benutzer derjenige ist als der er sich ausgibt. Durch Authorisierungsrichtlinien wird für die entsprechende Person festgelegt, über welche Berechtigungen sie im System verfügt.
Netzwerksicherheit:
Spätestens mit dem Aufkommen des Internet hat die Netzwerksicherheit eine hohe Bedeutung erlangt. Durch den Einsatz von Firewalls soll gewährleistet werden, dass sich der Datenverkehr nur im erlaubten Rahmen bewegt.
Virenerkennung:
Mit dem Aufkommen der Personal Computer breiteten sich Computerviren aus. Durch das Internet sind die Verbreitungsmöglichkeiten noch weiter gestiegen. Daher müssen Datenbestände regelmäßig und eingehender Datenverkehr (sei es über Netzwerke oder Disketten) ständig überprüft werden.


Konfiguration von Anwendungen

In diesem Kapitel soll auf das Konfigurationsmanagement eingegangen werden (Kapitel 3.2.1).

Anschließend werden spezielle vorhandene Schnittstellen behandelt, die Betriebssysteme und Anwendungen mit Konfigurationsdaten versorgen (Kapitel 3.2.2). Solche Schnittstellen sind für das Konfigurationsmanagement von höchster Bedeutung, speziell auch im praktischen Teil dieser Arbeit (Kapitel 8).


Konfigurationsmanagement

Unter das Konfigurationsmanagement als Disziplin des Systems Management fallen gängiger Literatur ([4], [28]) nach zwei völlig verschiedene Begriffe:

Versionierung und Inventarisierung:
von Soft- und Hardware. Ziel dieses Teilgebiets des Konfigurationsmanagements ist es, bei verschiedenen Hard- und Softwareinstallationen (die zu einem Informationssystem gehören) die Übersicht zu behalten über:

Damit verbunden ist auch der Aspekt der Paketierung von Software und seine Verteilung auf einzelne Rechnersysteme. Softwareanwendungen weisen inzwischen oft einen Umfang auf, der nicht einmal mehr auf einer CD-ROM Platz findet. Ein effizientes Konfigurationsmanagement kann zusätzlich dadurch erschwert werden, dass eine Softwareinstallation per Fernwartung nicht möglich ist, sondern ein Servicetechniker diese vor Ort vornehmen muss.

Zur Lösung der Probleme, die im Bereich der Softwareversionierung und -paketierung seit dem Aufkommen hochgradig verteilter Systeme bestehen, konnten sich zwischenzeitlich diverse Lösungen durchsetzen:

Der für diese Arbeit interessante Teil des Konfigurationsmanagement ist aber die eigentliche

System- und Anwendungskonfiguration
Im Gegensatz zur Versionierung und Inventarisierung handelt es sich hierbei nicht um etwas Statisches, sondern einen dynamischen Vorgang.

Bei jedem Rechner- und Anwendungssystem müssen vor seiner Inbetriebnahme Einstellungen vorgenommen werden. Diese bleiben über den Einsatzzeitraum des Systems hinweg in der Regel nicht unverändert, sondern müssen geänderten Bedürfnissen angepasst werden.

Die einzelnen Anpassungen sind dabei meist die Ergebnisse anderer Bereiche des Systems Management:

Eine treffende und umfassende Definition für das Konfigurationsmanagement[13] liefert die Gesellschaft für Informatik:

Definition Konfigurationsmanagement (GI)

Identifikation der (Software-) Konfiguration eines Systems zu diskreten Zeitpunkten zum Zwecke der systematischen Steuerung von Konfigurationsänderungen und der Aufrechterhaltung der Vollständigkeit und Verfolgbarkeit der Konfiguration während des gesamten Software-Lebenszyklusses.

Dem Verständnis der GI zufolge ist also auch die zeitliche Nachvollziehbarkeit in Form einer Versionierung für das Konfigurationsmanagement essentiell.


Konfigurationsschnittstellen: praktische Ansätze


Konfigurationsdateien

Konfigurationsdateien sind der älteste und einfachste Ansatz zur System- und Softwarekonfiguration. Dabei werden Konfigurationsdaten einfach in einer Textdatei hinterlegt, die durch den Systemverwalter bearbeitet werden kann.

Dieser Ansatz zur Konfiguration kommt klassischerweise in UNIX-Umgebungen zum Einsatz, wobei hier für jede Systemkomponente eine oder mehrerer Dateien verwendet werden. Das gleiche gilt für frühere DOS- oder Windows-Systeme, bei denen diese Dateien die Endung .ini führten. Damit es bei UNIX dennoch nicht zu einer unübersichtlichen Verteilung der Konfigurationsdaten kommt, befinden sich die Dateien gesammelt im Systemverzeichnis /etc.

Eine Konfigurationsdatei selbst besteht in der Regel aus einer Folge von Schlüssel-Wert-Paaren. Ihre Komplexität erwächst jedoch aus

Dies soll anhand eines Ausschnittes aus der Konfigurationsdatei für den Apache-Webserver erläutert werden:

UseCanonicalName On
DefaultType      text/plain

<Directory "/var/www/icons">
   Options       Indexes MultiViews
   AllowOverride None
   Order         allow,deny
   Allow         from all
</Directory>

Die Optionen, die sich im Directory-Abschnitt befinden, gelten nur für ein bestimmtes Verzeichnis. Wären die Schlüssel-Wert-Paare an anderer Stelle notiert, würden sie global gelten.

Der Schlüssel Options enthält zwei Werte. Im Falle des Apache werden sie durch Whitespaces getrennt notiert. Die Trennung durch Leerzeichen gilt auch für die Unterscheidung zwischen Schlüssel und Wert. Bei anderen Programmen (z.B. dem Mailserver Postfix) muss hier das Gleichheitszeichen (=) verwendet werden.

Eine maschinelle Verarbeitung solcher Konfigurationsdateien durch Werkzeuge zum Systems Management bringt durch diese hohe Komplexität viele Schwierigkeiten mit sich. So muss das Werkzeug wissen, welche Schlüssel-Wert-Trennung Gültigkeit hat und in welcher Verschachtelungsebene Konfigurationsparameter einzufügen sind.

Windows-Registry

Die Windows-Registry ist eine zentrale Konfigurationsdatenbank, in der seit Windows 95 die Daten des Betriebssystems und aller installierter Anwendungen an zentraler Stelle gehalten werden. Damit wurden die früher üblichen .ini-Dateien abgelöst.

Der Vorteil der Zentralisierung birgt natürlich auch ein Risiko: Eine Inkonsistenz in dieser zentralen Datenbank kann eine komplette Neuinstallation des System nötig machen.

Die Registry ist eine hierarchisch gegliederte Datenbank (Abbildung 3.2). Sie besteht aus sechs Hauptästen, in denen sich beliebig tief verschachtelt weitere Äste befinden (dies entspricht den verschachtelten Optionen in einer Konfigurationsdatei). Jeder Ast besitzt eine beliebige Menge an Blättern, die einem Schlüssel entsprechen.

Abbildung 3.2: Ansicht der Windows-Registry im Registrierungs-Editor
Image registry.png 

Die Bedeutung der sechs Hauptäste ist [20]:

  1. HKEY_LOCAL_MACHINE: der größte Ast der Registry, enthält alle statischen Konfigurationseinträge für Hard- und Softwarekomponenten.
  2. HKEY_CLASSES_ROOT: Verknüpfung zu einem Ast unter HKEY_LOCAL_MACHINE zur Abwärtskompatibilität mit der alten Registry aus Windows 3.1.
  3. HKEY_USERS: Enthält Unteräste für selbstdefinierte Einstellungen einzelner Benutzer sowie einen Unterast mit Standardeinstellungen, die jeweils durch die Benutzer überschrieben werden können
  4. HKEY_CURRENT_USER: Verknüpfung mit den Einträgen des aktuell angemeldeten Benutzers unter HKEY_USERS
  5. HKEY_CURRENT_CONFIG: Verknüpfung mit einem Ast unter HKEY_LOCAL_MACHINE, der die aktuell gültige Betriebssystemkonfiguration, wie z.B. aktivierte Geräte oder die Bildschirmauflösung enthält.
  6. HKEY_DYN_DATA: DYN steht für dynamisch. Einstellungen, die hier geändert werden, verlieren ihren Wert beim nächsten Neustart oder spiegeln nur aktuelle Werte wieder (wie Plug- and Play-Informationen).

Der Zugriff auf die Registry kann ausschließlich über die API des Betriebssystems erfolgen, bei der die Übergabe von Schlüssel und Werten über Objekte geschieht. Microsoft stellt für den manuellen Eingriff in die Datenbank ein spezielles Programm, den Registierungs-Editor (Abbildung 3.2), zur Verfügung.

XML-basierte Ansätze

Besonders im Java-Umfeld etabliert sich momentan XML (siehe auch Kapitel3.3) als Konfigurationsschnittstelle. Deshalb erfolgt hier ein kurzer Vorgriff auf das nächste Kapitel, das sich speziell mit XML beschäftigt.

Über eine spezielle Document Type Definition (DTD), die nicht nur die Struktur, sondern auch die semantische Bedeutung der Konfigurationsdaten abbildet, können diese in einer Form abgelegt werden, die eine manuelle und eine automatisierte Verarbeitung ermöglichten. Für die automatisierte Verarbeitung von XML-Dateien steht eine große Auswahl an Werkzeugen und APIs zur Verfügung.

Ein Beispiel für eine XML-konfigurierbare Anwendung ist der WebSphere Application Server von IBM, dessen Konfiguration hier ausschnittsweise dargestellt ist:

<virtual-host name="default_host" action="update">
  <mime-table>
    <mime type="audio/x-wav">
      <ext>wav</ext>
    </mime>
    <mime type="application/x-sv4cpio">
      <ext>sv4cpio</ext>
    </mime>
      ...
      ...
  </mime-table>
  <alias-list>
    <alias>localhost</alias>
    <alias>127.0.0.1</alias>
    <alias>MY400.MYCOMPANY.COM</alias>
  </alias-list>
...

zusammenfassende Bewertung der Ansätze

Konfigurationsdateien sind einfach zu implementieren, jedoch für eine automatisierte Bearbeitung in ihrer Struktur zu uneinheitlich.

Die Windows-Registry steht diesem entgegen: Sie ist ein einheitliches zentrales Repository, das eine konsistente API bietet. Außer mit speziellen Werkzeugen ist aber kein Zugriff darauf möglich.

Ein XML-basierter Ansatz vereinigt die Vorteile der beiden Lösungen: Die Konfigurationsdaten können händisch oder maschinell bearbeitet werden. Die Datenhaltung selbst kann je nach Bedarf zentralisiert (in einer XML-Datenbank) oder in einzelnen Dateien erfolgen.


SGML und XML

Standard Generalized Markup Language (SGML)

Die Textbeschreibungssprache SGML reicht in ihrer Entstehungsgeschichte bis in die späten 60er Jahre zurück, eine Normierung erfolgte erstmals 1983 als ANSI-Standard GCA 101-1983 [6]. Üblicherweise erfolgte damals eine direkte Formatierung von Dokumenten, so dass beispielsweise Textpassagen, die in der Ausgabe fett erscheinen sollten, mit dem Attribut fett versehen wurden.

Gerade im Verlagswesen führte dies schon bald zu Problemen, da man sich nicht an eine direkte Formatierung binden wollte. So kam das Konzept einer Trennung von Struktur eines Dokuments und Inhalt auf (TUNNICLIFFE, 1967). Die Formalisierung erfolgte kurz danach (GOLDFARB, MOSHER, LORIE) durch die IBM in Form der Generalized Markup Language (GML). Das Konzept sah vor:

SGML ist das Ergebnis der anschließend folgenden Standardisierung durch ANSI und ISO. Dass sich dieser Standard für allgemeine Anwendungen nie durchsetzen konnte, lag vermutlich an seiner hohen Universalität und dadurch bedingten Komplexität[*].


Hypertext Markup Language (HTML)

Das World Wide Web, das sich seit 1991 als der Standard für verteilten Informationsaustausch im Internet etablierte, benötigte eine zugrunde liegende Technik für die Repräsentation seiner Inhalte. Wesentliches Merkmal des WWW ist die Möglichkeit, einzelne Dokumente durch Querverweise (Links) miteinander zu verknüpfen. Informationen, die auf diese Weise dargestellt werden, werden auch als Hypertext bezeichnet.

Auch für das WWW ist eine Trennung von Struktur und Darstellung der Inhalte sinnvoll, da die Programme zur Darstellung der Inhalte (Browser) verschiedene Darstellungstechniken nutzen -- beispielsweise kann der Browser in einem textbasierten Terminal laufen, so dass grafische Inhalte wegfallen oder über Umwege dargestellt werden müssen.

Somit bot sich SGML als Grundlage für die Hypertext Markup Language (HTML) an. Aufgrund der hohen Komplexität von SGML entschied man sich jedoch zunächst dafür, sich an diesen Standard anzulehnen ohne vollständig konform mit ihm zu sein.

Eine einfache HTML-Seite kann etwa so aussehen:

<html>
   <head>
      <title>Bestellung von Kartenmaterial</title>
   </head>
   <body>
      <h1>Europakarten</h1>
      <p>Herzlich Willkommen! Hier finden Sie durch Anklicken
      auf der Karte mehr Informationen zu den jeweiligen
      L&auml;ndern:</p>
      <img src="euro.jpg" border=4 usemap="#euro">
      <hr>
      <a href="mailto:verlag@karten.de">e-Mail</a> an den
      Verlag.
   </body>
</html>

Dieser Code führt dazu, dass im Browser in der Titelzeile der Text dargestellt wird, der in den Tags <title> und </title> eingefasst ist. Genauso wird der Text innerhalb der BODY-Anweisungen im Browserfenster angezeigt, wobei die hierin verschachtelten Anweisungen für eine weitere Untergliederung sorgen. Durch Anklicken von Bereichen auf dem Bild euro.jpg gelangt der Nutzer per Hyperlink auf eine Seite, die Informationen zu einem bestimmten Land vorhält.

Das World Wide Web Consortium[*] (W3C), das HTML standardisiert, hat HTML in der Version 2.0 dann so überarbeitet, dass es SGML-konform ist. Dies bedeutet, dass eine SGML-DTD existiert, die dem HTML-Standard entspricht.

Extensible Markup Language (XML)

Obwohl HTML standardisiert wurde, kam es durch proprietäre Erweiterungen seitens der Browserhersteller zu einem starken Wildwuchs. Für eine neue Beschreibungssprache, die SGML und HTML vereinigen sollte, ergaben sich so folgende Anforderungen:

Dies führte 1998 zur Definition der Extensible Markup Language (XML) durch das W3C [2].

Nachdem im Rahmen von SGML und HTML bereits einige Andeutungen an XML anklangen, soll sie nun im Detail erläutert werden. Zunächst wird dabei auf die vorhandenen Sprachelemente eingegangen (Kapitel 3.3.3.1), anschließend auf den Einsatz von DTDs (Kapitel 3.3.3.2) und zuletzt auf die Möglichkeiten der Verarbeitung (Kapitel 3.3.3.3).


Elemente, Attribute und Deklarationen

Zur Erläuterung der Struktur eines XML-Dokuments hier ein kleines Beispiel in Form eines Literaturverzeichnisses:

<?xml version="1.0" standalone="yes" encoding="UTF-8"?>
<BOOK>
   <AUTHOR>Kernighan, B.W.</AUTHOR>
   <AUTHOR>Ritchie, D.M.</AUTHOR>
   <TITLE>The C Programming Language</TITLE>
   <PUBLISHER>Prentice Hall</PUBLISHER>
   <YEAR>1978</YEAR>
</BOOK>
<BOOK>
   <AUTHOR>Kopka, H.</AUTHOR>
   <TITLE>LaTeX, Eine Einführung</TITLE>
   <PUBLISHER>Addison-Wesley</PUBLISHER>
   <YEAR>1992</YEAR>
</BOOK>

Zur Ausweisung als XML-Dokument dient die erste Zeile. Bei Anweisungen dieser Form handelt es sich um eine Deklaration.

Die Marken <BOOK>, <AUTHOR> usw. sind Elemente. Ein Element muss immer geschlossen werden, dies geschieht durch die gleiche Marke mit einem vorangestellten / (wie z.B. </BOOK>).

Damit ein XML-Dokument wohlgeformt ist, gilt für die Verschachtelung der Elemente das Stack-Prinzip. Das würde bedeuten, dass eine Struktur wie

<BOOK>
   <AUTHOR>Kernighan, B.W.</BOOK>
</AUTHOR>

bei der zuerst ein äußeres Element geschlossen wird, ungültig ist. Elemente dürfen auch leer sein -- in diesem Fall ist eine abkürzende Darstellung möglich. Dies zeigen die beiden nächsten Zeilen, deren Bedeutung identisch ist:

<BOOK></BOOK>
<BOOK/>

Bei der Benennung von Elementen ist zu beachten, dass zwischen Groß- und Kleinschreibung unterschieden wird, das heißt <BOOK> und <book> sind verschiedenartige Elemente.

Elemente können auch um Attribute erweitert werden, wie in diesem Beispiel:

<BOOK>
   <AUTHOR id="kopka">Kopka, H.</AUTHOR>
   <TITLE>LaTeX, Eine Einführung</TITLE>
   <PUBLISHER id="a-w">Addison-Wesley</PUBLISHER>
   <YEAR>1992</YEAR>
</BOOK>
<BOOK>
   <AUTHOR idref="kopka"/>
   <TITLE>LATEX 2. Ergänzungen</TITLE>
   <PUBLISHER idref="a-w"/>
   <YEAR>1994</YEAR>
</BOOK>

Dabei wird dem Element AUTHOR das Attribut id als Schlüssel zugewiesen. Dies dient in diesem Fall einer späteren Referenz.


Document Type Definitions (DTD)

Im obigen Beispiel des Literaturverzeichnisses enthielt die Kopfdeklaration das Attribut standalone=yes. Dies führt bei der Verarbeitung eines XML-Dokuments dazu, dass:

Dies ist aber nicht immer wünschenswert. Um beispielsweise das obige Verzeichnis sinnvoll verarbeiten zu können, sollte nur ein bestimmter Vorrat an Elementen verwendet werden, nämlich solche, die für ein solches Verzeichnis benötigt werden. Außerdem macht es keinen Sinn, innerhalb eines TITLE-Elements weitere BOOK-Elemente einzufügen.

Zur Definition der inhaltlichen Struktur eines XML-Dokuments kommen daher die von SGML bekannten DTDs zum Einsatz, welche von theoretischen Standpunkt einer kontextfreien Grammatik entsprechen.

Abbildung 3.3: Definition der Syntax eines XML-Dokuments durch eine DTD
Image xml-dtd.gif 

Wird die DTD des Literaturverzeichnisses in der Datei document.dtd abgelegt, muss in der XML-Datei anfangs mit der Deklaration <!DOCTYPE Document SYSTEM document.dtd> bekannt gemacht werden, welche DTD zum Einsatz kommt. Die DTD selbst könnte so aussehen:

<!DOCTYPE bib [
   <!ELEMENT BIB (BOOK+)>
   <!ELEMENT BOOK (AUTHOR+, TITLE, PUBLISHER?, YEAR?)>
   <!ATTLIST BOOK
      isdn CDATA #IMPLIED
      nickname CDATA #IMPLIED>
   <!ELEMENT AUTHOR (#PCDATA)>
   <!ATTRLIST AUTHOR
      id ID #IMPLIED
      idref IDREF #IMPLIED>
   <!ELEMENT TITLE (#PCDATA)>
   <!ELEMENT PUBLISHER (#PCDATA)>
   <!ELEMENT YEAR (#PCDATA)>
]>

In diesem Beispiel dürfte leicht zu erkennen sein, worum es geht, wenn man die ELEMENT-Deklarationen als reguläre Ausdrücke versteht:

Die Spezifikation gültiger Attribute eines Elements erfolgt ein wenig anders: Durch die Deklaration ATTLIST wird festgelegt, welches Attribut in welcher Kardinalität ein Element aufweisen kann. Dabei steht #IMPLIED für ein optionales und #required für ein zwingendes Erscheinen. XML sieht für Attribute verschiedene Datentypen vor, wobei CDATA als beliebiger String der häufigste ist.

Ein XML-Dokument, das konform zu einer DTD ist, ist valide bzw. gültig.


Verarbeitung von XML-Daten

Auch wenn XML-Dokumente für den Menschen gut lesbar sind, besteht deren Sinn primär in einer automatisierten elektronischen Verarbeitung. Dabei ist XML sowohl für die Datenspeicherung als auch für den Datenaustausch gut geeignet. Zur Speicherung von XML wurde bereits spezielle Datenbanksysteme entwickelt[*].

XML-Parser

Der algorithmischen Verarbeitung eines XML-Dokuments dient ein XML-Parser. Dabei haben sich zwei API-Ansätze etabliert:

DOM:
(Document Object Model) ist eine Spezifikation des W3C, bei der der Parser das Dokument im Hauptspeicher des Rechners hierarchisch abbildet. Dies hat Vor- und Nachteile:

SAX:
(Simple API for XML) entstammt der Java-Welt. Die Idee zur Verarbeitung ist hier genial und dennoch einfach: Für jede Stelle in einem XML-Dokument (Element-Anfang, Attribut, Werte) registriert das Programm beim Parser einen Eventhandler, der die weitere Verarbeitung übernimmt. Kommt der Parser an einer registrierten Stelle an, wird der Handler aufgerufen.

Dies ermöglicht eine schnelle und speichersparende Verarbeitung von großen Dokumenten, da nur die Elemente geparst werden, die für das Programm interessant sind. Dafür ist aber nur ein sequentieller Zugriff auf das Dokument möglich. Eine Bearbeitung kann nicht erfolgen.


Transformation mit XSL

Die erklärte Grundlage von XML wie von SGML ist die Repräsentation von Daten, ohne dabei auf die Darstellung dieser Daten einzugehen. Doch gerade ein Literaturverzeichnis wie das obige soll vielleicht einmal in einem Buch abgedruckt werden.

Genau dazu dienen XML-Stylesheets, die in der Extensible Stylesheet Language (XSL) formuliert werden. Sie ist auch in der Lage, XML-Dokumente umzustrukturieren, um verschiedene Darstellungsformen ineinander umzuwandeln. Der XSL-Code[*] zur Umwandlung der obigen Bibliografie in ein HTML-Dokument könnte wie folgt aussehen:

<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <HTML><xsl:apply-templates/></HTML>
   </xsl:template>
   <xsl:template match="BIB">
      <UL><xsl:apply-templates/></UL>
   </xsl:template>
   <xsl:template match="BOOK">
      <LI><xsl:apply-templates/></LI>
   </xsl:template>
   <xsl:template match="AUTHOR">
      <xsl:value-of select="."/>
   </xsl:template>
   <xsl:template match="TITLE">
      <EM><xsl:value-of select="."/></EM>
   </xsl:template>
</xsl:stylesheet>

In diesem Beispiel kommen nur zwei einfache Mechanismen zum Einsatz:


Hypertext Transfer Protocol (HTTP)

Während das Kapitel 3.3.2 die für das World Wide Web verwendete Seitenbeschreibungssprache behandelte, mit welcher der Inhalt codiert wird, benötigt das WWW auch einen Standard für den Transport dieser Daten. Hier kommt das Hypertext Transport Protocol (HTTP) zum Einsatz, das durch die Internet Engineering Task Force (IETF)[*] als RFC 2616 normiert wurde.

HTTP soll an dieser Stelle erläutert werden, da es im Rahmen des Common Information Model von Bedeutung ist.

Grundsätzlich basiert HTTP auf einem Frage-Antwort-Dialog zwischen Client und Server, wobei ein Webbrowser die Rolle des Clients übernimmt und ein spezieller Systemdienst -- der Webserver -- die Rolle des Servers [29], wie dies in Grafik 3.4 dargestellt ist. HTTP befindet sich dabei im Sinne des ISO/OSI-Schichtenmodells auf der Anwendungsebene. Auf Transportebene kommt TCP zum Einsatz. Standardmäßig wird für HTTP der Port 80 verwendet.

Abbildung 3.4: Funktionsweise des Hypertext Transfer Protocol (HTTP)
Image http.gif 

Die Anfrage eines Clients besteht aus einer Textzeile, die so aussehen kann:

GET /projects/bahn-bilder/

Diese Zeile besteht aus zwei Teilen:

Methode:
(z.B. GET). Die Request-Methode spezifiziert, welche Operation auf ein Objekt durchgeführt werden soll. Welche Methoden die gebräuchlichsten sind, geht aus Tabelle 3.1 hervor.


Tabelle 3.1: die gebräuchlichsten HTTP-Methoden
Methode Zweck
GET Anforderung einer Seite
HEAD Anforderung der Header einer Seite
PUT Upload von Daten
POST Übergabe von Parametern an einen Webserver


URI:
Mit einem Uniform Ressource Identifier wird spezifiziert, auf welches Objekt eine Methode angewandt werden soll. Ein Webserver setzt den URI in eine Pfadangabe relativ zum Startverzeichnis des Webserver-Verzeichnisbaums um oder bildet sie in andere Strukturen um, wie zum Beispiel einen Aufruf an ein externes Programm, das die weitere Verarbeitung übernimmt.

Je nachdem, ob die Verarbeitung des Requests durch den HTTP-Server erfolgreich war oder nicht, antwortet dieser mit verschiedenen Statuscodes, denen der Seiteninhalt angehängt wird. Welche Codes die gebräuchlichsten sind, geht aus Tabelle 3.2 hervor.


Tabelle 3.2: die gebräuchlichsten HTTP-Statuscodes
Code Bedeutung
200 Anfrage wurde erfolgreich bearbeitet
304 Dokument hat sich nicht geändert
400 fehlerhafte URI
403 Request auf diese URI verboten
404 URI wurde nicht gefunden
500 interner Serverfehler


HTTP-Header

Um innerhalb einer Anfrage weitere Parameter übergeben zu können, kann ein Client seit Version 1.0 des HTTP-Protokolls hinter der Request-Zeile zusätzlich Angaben übermitteln. Genauso können serverseitig Zusatzinformationen im Anschluss an den Statuscode übergeben werden.

Beispielsweise übermittelt ein Browser folgende Header-Zeilen:

GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/
    jpeg, image/pjpeg, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE
    5.01; Windows NT)
Host: kj.uue.org
Connection: Keep-Alive

Damit wird spezifiziert, welche Grafikformate, Sprachen und Datenkompressionsmethoden der Client verarbeiten kann. Außerdem wird über den Host-Header explizit angegeben, auf welchen Webserver zugegriffen wird, womit die Realisierung mehrerer Server auf einer IP-Adresse möglich ist (virtuelle Webserver).

Die Antwort des Webservers kann daraufhin die folgende Gestalt haben:

HTTP/1.1 200 OK
Date: Mon, 30 Dec 2002 12:32:26 MET
Server: Apache/1.3.27 (Unix)
Last-Modified: Mon, 30 Dec 2002 03:06:11 MET
Content-length: 327
Connection: close
Content-type: text/html
 
<html>...

So teilt der HTTP-Server dem Client mit, wann das Dokument zuletzt bearbeitet wurde (Last-Modified), wie groß es ist (Content-length) und um welchen Typ von Daten es sich handelt (Content-type). Außerdem wird die aktuelle Uhrzeit übertragen (Date), was in Zusammenhang mit dem Modifikationsdatum ein Caching von Dokumenten erlaubt. Im Anschluss an eine Leerzeile folgt der Dokumenteninhalt, in diesem Beispiel ein HTML-Dokument.


Lightweight Directory Access Protocol (LDAP)

Verzeichnisdienste

Schon in verteilten Informationssystemen kleiner bis mittlerer Größe kommt schnell eine grundlegende Frage auf: Wo befindet sich eine Ressource, und wie kann ich sie erreichen? Um diesem Problem entgegenzutreten, kam es zur Entwicklung von Netzwerkverzeichnisdiensten, in denen zentral Adressdaten gesammelt werden und aus denen diese Daten über eine Abfragesprache selektiv gewonnen werden können.

Bei einem solchen Verzeichnisdienst handelt es sich -- vereinfacht ausgedrückt -- um das elektronische Pendant zu einem Telefonbuch, welches von einem Teilnehmer des Netzwerks ,,Telefonnetz`` verwendet wird um eine spezifische Ressource ,,Telefonnummer`` zu finden.

Domain Name System (DNS)

Ohne einen speziellen Verzeichnisdienst wäre das Internet in seiner heutigen Größe nicht vorstellbar: Der Domain Name Service (DNS) ist ein verteilter Verzeichnisdienst, in dem die Netzwerknamen sowie die zugehörigen numerischen Netzwerkadressen aller erreichbarer Rechnersysteme hierarchisch erfasst sind.

Beispielsweise ist der Rechner twix im studentischen Rechnerpool der Fachhochschule Heilbronn in Deutschland unter dem DNS-Namen twix.stud.fh-heilbronn.de zu erreichen. Ohne einen DNS-Eintrag müsste man seine eigentliche IP-Adresse (141.7.11.107) kennen[*].

Charakteristika

Die folgenden Eigenschaften sind typisch für einen Verzeichnisdienst [16] -- für sie ist ein solcher Dienst entsprechend optimiert:

Viele kleine Einträge:
Da ein Verzeichnisdienst nur sinnvoll ist, wenn alle Ressourcen erfasst sind, kann ein Verzeichnisdienst Millionen von Einträgen umfassen. Da nur einfache Informationen gespeichert werden, sind die Einträge selbst dafür nur klein.
Hierarchischer Aufbau:
Wenn viele Einträge vorhanden sind, ist eine Unterteilung nötig. Eine Hierarchie bietet sich dafür an.
Abbildung von Organisationsstrukturen:
Der Aufbau dieser Hierarchie richtet sich meist nach Organisationsstrukturen, was eine leichte Pflege des Verzeichnisses ermöglicht.
Größtenteils lesender Zugriff:
Die Informationen im Verzeichnis werden bei Bedarf aktualisiert, der restliche Zugriff ist lesend.

DAP und X.500

Im Rahmen von ISO/OSI-Netzwerken wurde bereits ein Dienst für den Zugriff auf beliebige Verzeichnisdaten standardisiert -- dabei handelte es sich um das Directory Access Protocol (DAP). Die Struktur des Verzeichnisses selbst schrieb der Standard X.500 der ITU fest.

Da beide Normen einen hohen Komplexitätsgrad aufwiesen, konnten sie sich allerdings kaum durchsetzen.

LDAP

Um die Lücke für einen offenen Standard für einen Verzeichnisdienst zu füllen, wurde 1992 das Lightweight Directory Access Protocol (LDAP) als RFC 1487 definiert. Wie im Name angedeutet, handelt es sich bei LDAP um eine ,,abgespeckte``Version von DAP. Als Grundlage wurden nun die Internet-Protokolle gewählt, während die Verzeichnisstruktur, die LDAP ebenfalls spezifiziert, eine Adaption von X.500 ist.

Directory Information Tree (DIT)

Wie in einem Verzeichnisdienst üblich, sieht X.500 und LDAP eine hierarchische Verzeichnisstruktur vor. X.500 und LDAP gehen hierbei aber so weit, dass eine weltweit eindeutige Identifikation eines Verzeichnisobjekts möglich ist (Abbildung 3.5).

Abbildung 3.5: Hierarchie eines LDAP Directory Information Tree
Image ldap-dit.gif 

Anhand der Grafik ist zu erkennen, an welcher Position innerhalb des Verzeichnisses der Student Max Muster eingeordnet wurde. Über diese Position kann ein Schlüssel für den Personeneintrag abgeleitet werden. Dabei werden die Schlüssel der darüber stehenden Objekte hierarchisch geordnet und durch Komma getrennt notiert. Zusätzliche wird für jede Hierarchieebene ein Kürzel des Objekttyps angegeben.

Damit bekommt der Student Max Muster innerhalb des Studiengangs Medizinische Informatik an der Fachhochschule Heilbronn in Deutschland den folgenden Schlüssel, unter LDAP auch Distinguished Name (DN) genannt:

cn=Max Muster, ou=Studenten, ou=FB Medizinische Informatik,
   o=FH Heilbronn, c=DE

Werden in jeder Ebene mehrere Einträge aufgenommen, ergibt sich eine baumförmige Struktur. Daraus leitet sich der Begriff Directory Information Tree (DIT) für die Gesamtmenge aller Verzeichniseinträge ab.

LDAP-Objektklassen

Wie im vorherigen Kapitel bereits angerissen, besitzt jedes Objekt in LDAP einen Objekttyp. Er legt fest, welche Attribute dieses Objekt umfasst. Es gibt dabei

Attribute. Um eine übersichtliche Struktur der Klassen und eigene Erweiterungen innerhalb von LDAP zu ermöglichen, handelt es sich bei den Objektklassen selbst um eine Hierarchie. Erweiterungen am Datenmodell können über Vererbung eingebunden werden.

Abbildung 3.6: Ausschnitt aus der Hierarchie der LDAP-Objektklassen
Image ldap-classes.gif 

Abbildung 3.6 zeigt dies anhand einiger Klassen aus dem LDAP-Standard. Insgesamt sind momentan ca. 150 Klassen für verschiedene Anwendungfälle wie Personenverzeichnisse, UNIX-Benutzerverwaltung oder DNS-Abbildung definiert.

Während so die Klasse person über die zwingenden Attribute sn (Nachname) und cn (Name) sowie über die optionalen Attribute userPassword, telephoneNumber, seeAlso und description verfügt, gibt es bei der abgeleiteten Klasse residentialPerson für Privatadressen zusätzlich die Attribute l (Ort), postalCode (PLZ), postalAddress, sowie viele mehr.

Eine Mehrfachvererbung ist ebenfalls möglich, indem ein Objekt die Attribute mehrerer Klassen beinhaltet. Dies ist beispielsweise sinnvoll, wenn ein Angestellter (mit der Objektklasse organizationalPerson) gleichzeitig UNIX-User ist (Objektklasse posixAccount).

Abfragemöglichkeiten

Um Einträge aus einer Datenbank selektieren zu können, bedarf es einer Abfragesprache. LDAP stellt dafür einfache Suchfilter zur Verfügung, bei denen sich Attributwerte in Prefix-Notation miteinander verknüpfen lassen.

Der Suchfilter

(&(sn=M*)(givenName=M*))

führt so zu einer Suche nach allen Objekten, deren Vor- und Nachname mit dem Buchstaben M beginnt.

LDAP bietet damit im Vergleich zu einer relationalen Datenbank nur sehr begrenzte Suchfunktionen. Andererseits lässt sich dies durch einen Verzicht auf Normalformen umgehen, was zwar zu einer redundanten Datenhaltung führen kann, was aber leicht zu verkraften ist, da normalerweise keine Schreibzugriffe erfolgen.


Unified Modeling Language (UML)

Die objektorientierte Softwareentwicklung verspricht gegenüber bisherigen Ansätzen einen übersichtlicheren und somit leichter wartbaren Code. Ohne einen vorherigen Entwurf wird jedoch auch ein objektorientiertes Softwareprojekt scheitern -- je größer, desto eher. Als Sprache und de-facto-Standard für den objektorientierten Softwareentwurf hat sich seit der Mitte der neunziger Jahre die Unified Modeling Language (UML) etabliert.

Abbildung 3.7: UML-Logo
Image uml2.gif 

UML bietet im Rahmen der Softwareentwicklung keine vollständige Entwicklungsmethode, sondern dient als Hilfsmittel für folgende Zwecke [17]:

UML-Diagrammtypen

UML arbeitet weitgehend mit grafischen Hilfsmitteln. Dazu kommen für verschiedene Phasen des Softwareentwurfs jeweils dafür geeignete Diagrammtypen zum Einsatz:

Anwendungsfalldiagramme
beschreiben, welche Anwender und externen Schnittstellen mit dem Programm in Beziehung stehen und auf welche Weise dies geschieht.
Klassendiagramme
zeigen Objektklassen eines Programms und ihre Beziehungen untereinander. Eine genaue Beschreibung dieses Typs folgt im anschließenden Kapitel 3.6.2.
Verhaltensdiagramme:
Dazu gehören Aktivitätsdiagramme, Kollaborationsdiagramme, Sequenzdiagramme und Zustandsdiagramme. Sie dienen dazu, das genaue Verhalten eines Programmes im Rahmen seines zeitlichen Ablaufs festzuschreiben und zu dokumentieren.
Implementierungsdiagramme
zeigen, aus welchen Subkomponenten ein zukünftiges Programm bestehen soll, und wie diese miteinander agieren.


Klassendiagramme mit UML

Basis eines jeden objektorientierten Softwareprogramms sind Klassen. Auch das Common Information Model (Kapitel 5) unterliegt einem Klassenmodell, so dass hier soweit auf Klassendiagramme eingegangen werden soll, wie sie in CIM zum Einsatz kommen.

Eine Klasse besitzt einen Namen, Attribute und Operationen, die auf sie angewandt werden können. In UML wird die Klasse wie in Abbildung 3.8 dargestellt.

Abbildung 3.8: UML: eine Klasse mit Attributen und Methoden
Image uml-class.gif 

Ein Rechteck symbolisiert dabei die Klasse, deren Name über einer Querlinie fett notiert ist. Ein Klassenname beginnt immer mit einem Großbuchstaben. Der zweite Teil des Rechtecks beinhaltet die Attribute der Klasse mit ihrem Datentyp, der dritte die Operationen. Bei diesen können auch Parameter und Rückgabewert mit angegeben werden.

Das Beispiel zeigt also die Klasse Bild, die über die beiden Attribute hoehe und breite (beides Fließkommazahlen) verfügen und die Methoden anzeigen, entfernen, getPosition und setPosition zur Verfügung stellen.

Vererbung

Ein wesentliches Konzept der objektorientierten Softwareentwicklung ist die Vererbung, bei der von einer bestehenden Klasse eine neue abgeleitet wird, die über verfeinerte Eigenschaften (Attribute und Operationen) verfügt. Dieses Konzept wird Spezialisierung genannt [23]. In UML wird die Beziehung zwischen der oberen und der abgeleiteten Klasse (bzw. zwischen Ober- und Unterklasse) durch einen Pfeil auf die Oberklasse dargestellt.

Abbildung 3.9: Vererbung in UML
Image uml-vererbung.gif 

In diesem (Abbildung 3.9) und in den folgenden Beispielen wurde der Einfachheit zuliebe auf die Darstellung der Attribute und Operationen verzichtet. Von der Oberklasse Bild wurden hier die spezialisierten Klassen Gemälde, Foto und Lithografie abgeleitet. Foto ist selbst wiederum die Oberklasse für die Unterklassen Farbfoto und Schwarzweissfoto.

Assoziationen

Assoziationen dienen dazu, Beziehungen zwischen beliebigen Klassen zu dokumentieren, rekursive Beziehungen innerhalb der gleichen Klasse sind auch möglich.

Abbildung 3.10: Assoziationen in UML
Image uml-assoc.gif 

Abbildung 3.10 zeigt beispielhaft die Beziehung zwischen den Klassen Bild und Bilderrahmen, notiert in UML-Darstellung. In diesem Objektmodell (wie natürlich auch in der Realität) hat diese Beziehung selbst den Namen rahmung, welcher in UML grundsätzlich klein geschrieben wird. Eine Assoziation wird durch eine Verbindungslinie dargestellt.

Zu jeder Assoziation muss auch eine Kardinalität angegeben werden: Sie gibt an, in welchem Zahlenverhältnis die zwei Klassen einer Assoziation miteinander stehen. In diesem Beispiel kann sich ein Bild in einem Rahmen befinden, und in einem Rahmen kann ein Bild enthalten sein. Solch ein Wertebereich wird als 0..1 angegeben.

Aggregationen

Abbildung 3.11: Aggregationen in UML
Image uml-aggreg.jpg 

Eine Aggregation ist eine spezielle Ausprägung der Assoziation: Eine Assoziation wird als Aggregation bezeichnet, wenn das Verhältnis zwischen zwei Klassen darin besteht, dass eine Klasse Teil eines Ganzen ist -- wobei das Ganze die zweite Klasse ist.

Da ein PKW über drei bis vier Räder verfügt[*] und die Räder ein Teil des Gesamten ,,Kraftfahrzeug``sind, handelt es sich bei der Beziehung zwischen Rad und Auto um eine Aggregation.

Aggregationen werden in UML als Linie mit einer offenen Raute auf der Seite des Ganzen dargestellt. Auch hier kann die Kardinalität angegeben werden.



Fußnoten

... müssen[*]
oder zumindest sollten...
... Versagen[*]
falscher Stecker gezogen
... Gewalt[*]
Feuer, Wassereinbruch
... Komplexität[*]
weshalb an dieser Stelle auf SGML nicht weiter eingegangen wird...
... Consortium[*]
http://www.w3c.org/
... entwickelt[*]
Eine Übersicht findet sich im WWW unter http://xml.coverpages.org/xmlAndDatabases.html
... XSL-Code[*]
die Codierung selbst erfolgt in XML
... (IETF)[*]
http://www.ietf.org/
... kennen[*]
Mit der Einführung von IPv6 mit IP-Adressen mit einer Länge von 16 Bytes wird es dann endgültig nicht mehr möglich sein, sich eine IP-Adresse zu merken...
... verfügt[*]
Ja, es gibt auch dreirädrige PKWs, siehe [25]