Informatik-Lexikon

A

Agentenorientiertes Software Engineering
Anfrageoptimierung, semantische
Archivierung in Datenbanksystemen
Autostereogramme

Agentenorientiertes Software Engineering (AOSE)


Kurzinfo Agentenorientiertes Software Engineering (AOSE) bezeichnet einen Bereich, der an der Schnittstelle zwischen Software Engineering einerseits und Agenten- und Multiagentensystemen andererseits entsteht. Gegenstand von AOSE sind Vorgehensweisen, Methoden, Techniken und Tools für die Erstellung und Handhabung von agentenorientierter Software


Erläuterung

Darunter versteht man Software, deren Struktur und Funktionalität unter dem Blickwinkel einer Menge von Agenten betrachtet wird. Ein Agent ist dabei charakterisiert als eine abgrenzbare Softwareeinheit, die zur Erreichung der von ihrem Benutzer oder Entwickler vorgegebenen Ziele und unter Wahrung seiner Interessen flexibel und autonom mit ihrer Umgebung und anderen Agenten interagiert. Ausgehend von diesem Agentenkonzept zielt AOSE vor allem auf Anwendungen ab, die mindestens eines der folgenden Merkmale aufweisen: Es sind viele dynamisch interagierende Komponenten involviert,

  • die nicht unbedingt alle a priori bekannt sind (vgl. offene Systeme wie das Internet),
  • die eine Fremdkontrolle nicht oder nur beschränkt gestatten (z.B. aufgrund individueller und konfliktträchtiger Ziele, Interessen, Rechte und Pflichten),
  • zwischen denen elaborierte Kommunikations- und Koordinationsprozesse erforderlich sind.

Solche Anwendungen finden sich mit zunehmender Rechnervernetzung und Plattform-Interoperabilität in verschiedensten Bereichen, von E- und M-Commerce über Supply Chain und Business Process Management bis hin zu Telekommunikation und Logistik. Nachfolgend werden die Grundlagen und der Entwicklungsstand von AOSE dargestellt.

Agenten und Objekte

Es gibt es drei herausragende Merkmale eines Agenten:

  • Flexibilität,
  • Autonomie und
  • Interaktivität.

Dabei bedeutet Flexibilität, dass ein Agent sowohl zu reaktivem (d.h. Umweltveränderungen in angemessener Zeit berücksichtigendem) als auch zu proaktivem (d.h. in Hinblick auf Zwischen- und Endziele vorausschauendem) Verhalten fähig ist.

Autonomie besagt, dass ein Agent bei Bedarf selbständig und unabhängig Entscheidungen über von ihm auszuführende zielrelevante Handlungen treffen kann und in diesem Sinn Kontrolle über seinen internen Zustand und sein Verhalten besitzt.

Schließlich impliziert Interaktivität insbesondere, dass Agenten auf hohem Niveau in Wechselwirkung treten können, also etwa im Rahmen von automatisierten Verhandlungen, Vertragsabschlüssen und verteilten Planungs- und Problemlösungsprozessen.

Mit dieser Charakterisierung werden auch die beiden als entscheidend betrachtenden Unterschiede zwischen dem agentenorientierten Paradigma und dem objektorientierten Paradigma deutlich (siehe z.B. [8]). Zum einen kapseln Objekte nur ihre Identität („wer"), ihren Zustand („was") und ihr Verhalten bzw. dessen Umsetzung („wie"), während Agenten zudem Freiheitsgrade in ihrer Aktionswahl und Interaktion („wann", „warum", „mit wem" und „ob überhaupt") kapseln. Zum anderen greift bloße Objektorientierung generell zu kurz, wenn es um adäquate, intuitive und natürliche Modellierung sowie programmiertechnische Umsetzung von komplexen Interaktionen (Kommunikation und Koordination, Kooperation und Konkurrenz) und Beziehungsstrukturen (dynamische Organisation und verteilte Kontrolle) zwischen Agenten geht.

Aufgrund dieser Unterschiede ermöglichen das Agenten- und das Objektkonzept auf qualitativ verschiedenen Abstraktionsebenen gleichermaßen relevante System- und Entwicklungssichten, die sich sinnvoll ergänzen statt gegenseitig ausschließen [12]. Die Agentensicht impliziert damit aber auch quer über alle Phasen der Softwareentwicklung zahlreiche neue, von der Objektsicht nicht abgedeckte Anforderungen und Fragestellungen.

Analyse und Design

Die verfügbaren Analyse- und Designmethoden für agentenorientierte Software lassen sich in drei Gruppen unterteilen:

  • Erweiterungen von objektorientierten Methoden (z.B. KGR [9]),
  • Erweiterungen von Methoden aus dem Knowledge Engineering (z.B. MAS-CommonKADS [7]) und
  • Methoden, die auf eine rein agentenspezifische Sicht ausgelegt sind (z.B. Gaia [15]).

Trotz ihrer verschiedenen disziplinären Wurzeln liegt das gemeinsame Hauptaugenmerk dieser Methoden auf der Modellierung von Prozessen und Ereignissen, die zwischen Agenten stattfinden. Dies soll anhand von Gaia illustriert werden.

Gaia sieht u.a. die Verwendung der folgenden drei Modelle vor:

  • Ein Rollenmodell zur Identifikation der verschiedenen Rollen, die von Agenten eingenommen werden können. Dabei sind Rollen definiert über Verantwortlichkeiten (zur Erhaltung erwünschter und Vermeidung unerwünschter Zustände), Zulässigkeiten (Rechte hinsichtlich Resourcen), Aktivitäten (die keine Interaktion erfordern) und Protokolle (zur Beschreibung der Art der Interaktion mit anderen Rollen).
  • Ein Interaktionsmodell, bestehend aus Interaktionsmustern zur Beschreibung von Abhängigkeiten und Beziehungen zwischen den verschiedenen Rollen in einem Multiagentensystem.
  • Ein Bekanntschaftsmodell zur Definition der möglichen Kommunikationspfade zwischen Agententypen, wobei ein Agententyp definiert ist über Rollenmengen.

Mit Hilfe der verschiedenen Modelle will Gaia agentenspezifische Konzepte „aufbrechen" und für objektorientierte und funktionale Techniken zugänglich machen.

Formale Spezifikation und Verifikation

Die formale Spezifikation und Verifikation von agentenorientierter Software gewinnt zunehmend an Bedeutung. Es lassen sich grob „traditionelle Formalismen" und „logikbasierte Formalismen" unterscheiden. Zu den traditionellen Formalismen zählen Repräsentationsformen und Techniken, die im Software und Knowledge Engineering zum Standard gehören, wie z.B. Z, VDM, UML, Petrinetze und funktionale Systemkomposition. Um agentenspezifische Konstrukte mit solchen Formalismen geeignet erfassen zu können, wurden entsprechende Erweiterungen und Anpassungen vorgeschlagen. Verwiesen sei hier lediglich auf den kompositionalen Modellierungsansatz DESIRE [2] für Multiagentensysteme und auf Agent-UML [13].

Inzwischen gibt es auch prototypische logikbasierte Ansätze, die speziell auf die Spezifikation und Verifikation von agentenorientierter Software ausgerichtet sind. Dabei handelt es sich häufig um erweiterte temporale Logiken bzw. um Sprachen, die auf solchen Logiken aufsetzen. Ein Beispiel hierfür ist die Logik TBL bzw. die Sprache Concurrent MetateM [5].

Implementierungssprachen

Es gibt drei Sprachtypen, die für die Realisierung von agentenorientierter Software und damit für AOSE zunehmend von Bedeutung sind. Diese Typen unterscheiden sich ebenfalls in ihrer fachlichen Verwurzelung und sie eröffnen damit unterschiedliche Zugänge zur programmiertechnischen Umsetzung von Agentensoftware.

Einer dieser Sprachtypen ist durch agentenorientierte Programmiersprachen gegeben, die als Weiterführung üblicher Programmiersprachen betrachtet werden können. Verschiedene Prototypen solcher Sprachen sind verfügbar, wie z.B. Derivate des „Klassikers" AGENT-0 [14] und die neuere Sprache 3APL [6]. Solche Sprachen unterstützen z.B. die Umsetzung von Verpflichtungen zwischen Agenten und planbasiertes Verhalten.

Einen zweiten relevanten Sprachtyp bilden Kommunikationssprachen, die ihre Wurzeln im Bereich der wissensbasierten Systeme haben. Bekannte Prototypen sind KQML, ARCOL und FIPA-ACL [10], die dem sprechaktbasierten Austausch von Wissen zwischen Agenten dienen. Andere „kommunikationsrelevante Sprachen" sind die Sprache KIF zur Beschreibung von Wissensinhalten und Sprachen wie ONTOLINGUA zur Konstruktion von Ontologien.

Der dritte relevante Sprachtyp sind Koordinationssprachen wie etwa COOL [1], die eine gewisse Nähe zu herkömmlichen Sprachen für parallele und verteilte Programmierung aufweisen. Konzeptionell ist dieser Sprachtyp „oberhalb" der beiden anderen angesiedelt. Koordinierungssprachen dienen der expliziten Handhabung von Abhängigkeiten zwischen Aktivitäten verschiedener Agenten.

Entwicklungstools

Es sind verschiedene Entwicklungstools für agentenorientierte Software verfügbar (z.B. JACK [3] und ZEUS [11]). Neben einigen kommerziellen Produkten handelt es sich dabei zumeist um Forschungsprototypen. Diese Tools betonen typischerweise Interaktionsaspekte (Kommunikation, Koordination und Organisation), wobei sie sich zum Teil deutlich in ihrer Funktionalität und Abdeckung des Software-Lebenszyklus unterscheiden. Um einen Eindruck von diesen Tools zu vermitteln, wird ZEUS kurz charakterisiert.

ZEUS wird am British Telecom Intelligent Systems Research Laboratory entwickelt und ist vollständig in Java 2 implementiert. Das Tool umfasst drei Komplexe:

  • eine Bibliothek mit funktionalen Agentenkomponenten wie z.B. TCP/IP-basierte Übermittlung von sprechaktbasierten Kommunikationsprimitiven, vordefinierte Koordinationsstrategien und Organisationsbeziehungen, einen allgemeinen Planungs- und Schedulingmechanismus und eine Schnittstelle zu existierender Software;
  • mehrere Editoren zur Beschreibung und Spezifikation verschiedener agentenspezifischer Aspekte wie z.B. Ontologien und organisationale Strukturen;
  • verschiedene Tools zur Visualisierung z.B. von Agent-Agent-Beziehungen, Aufgaben- und Ausführungsverteilung und statistischen Auswertungen.

ZEUS ist ein sehr umfangreiches Tool, da es auf die Abdeckung aller Phasen abzielt und ein recht allgemeines Agentenmodell verwendet.

Fazit

AOSE ist ein junger und sich schnell entwickelnder Bereich. Für das wachsende Interesse an AOSE und agentenorientierter Software gibt es verschiedene Gründe:

Anwendungspotential: AOSE stellt sich der ständig wachsenden Herausforderung, Softwaresysteme für immer komplexere – offene, verteilte, dynamische, heterogene und interaktive – Anwendungsfelder zu realisieren.

Industrielle und kommerzielle Resonanz: Die Industrie zeigt zunehmend Interesse an agentenorientierten Softwareprodukten. Dies spiegelt sich z.B. auch wider in den verschiedenen industrieseitig forcierten Standardisierungsbestrebungen im Umfeld von Agentensoftware [17].

Verträglichkeit: Agentenorientierung ist mit anderen Entwicklungen auf dem Gebiet des Software Engineering konsistent (z.B. Design Patterns) oder schließt an existierende Methodologien beinahe nahtlos an (z.B. aufgabenorientierte Softwareentwicklung). Darüber hinaus sind agenten- und objektorientierte Softwaresysteme prinzipiell integrierbar.

Natürliche Entwicklung: Allgemeiner kann Agentenorientierung als ein natürlicher nächster Schritt in der Programmierentwicklung betrachtet werden, denn ausgehend von maschinennaher bis hin zur objektorientierten Programmierung zeigt sich zunehmende Abstrahierung und Lokalisierung.

Diese Gründe sollten jedoch nicht darüber hinwegtäuschen, dass AOSE in verschiedenerlei Hinsicht noch in den Kinderschuhen steckt. Handlungsbedarf besteht in Hinblick auf eine weitere konzeptuelle und theoretische Fundierung von agentenspezifischen Konzepten ebenso wie die Weiterentwicklung von Analyse- und Designmethoden, Verifikations- und Testverfahren und Entwicklungstools. Die bislang existierenden agentenorientierten Hilfsmittel für die verschiedenen Softwareentwicklungsphasen bewegen sich größtenteils auf einer prototypischer Ebene. Hier ist weitere Grundlagenforschung und Anwendungserfahrung erforderlich.

Abschließend sei noch auf den erstmals ausgerichteten AOSE-Workshop [4] im Rahmen der letztjährigen 22nd International Conference on Software Engineering verwiesen; der Nachfolgeworkshop findet Ende Mai statt [16].

                   Artikelanfang   Seitenanfang

Literatur

  1. Barbuceanu, M., Fox, M. S.: Capturing and Modeling Coordination Knowledge for Multiagent Systems. International Journal of Cooperative Information Systems 5(2–3), 275–314 (1996)
  2. Brazier, F. M. T., et al.: DESIRE: Modelling Multi-Agent Systems in a Compositional Formal Framework. International Journal of Cooperative Information Systems 6(1), 67–94 (1997)
  3. Busetta, P., et al.: JACK Intelligent Agents – Components for Intelligent Agents in Java. Agentlink News 2, 2–5 (1999)
  4. Ciancarini, G., Wooldridge, M. (eds.): Agent-Oriented Software Engineering. Berlin Heidelberg New York: Springer 2001
  5. Fisher, M., Wooldridge, M.: On the Formal Specification and Verification of MultiAgent Systems. International Journal of Cooperative Information Systems 6(1), 37–65 (1997)
  6. Hindriks, K. V., et al.: Agent Programming in 3APL. Autonomous Agents and Multiagent Systems 2(4), 357–401 (1999)
  7. Iglesias, C. A., et al.: Analysis and Design of Multiagent Systems Using MAS-CommonKADS. Proceedings of the 4th International Workshop on Agent Theories, Architectures, and Languages (ATAL'97). Berlin Heidelberg New York: Springer 1998, pp. 313–327
  8. Jennings, N. R.: On Agent-Based Software Engineering. Artificial Intelligence 117, 277–296 (2000)
  9. Kinny, D., Georgeff, M., Rao, A.: A Methodology and Modelling Technique for Systems of BDI Agents. Proceedings of the 7th European Workshop on Modelling Autonomous Agents in a Multi-Agent World (MAAMAW'96). Berlin Heidelberg New York: Springer 1996, pp. 56–71
  10. Kone, M. T., Shimazu, A., Nakajima, T.: The State of the Art in Agent Communication Languages. Knowledge and Information Systems 2, 259–284 (2000)
  11. Nwana, H. S., et al.: ZEUS: A toolkit for Building Distributed Multiagent Systems. Applied Artificial Intelligence 13(1), 129–186 (1999)
  12. Odell, J.: Objects and Agents: Is there room for both? Distributed Computing, 44–45 (November 1999)
  13. Odell, J. , Parunak, H. V. D., Bauer, B.: Extending UML for agents. 2nd International Workshop on Agent-Oriented Information Systems (AOIS'2000)
  14. Shoham, Y.: An Overview of Agent-Oriented Programming. In: Bradshaw, J. M. (ed.): Software Agents. AAAI Press 1997, pp. 271–290
  15. Wooldridge, M., Jennings, N. R., Kinny, D.: The Gaia Methodology for Agent-Oriented Analysis and Design. Autonomous Agents and Multiagent Systems 3, 285–312 (2000)
  16. 2nd International Workshop on Agent-Oriented Software Engineering (AOSE'01) (www.csc.liv.ac.uk/ ~ mjw/aose/)
  17. FIPA (www.fipa.org) und OMG Agents Working Group
    (http://www.objs.com/ isig/agents.html)

                   Artikelanfang   Seitenanfang

Autor & Copyright
Gerhard Weiß
Institut für Informatik,
Technische Universität München,
80290 München
weissg@in.tum.de

© 2001 Informatik Spektrum, Springer-Verlag Berlin Heidelberg

                   Artikelanfang   Seitenanfang

Semantische Abfrageoptimierung

Erläuterung

Der überwältigende Erfolg relationaler Datenbanksysteme ist vor allem auf die Verwirklichung des Begriffs der Datenunabhängigkeit zurückzuführen. Dadurch können Anwender für ihren jeweiligen Anwendungsbereich Datenbanken benutzen, ohne daß aus der fehlenden Kenntnis von systemnahen Details wie Zugriffspfade und Speicherstrukturen längere Antwortzeiten der Anfragen folgen oder gar die Formulierung von Anfragen beeinträchtigt wird. Dies vereinfachte die Anfrageformulierung für bisherige Nutzer und erweiterte die Akzeptanz von Datenbanksystemen erheblich.

Der damit verbundene Übergang von einer prozeduralen zu einer nichtprozeduralen Formulierung der Anfragen erfordert die Einführung einer weiteren Übersetzungsphase. Diese Ubersetzung muß die fehlende Information in Anfragen über Zugriffspfade und Speicherstrukturen durch beispielsweise algebraische Gesetze und Kostenmodelle kompensieren, um eine möglichst kostengünstige Beantwortung zu gewährleisten. Solche Techniken werden unter dem Begriff Anfrageoptimierung zusammengefaßt. Nach dem ökonomischen Prinzip wird durch Optimierung entweder das Ergebnis bei festem Verbrauch von Betriebsmitteln maximiert oder der Verbrauch von Betriebsmitteln bei gleichem Ergebnis minimiert. Durch Anfrageoptimierung wird immer der Verbrauch der Betriebsmittel minimiert, da das Ergebnis fest definiert ist.

Der Schwerpunkt bisheriger Optimierungen liegt dabei auf einer möglichst direkten Abbildung der nichtprozeduralen Sicht auf die physischen Objekte eines Datenbanksystems, wie Härder [4] betont. Das dafür dem System zur Verfügung stehende notwendige Wissen bezieht allerdings kein Wissen über den Anwendungsbereich selbst mit ein, obwohl dies zu erheblichen Verbesserungen der Leistungsmerkmale eines Datenbanksystems führen würde, wie Chakravarthy et al. [2] vermerken. Deshalb schlagen sie eine Erweiterung der Optimierung vor, die auch Wissen über die Bedeutung des Anwendungsbereichs miteinbezieht und bezeichnen dies als semantische Anfrageoptimierung. Date [3] sieht in dieser Anfrageoptimierung ein enormes Potential:

So far as this writer is aware, few commercial products do much in the way of semantic optimization. In principle, however, such optimization could provide very significant performance improvements – much greater improvements, very likely, than are obtained by any today’s traditional optimization techniques.

Nun interessieren natürlich die Gründe für die Diskrepanz zwischen Potential und wirklichem Einsatz. Dazu sollen zuerst drei exemplarische Arbeiten betrachtet werden, die auch drei prinzipielle Strategien der semantischen Anfrageoptimierung verdeutlichen.

Erfüllbarkeitsbasierte Strategie

Zur Überprüfung der Erfüllbarkeit von Anfragen eignen sich gut logikbasierte Anfragesprachen wie DATALOG. Basierend auf der Erfüllbarkeit können nun Probleme wie die Gleichheit oder Minimierung von Anfragen unter Berücksichtigung von Integritätsbedingungen untersucht werden. Levy und Sagiv [7] definieren semantische Anfrageoptimierung generell als einen Prozeß, Integritätsbedingungen zur Optimierung von Anfragen zu verwenden. Diese Definition ist allerdings zu eng gefaßt, wie im weiteren gezeigt wird.

Heuristikbasierte Strategie

Hier werden Heuristiken zur Anfrageoptimierung verwendet. King [6] verwendet beispielsweise die Heuristik in dem System QUIST: Füge in jede Anfrage Bedingungen über indexierte Attribute ein. Generell gilt, daß indexierte Attribute in einer Anfrage den Zugriff über eine Baumstruktur ermöglichen. Ohne indexierte Attribute muß sequentiell gesucht werden. Das verwendete Wissen besteht dabei aus Integritätsbedingungen, die Werte verschiedener Attribute einer Relation in Bezug setzen, unter anderem auch die Werte von indexierten Attributen.

Regelbasierte Strategie

Bei dieser Strategie werden Bedingungen aus Anfragen extrahiert, die bei Erfüllung durch die Wissensbasis immer zu einer Reformulierung führen. Beispielsweise verwenden Paulley und Larson [8] die Schlüssel einer Relation, um zu zeigen, daß Antwortmengen keine Duplikate enthalten können. Dementsprechend können distinct-Anweisungen in SQL-Anfragen entfernt werden, die sonst eine unnötige Prozedur zur Duplikateliminierung veranlassen.

Allerdings erklären diese Ansätze noch nicht die Diskrepanz von Potential und tatsächlichem Einsatz. Deshalb soll die Anfrageoptimierungen noch genauer betrachtet werden. Ein Datenbanksystem besteht nach Ullman [10] aus einem Datenbankmanagementsystem (DBMS), das alle Programme zur Datenverwaltung umfaßt, und den einzelnen Datenbanken, die die Daten beinhalten. Betrachtet man die Optimierungen unter dem Aspekt der Nutzung von Wissen, dann ist ein qualitativer Unterschied die Verfügbarkeit des Wissens: Zugriffspfade und Speicherungsstrukturen sind jeweils pro DBMS fest vorgegeben. Algebraische Gesetze gelten für alle DBMSe, und die Kostenmodelle basieren auf einfachen statistischen Merkmalen einer Datenbank. Dagegen impliziert der Inhalt einer Datenbank eine große Bandbreite für das zur semantischen Anfrageoptimierung vorausgesetzte Wissen. Wird semantische Anfrageoptimierung nun ausschließlich über Integritätsbedingungen definiert, dann ist der Erfolg der Anfrageoptimierung von Wissen abhängig, das Benutzer zuvor spezifizieren müssen.

Siegel [9] schlägt deshalb eine neue Definition für die semantische Anfrageoptimierung vor:

. . . defining semantic query transformation as the addition or removal of constraints to a query in accordance with a given rule set. The transformed query is semantically equivalent to the original query in the sense that if the database state satisfies the rules, then the transformed query will return the same answer from the database.

Damit werden Constraints nicht mehr als Integritätsbedingungen einer Datenbank, sondern als Wissen über einen Datenbankzustand betrachtet. Zur besseren Unterscheidung soll dieses Wissen als Metadaten bezeichnet werden. Diese neue Sichtweise erlaubt nicht nur, einzelne Datenbankzustände genauer zu beschreiben, sondern ermöglicht auch, maschinelle Verfahren zur Entdeckung der Metadaten einzusetzen. Beispiele hierfür sind:

  • Hsu und Knoblock [5] verwenden Anfrageergebnisse, um mit Techniken des maschinellen Lernens allgemeine Bedingungen abzuleiten, die sie dann zur Reformulierung neuer Anfragen benützen.
  • Bell [1] stellt Methoden zur Entdeckung aller derzeit in einer Datenbank gültigen funktionalen Abhängigkeiten und eine Optimierung durch das Entfernen unnötiger distinct- und group by-Anweisungen vor. Dabei werden bei Änderungen des Datenbankzustands die Metadaten auch gewartet.

Der Nachteil von Siegels Lösung ist, daß die Entdeckung und Wartung der Metadaten Kosten verursacht. Die Kosten der Entdeckung müssen allerdings nicht in die Kosten der Optimierung einfließen, da sie zu Zeiten niedriger Auslastung des Systems stattfinden kann. Damit kann die semantische Anfrageoptimierung auch als eine Art Lastverteilung betrachtet werden: Zu Zeiten niedriger Auslastung werden Metadaten entdeckt, die dann zu Zeiten höherer Auslastung die Beantwortung der Anfragen beschleunigen.

Die bisherigen Ansätze erlauben allerdings noch keine Aussage, ob Siegels Lösung Dates Prognose unterstützt, daß semantische Anfrageoptimierung einmal gewinnbringender als die anderen Optimierungen sein wird.

                   Artikelanfang   Seitenanfang

Literatur

  1. Bell, S.: Deciding distinctness of query result by discovered constraints. In Practical Application of Constraint Technology (1996)
  2. Chakravarthy, U. S., Grant, J., Minker, J.: Logicbased Approach to semantic query optimisation. ACM Transaction on Database Systems 15, 2 (June 1990)
  3. Date, C.: An Introduction to Database Systems, 6th ed. The Systems Programming Series. Addison-Wesley Publishing Company, 1995
  4. Härder, T.: Realisierung von operationalen Schnittstellen. In Datenbankhandbuch.
    Springer Verlag, 1987
  5. Hsu, C. N., Knoblock, C. A.: Using inductive learning to generate rules for semantic query optimization. In Advances of Knowledge Discovery and Data Mining. AAAI Press, 1995, ch. 17
  6. King, J. J.: Query optimization by semantic reasoning. Tech. Rep.
    STAN-CS-81-857, Stanford University, May 198
  7. Levy, A. Y., Sagiv, Y.: Semantic query optimization in datalog programs. In Proceedings of the 14th ACM SIGACT-SIGMOD-SIGART Symposium on Principles of Database Systems (May 1995), ACM
  8. Pauley, G., Larson, P.-A.: Exploiting uniqueness in query optimization.
    In Proceedings of the 10th Conference on Data Engineering (1994), IEEE
  9. Siegel, M. D. Automatic rule derivation for semantic query optimization.
    In: Second internastional Conference on Expert Database Systems (198
  10. Ullman, J. D. Principles of Database and Knowledgebase Systems, vol. 1. Computer Science Press, 1988

                   Artikelanfang   Seitenanfang

Autor & Copyright
Siegfried Bell,
Universtät Dortmund,
Informatik VIII,
D-44221 Dortmund
bell@informatik.unidortmund.de

© 1996 Informatik Spektrum, Springer-Verlag Berlin Heidelberg

                   Artikelanfang   Seitenanfang

Archivierung in Datenbanksystemen

Erläuterung

Datenbanksysteme sind dafür geschaffen worden,um große Datenmengen adäquat behandeln zu können, d.h. diese Datenmengen strukturiert abzulegen sowie Such- und Änderungsdienste darauf bereitzustellen. Die heutigen relationalen Datenbanksysteme sind auch weitestgehend dazu in der Lage, die in sie gesetzten Erwartungen zu erfüllen. Probleme treten jedoch in der Praxis in vielen Fällen dann auf, wenn die Datenmengen wirklich sehr groß werden (etwa im Bereich vieler Hundert Gigabyte oder im Terabyte-Bereich): Es wird immer mehr Sekundärspeicher (Platten) benötigt, der „online" gehalten werden muß; die Zugriffszeiten zu den Daten wachsen an, da auch bei effektiver Speicherorganisation und Zugriffspfadnutzung ein größer werdender Datenbestand bzgl. der Performance nicht völlig neutralisiert werden kann; die Backup- und Recovery-Zeiten nehmen zu; gewisse Schwellwerte des Datenbank-Management-Systems (DBMS), wie z.B. Maximalgröße von Tabellenbereichen, werden erreicht und drohen,einen DBMS-Stillstand zu verursachen bzw. erfordern massives Eingreifen durch den Datenbankadministrator (DBA); die Übersichtlichkeit des Datenbestands leidet, da oftmals aktive und inaktive, weitgehend veraltete Daten vermischt im Datenbestand auftreten etc.

Die Probleme verschärfen sich dadurch weiter, daß gerade in jüngerer Zeit bzgl. der Datenhaltung Entwicklungstendenzen und Anwenderwünsche zu beobachten sind, die auf den ersten Blick nur schwer miteinander vereinbar erscheinen: Auf der einen Seite werden die Datenbestände typischerweise immer größer (so wird bereits von Datenbeständen im praktischen Einsatz berichtet, bei denen einzelne Tabellen -zig Milliarden Zeilen aufweisen [6]), auf der anderen Seite werden gleichzeitig immer höhere Verfügbarkeitsanforderungen gestellt in Richtung auf einen 24-Stunden-Betrieb an 365 Tagen im Jahr. Es liegt auf der Hand, daß beispielsweise klassische Verfahren der Datensicherung oder Datenreorganisation hier nicht mehr angemessen sind, wenn sie mit sehr großen Datenmengen umgehen sollen und gleichzeitig den OLTP-Betrieb (Online Transaction Processing) nicht wesentlich behindern dürfen; auch neue Verfahren schaffen nur begrenzt Abhilfe in Anbetracht des „Datenwusts".

Letztendlich gibt es aus praktischer Sicht zwei Möglichkeiten, auf die beschriebene Situation zu reagieren: Es wird versucht, durch Datenlöschungen das Anwachsen der Datenmengen zum Stillstand zu bringen oder wenigstens zu bremsen, oder es erfolgt eine Datenarchivierung aus der Datenbank heraus auf geeignete andere Speichermedien. Datenlöschungen sind oftmals nicht möglich oder im geforderten Umfang nicht erwünscht, da betriebswirtschaftliche oder rechtliche Gründe dagegensprechen (Wiederbenutzung (auch) der alten Daten für betriebliche Zwecke nicht auszuschließen, Daten werden für Revisionszwecke und aufgrund gesetzlicher Regelungen doch noch gelegentlich nachgefragt u. dgl. mehr). Da das Weiteranwachsen der Datenmengen auch keine Lösung darstellt, bleibt die Datenarchivierung somit als erwägenswerte Alternative.

Im einfachsten Fall kann Archivieren bedeuten, daß solche Datenbankinhalte, die aktuell nicht (mehr) oder nur noch sehr selten gebraucht werden,entladen werden auf geeignete (Tertiärspeicher-) Medien; diese werden dann „in den Schrank" gestellt, bis man die auf ihnen abgelegten Daten eventuell wieder einmal benötigt.

Das Lesen der archivierten Daten und ein mögliches Wiedereinladen in die Datenbank werden manuell angestoßen und zeigen schon die Schwerfälligkeit dieses Vorgehens, das jedoch in der Praxis weit verbreitet ist. Auch bekannte Anwendungssysteme,wie das System R/3 von SAP, verfolgen heute eine Archivierungslösung, die nicht sehr weit von jenem einfachen Vorgehen entfernt liegt [5]. Man spricht hier auch von datenbanksystembasierter Archivierung, denn die zu archivierenden Daten werden mittels einer Anwendungsschicht aus der Datenbank herausgeholt und in ein separates Archiv übertragen, das sich nicht unter Kontrolle des Datenbanksystems befindet. Dabei wird eine Verschiebesemantik verfolgt, die zu archivierenden Daten werden also ins Archiv bewegt und verbleiben nicht in der Datenbank, sondern werden dort gelöscht. Obwohl hier zusätzliche unterstützende Dienste denkbar sind (bspw. zur Verwaltung und zum Zurückladen archivierter Daten), besitzt diese nur sehr lose Anbindung von Datenbank und Archiv offensichtliche Nachteile, wenn man etwa an Forderungen denkt wie eine übergreifende Integritätsüberwachung zwischen Datenbank und Archiv, die Einbindung der Archivierung in Datenbanktransaktionen u. a.m. Ein Vorteil der datenbanksystembasierten Archivierung liegt in der vergleichsweise einfachen Realisierbarkeit, weil sie keine Eingriffe ins DBMS (funktionale Erweiterungen dort) erfordert.

Beispiele für praktisch eingesetzte Lösungen im Bereich der datenbanksystembasierten Archivierung sind das ADK (Archive Development Kit) des Systems R/3 [5] und CERA (Climate and Environmental Data Retrieval and Archiving System) vom Deutschen Klimarechenzentrum [3]. Das ADK ermöglicht die Entwicklung von Archivierungsprogrammen für die R/3-Anwendungen. Beim Archivieren werden Daten der Datenbank in Archivdateien geschrieben und anschließend aus der Datenbank gelöscht. Die Archivdateien befinden sich zunächst auf Magnetplatte, können aber auf Tertiärspeichermedien verschoben werden. CERA basiert auf Oracle und realisiert die Migration von Tabellenbereichen auf Bänder. Ausgenutzt wird hierbei die Möglichkeit, Tabellenbereiche in Oracle „offline" zu setzen und auf Tertiärspeicher auszulagern, bis eine spätere Nutzung eine Wiedereinlagerung erforderlich macht.

Der datenbanksystembasierten steht die datenbanksystemintegrierte Archivierung gegenüber. Dort bietet das DBMS integriert selbst Archivierungsdienste an, d.h. es kennt und kontrolliert auch das Archiv und bietet damit Möglichkeiten, die sonst der (zu) losen Anbindung zwischen Datenbank und Archiv wegen nicht ohne weiteres realisierbar wären. Idealerweise werden hier die Archivierungsdienste in Form von erweitertem SQL angeboten, um auf diesem Wege etwa die Archivierung von Daten zu veranlassen, im Archiv zu lesen oder Daten aus dem Archiv in die Datenbank zurückzuholen.

In den heutigen (relationalen) Datenbanksystemen ist solche Funktionalität jedoch noch nicht vorhanden; eine Möglichkeit, sich dem Idealzustand jedoch wenigstens anzunähern, liegt in einer Nachbildung des integrierten durch einen basierten Ansatz [4].

Eine wichtige Forderung bei der Bereitstellung von Archivierungsfunktionalität ist die Anwendungsorientierung. Anwendungsorientiertes Archivieren [2] läßt sich durch vier Eigenschaften charakterisieren:

  • Benutzerveranlassung, d.h. das Archivieren geschieht nicht primär implizit durch das DBMS veranlaßt, sondern explizit durch den Benutzer oder DBA.
  • Abstraktionsebene Datenmodell, d.h. es werden solche Granulate beim Archivieren angesprochen, die dem Benutzer/DBA auf der Ebene des Datenmodells bekannt sind (relational also etwa Tabellen oder Tupel, nicht aber bspw. Tabellenbereiche oder Dateien).
  • Datenauslagerung im Sinne der zuvor bereits erwähnten Verschiebesemantik, also Überführen von Daten ins Archiv und nicht einfaches Kopieren.
  • Archivzugriff schließlich, wofür Funktionalität gebraucht wird zum Lesen auf dem Archiv und ggf. auch zur Rückübertragung von Daten aus dem Archiv in die Datenbank.

Diese Forderung nach Anwendungsorientierung grenzt gleichzeitig ab zu anderen DBMS-Funktionalitäten, wo speziell in der Praxis manchmal auch von Archivieren gesprochen wird: Das Erstellen einer Sicherungskopie einer Datenbank (Backup) hat z.B. nichts mit (anwendungsorientiertem) Archivieren zu tun, denn u. A. wird hier nicht ausgelagert, sondern es werden Daten kopiert, und der Archivzugriff auf selektive Weise ist hier auch nicht möglich, es wird auch eine ganz andere Intention dabei verfolgt als beim Archivieren im Verständnis dieses Beitrags.

Wichtig fürs Archivieren ist die Möglichkeit zur Nutzung von Tertiärspeichermedien. Sekundärspeichermedien (i.w. Magnetplatten) werden zwar seit Jahren auch stets preiswerter und bieten immer höhere Kapazitäten, aber bei Datenbankgrößen im Terabyte-Bereich - und künftig auch darüber hinausgehend - spielt der Kostenfaktor dann doch auch heute und in Zukunft eine signifikante Rolle. Tertiärspeichernutzung für Archive bedeutet nach heutigen Technologien i.w. die Verwendung von Magnetbändern (und Bandrobotern) sowie von optischen Platten. Tertiärspeicher kann dabei auf verschiedene Weise ins DBMS eingebunden bzw. ans DBMS angebunden werden. Kommerziell verbreitet sind heute bereits die sog. HSM-Systeme (Hierarchical Storage Manager),wo Tertiärspeicher in einer Speicherhierarchie hinter dem Sekundärspeicher angeordnet wird und typischerweise ganze Dateien je nach Bedarf zwischen dem Sekundär- und dem Tertiärspeicher ausgetauscht werden. Dieser Austausch erfolgt aus Sicht der Anwendung, und damit auch des DBMS, transparent, d.h. es ist „lediglich" anhand der Performance zu verspüren, ob zugegriffene Daten bereits auf Sekundärspeicher waren oder ob sie erst vom Tertiär- auf den Sekundärspeicher geladen werden mußten. Für anwendungsorientiertes Archivieren eignet sich dieses Vorgehen somit nicht unmittelbar, da dort Benutzerveranlassung des Archivierens gefordert wird und auch eine sichtbare, physische Trennung zwischen Datenbank und Archiv. Lösungen,die sich hier für die Archivierung anbieten, liegen also außerhalb der HSM-Systeme; der Tertiärspeicher muß explizit angesprochen werden können übers DBMS (bei datenbanksystemintegriertem Archivieren) oder die zuständige Anwendungsschicht (bei datenbanksystem-basiertem Archivieren).

In Zusammenhang mit dem Archivieren in Datenbanksystemen ergibt sich eine Fülle von Aufgabenstellungen und Problemen, wobei grob gesagt werden kann, daß gute Lösungen eher absehbar sind beim datenbanksystemintegrierten als beim -basierten Ansatz. Ein Problembereich wurde schon erwähnt: Die Auswirkungen des Vorhandenseins eines Archivs auf die Integritätssicherung, d.h. wie bspw. übergreifende Integritätsbedingungen zwischen Datenbank und Archiv definiert und unterstützt werden können,wie auch im Fehlerfall sichergestellt werden kann, daß Datenmengen nicht „halbarchiviert" verbleiben usw. Ein weiterer Problembereich hängt mit der (in der Praxis alltäglichen) Evolution des Datenbankschemas zusammen: Das Datenbankschema ändert sich, und die Frage ist zu klären, was entsprechend mit dem Archivschema geschieht. Auch die Art der Tertiärspeichernutzung und mögliche -integration kann als Problembereich gesehen werden,denn heutige DBMS-Produkte bieten noch keine volle Integration hier an (Tertiärspeicher wirklich als „first class citizen" [1]). Die Praxis zeigt jedoch, daß vielerorts schon Archivierungslösungen entwickelt wurden und entwickelt werden, i.d.R. bisher mittels eines datenbanksystembasierten Ansatzes. D.h., obwohl die Datenbank-Management-Systeme immer bessere Lösungen auch zum Umgang mit sehr großen Datenmengen anbieten und obwohl Sekundärspeicher immer billiger wird und immer größere Kapazität aufweist, bieten die rapide anwachsenden Datenmengen offenbar genügend Veranlassung, auch weiterhin verstärkt über Archivierung nachzudenken und Lösungen zu entwickeln.

                   Artikelanfang   Seitenanfang

Literatur

  1. Carey, M.J., Haas, L.M., Livny, M.: Tapes Hold Data, Too: Challenges of Tuples on Tertiary Store. In: Proc. of ACM SIGMOD Int.
    Conf. on Management of Data, pp. 413-417, Washington, DC, 1993
  2. Herbst, A.: Anwendungsorientiertes DB-Archivieren: Neue Konzepte zur Archivierung in Datenbanksystemen. Berlin, Heidelberg: Springer 1997
  3. Lautenschlager, M.: Concept of the Climate Database System at the DKRZ. In: Lautenschlager, M., Reinke, M. (eds.), Climate and Environmental Database Systems, pp. 11-24. Boston: Kluwer Academic Publishers 1997
  4. Schaarschmidt, R., Bühnert, K., Herbst, A., Küspert, K., Schindler, R.: Konzepte und Implementierungsaspekte anwendungsorientierten Archivierens in Datenbanksystemen. Informatik Forschung und Entwicklung, 13(2): 79-89 (1998)
  5. Schaarschmidt, R., Röder, W.: Datenbankbasiertes Archivieren im SAP System R/3. Wirtschaftsinformatik, 39(5): 469-477 (1997)
  6. Winter, R., Auerbach, K.: The Big Time. Database Programming & Design, 11(8): 36-45 (1998)

                   Artikelanfang   Seitenanfang

Autor & Copyright
Klaus Küspert, Ralf Schaarschmidt
Friedrich-Schiller-Universität Jena
Institut für Informatik
Lehrstuhl für Datenbanken und Informationssysteme
Ernst-Abbe-Platz 1 - 4
07743 Jena
kuespert@informatik.uni-jena.de
schaar@informatik.uni-jena.de

© 1998 Informatik Spektrum, Springer-Verlag Berlin Heidelberg

                   Artikelanfang   Seitenanfang

Autostereogramme

Erläuterung

In letzter Zeit werden großformatige Bilder, Postkarten und Bücher feilgeboten, auf denen man bunte Muster sieht, die sich wiederholen. Betrachtet man die Bilder unscharf, indem man hinter die Bildebene fokussiert, erscheint nach einiger Zeit eine räumliche Szene, die mit dem ursprünglichen Muster texturiert ist. Das Erkennen dieser Bilder erfordert einige Übung, und nicht alle Menschen sind in der Lage, den räumlichen Effekt zu erkennen.

Dieses Verfahren ist keineswegs so neu wie uns manche Anbieter glauben lassen möchten, und es kann auch auf heutigen Personal Computern durchgeführt werden. Es werden mehrere frei zugängliche Programme angeboten.

Diese Bilder bezeichnet man mit dem Oberbegriff Autostereogramm oder SIS (Single Image Stereogram). Damit können Informationen räumlich dargestellt werden. Andere Verfahren zur räumlichen Darstellung sind Stereogramme, die aus zwei separaten Bildern bestehen, Rot-Grün-Stereogramme, Shutter-Verfahren an speziellen Displays und Holographie. Anwendungen für SIS gibt es vor allem im künstlerischen Bereich. Ursprünglich wurden sie in Experimenten zur Physiologie des Stereosehens eingesetzt. Ein Autostereogramm besteht aus einem Rasterbild mit sich wiederholenden Mustern. Die räumliche Information wird dadurch gewonnen, daß die Wiederholungen nicht exakt identisch sind. Fokussiert man dieses Bildmuster mit beiden Augen etwas hinter der Bildebene, erscheint eine räumlich wirkende Figur, die das Bildmuster als Textur trägt. Die Muster können vorgegebene Rasterbilder sein oder aus Zufallswerten bestehen. Ein SIRDS (Single Image Random Dot Stereogram) ist ein Autostereogramm, das aus scheinbar zufällig verteilten Bildpunkten besteht. SIRTS (Single Image Random Text Stereogram) sind dagegen aus Buchstaben aufgebaut. Da diese einfach auf Papier oder einem Bildschirm dargestellt werden können, sind sie als Signatur in elektronischen Briefen beliebt.

Bei herkömmlichen Stereogrammen (Zeichnungen oder Fotografien) liegen die Ansichten für jedes Auge getrennt vor. Dieses Verfahren wurde früher für Fotografien benutzt. Das Betrachten wird durch eine Sehhilfe erleichtert, die sicherstellt, daß jedes Auge die richtige Ansicht sieht. Im Gehirn wird diese Information zu einem räumlichen Eindruck verarbeitet. Bei Autostereogrammen liegt die Information für beide Ansichten in einem einzigen Bild.

Allen Stereoverfahren ist gemeinsam, daß die Information über die Parallaxe im Datenmaterial enthalten sein muß. Als Parallaxe wird der Winkel bezeichnet, den die beiden Sehstrahlen bilden, wenn sie auf einen Punkt fokussiert werden. Meist wird nur die horizontale Parallaxe berücksichtigt, da sonst der Rechenaufwand zu groß würde. Daher verschwindet der räumliche Effekt, wenn man ein Autostereogramm beim Betrachten dreht.

Stereogramme haben eine lange Tradition vor allem in den Bereichen Computersehen und Computergraphik. Erste Versuche zu Random Dot Stenogrammen (RDS) wurden von B. Julesz etwa ab 1960 unternommen. Zu ihrer Erstellung wurden bereits Computer verwendet. D. Marr und T. Poggio stellen ihre umfassende Theorie über das menschliche Stereosehen auf und beschreiben unter anderem RDS, die jedoch aus zwei nebeneinanderliegenden Bildern bestehen [1].

Tyler und Clarke entwickeln 1990 das Autostereogramm, das nur mit einem Bild auskommt. Der Algorithmus wird von Thimbleby, Inglis und Witten [2] verbessert und über das Internet verbreitet, weshalb die meisten Programme in diesem vergleichsweise einfachen Algorithmus ihren Ausgangspunkt haben. Eingabe in den Algorithmus ist eine Höhenmatrix, ein Rasterbild aus Höhenwerten. Diese wird von einer Betrachterposition oberhalb der Matrix aus mit dem linken und dem rechten Auge betrachtet. Der Abstand der beiden Sehstrahlen auf einer Bildebene wird errechnet und die betroffenen Pixel der Bildebene werden ermittelt. In Abb. 1 wird dieser Zusammenhang erläutert. Zusätzlich müssen Verdeckungen berücksichtigt werden.


Abb. 1 Geometrischer Zusammenhang bei der Erzeugung von SIS. Der Wert d (Displacement) gibt den Abstand zwischen linkem und rechtem Sehstrahl bezüglich der gewählten Bildebene a, d variiert abhängig von den Tiefenwerten.

Da nur die horizontale Parallaxe von Interesse ist, geht man zeilenweise vor. Im Endresultat müssen die jeweiligen Pixel für linken und rechten Sehstrahl denselben Farbwert besitzen. Anhand der vorher ermittelten Pixelkoordinaten bildet man verkettete Listen aller Pixel, die denselben Farbwert erhalten müssen.

In einem zweiten Durchgang wird die Farbe der Pixel festgelegt, indem man jeder verketteten Liste einen Farbwert zuordnet und diesen wiederum an die entsprechenden Pixel weitervererbt. Die Wahl der Pixelfarben kann entweder durch Zufallszahlen oder anhand vorgegebener Bilder erfolgen.

Das Verfahren kann mit dem Raytracing Verfahren [3] auf beliebige, dreidimensionale Szenen erweitert werden. Dazu benötigt man zwei Augenpunkte, die bezüglich der Bildebene nur eine horizontale Parallaxe bilden. Zum linken Augenpunkt berechnet man den Trefferpunkt zwischen Anfragestrahl und Szene. Ein neuer Anfragestrahl vom Trefferpunkt zum rechten Auge bestimmt den Wert der Parallaxe, der wiederum zur Berechnung der verketteten Listen verwendet wird. Dieses Verfahren läßt sich leicht in einen Raytracer einbauen, da zusätzlich nur neue Strahlanfragen eingesetzt werden. Eventuelle Verdeckungen werden ohne Zusatzaufrufe ermittelt.

Es ist zwar möglich, farbige SIS zu erstellen, jedoch können die räumlichen Szenen nur mit dem Texturmuster des Originalbildes versehen werden. Die Darstellung der Szenen in den richtigen Farben ist dagegen nicht möglich.

Manche Beobachter sehen die Szenen auf den SIS invertiert, d.h. als Abdruck des Objektes. Dies hängt mit der Physiologie des Stereosehens zusammen. Beim Betrachten der SIS ist es nicht eindeutig, welche der Bildpunkte zusammengehören. Zudem ist es möglich so zu fokussieren, daß linker und rechter Punkt vertauscht werden, indem die Sehstrahlen überkreuzt werden.

Das Thema wird zur Zeit mit den NetNews intensiv diskutiert [4]. Einige der dort verbreiteten Informationen können jedoch nicht vorbehaltlos übernommen werden. Mehrere Künstler haben diese Technik adaptiert (teilweise in den USA patentiert), geben Bildbände heraus und vertreiben Bilder, Poster und Postkarten. Einige dieser Arbeiten zeichnen sich durch zusätzliche Experimente und Verzierungen aus. In einigen Zeitschriften werden auch Hinweise zum selber experimentieren veröffentlicht [5].


Abb. 2 Ein SIRDS, das mit der Raytracing-Methode erstellt wurde.

In Abb. 2 wird ein SIRDS dargestellt, das mit einer vom Autor modifizierten Raytracing Methode und dem Algorithmus von Thimbleby, Inglis und Witten erstellt wurde. Es empfiehlt sich, das Bild etwa aus dem Abstand einer Armlänge aus zu betrachten. Sehen Sie unscharf auf das Bild, indem Sie ein Objekt fokussieren, das etwa 30 cm hinter der Bildebene liegt. Nota bene: Beim Zukneifen eines Auges kommt der Effekt nicht zustande. Ex empfiehlt sich, das Bild beim Betrachten gut zu beleuchten. Die Szene ist in Abb. 3 dargestellt.


Abb. 3 Szene für das SIRDS aus Abbildung 2

 

                   Artikelanfang   Seitenanfang

Literatur

  1. D. Marr and T. Poggio. A computational theory of human stereo vision. Proc R. Soc. Lond. B., 204, 301-328, 1979
  2. H. Thimbleby, S. Inglis, and I. Witten. Displaying 3d images: Algorithms for single image random stereograms. erhältlich über ftp:kaz.anu.edu.au:/pub/stergrams/papers/SIDRS-paer.ps.Z, erscheint in IEEE Computer, 1994
  3. W. Leister, H. Müller and A. Stößer. Fotorealistische Computeranimation. Springer Verlag, Heidelberg 1991
  4. S. Inglis, ed. Sterogram-FAQ. Net News Article in alt.3d,
    www.cs.waikato.ac.nz/~singlis/sirds.html, 1994
  5. Ute Claussen and Josef Pöpsel, Im Rausch der Tiefe. c’t, 7, 1994

                   Artikelanfang   Seitenfang

Autor & Copyright
Dr. Wolfgang Leister,
Metronor AS,
Postboks 238,
N1362 Nesbru,
Norwegen
leister@oslonett.no

© 1995 Informatik Spektrum, Springer-Verlag Berlin Heidelberg

                   Artikelanfang   Seitenanfang