gxl – eine xml-anwendung
DESCRIPTION
GXL – Eine XML-Anwendung. Martin Sievers 27.06.2002. Inhalt. Begriffe & Notationen Motivation & Entwicklung von GXL Austausch von Graphen mit GXL GXL in der Praxis; Implementierungen Fazit Ausblick. 1. Begriffe & Notationen. Definition Digraph. - PowerPoint PPT PresentationTRANSCRIPT
GXL – Eine XML-Anwendung
Martin Sievers
27.06.2002
Inhalt
Begriffe & Notationen
Motivation & Entwicklung von GXL
Austausch von Graphen mit GXL
GXL in der Praxis; Implementierungen
Fazit
Ausblick
1. Begriffe & Notationen
Definition Digraph
Seien V,E Mengen mit V nichtleer, endlich, E ⊂ VxV.
Dann heißt G:=(V,E) gerichteter Graph
(Digraph) mit der Knotenmenge V und der
Kantenmenge E.
Eigenschaften von Graphen
Ein Graph G=(V,E) heißt
ungerichtet (undirected), falls E aus
zweielementigen Teilmengen von V besteht
geordnet (ordered), falls auf V,E und der Menge
der zu einem Knoten inzidenten Kanten eine totale
Ordnung definiert ist
typisiert (typed), falls V und E aus Objekten eines
bestimmten Typs bestehen
attribuiert (attributed), falls mindestens einem
Graphobjekt ein Paar aus Attributbezeichnung und
-wert zugeordnet ist
Definition Hypergraph
Seien I Indexmenge, V Knotenmenge und ℰ :={Ei :
i ∈ I} Familie von Teilmengen (sog. Hyperkanten)
von V.
Dann heißt H:=(V,ℰ) Hypergraph, falls
i) ∀ i ∈ I : Ei nicht leer
ii) ∪ i ∈ I : Ei = V
Eigenschaften von Hypergraphen
Zwei Knoten u,v heißen adjazent, falls ∃ j ∈ I : {u,v} ⊂ Ej
Zwei Kanten E1,E2 heißen adjazent, falls E1 ∩ E2 nichtleer
Die Zahl r := r(V) := max {|V ∩ Ei| : i ∈ I } heißt Rang
von H und gibt an, wieviele Knoten eine Kante in H
maximal verbindet.
Wir nennen H auch Hypergraph r-ten Grades
Bemerkungen zu Hypergraphen
1. Jeder Graph ist ein Hypergraph zweiten Grades
2. Falls die Ei disjunkt sind, heißt H einfach
(simple)
3. Hyperkanten werden durch Ellipsen, die die
zugehörigen Kanten umschließen, dargestellt
Beispiel (Hypergraph)
1
8
5
4
3
76
2E5
E2
E1E4
E6
E3
2. Motivation & Entwicklung von
GXL
Motivation von GXL
Vielseitigkeit von Graphen führte zu
verschiedenen Graph-Formaten in der Praxis
⇒Probleme beim Zusammenspiel von
Softwarekomponenten
Austausch schwierig, Nutzung von Konvertern
nötig
⇒Notwendigkeit eines universellen Graph-
Formats
Fakten
Graph eXchange Language
XML - Untersprache
1998 unter Leitung von Andreas Winter an der
Uni Koblenz entwickelt
Aktuelle Version: GXL 1.0 (Januar 2001)
Informationen unter
http://www.gupro.de/GXL/
Entwicklung von GXL (1. Phase)
Grundformate
GraX
TA
PROGRES
Entwicklung von GXL (2. Phase)
Grundformate
Formate des Reengineerin
g
GraX ATerms
TA RPA
PROGRES RSF
Entwicklung von GXL (3. Phase)
Grundformate
Formate des Reengineerin
g
Formate des Graphzeichne
ns
GraX ATerms daVinci
TA RPA GML
PROGRES RSF Graphlet
GRL
XGMML
GraphXML
Entwicklung von GXL (Schematisch)TA GraX PROGRES
GXL 0.4.2
GXL 0.6.6
GXL 0.7
GXL 0.7.2
GXL 1.0
da VinciGML
GraphletGML
XGMML
RPARSF
ATerms
BarcelonaBerlin
BudapestKent
GraphXML
WCRE 1999AlGra 2000GROOM 2000
WoSEF 2000
Graph Drawing workshop on data exchange formats (GD 2000)
CASCON 2000WCRE 2000
Dagstuhl 2001„Interoperability of Reengineering Tools“Quelle: [1], Abb. 1
3. Austausch von Graphen mit GXL
Austausch von Graphen
Betrachtung typisierter, attribuierter,
gerichteter, geordneter Graphen (sog. TGraphs)
Zur Verarbeitung von Hyper- bzw. hierarchischer
Graphen Erweiterungen um Hyperkanten sowie
hierarchische Strukturen nötig
Grundlagen für den Austausch von Graphen per GXL
GXL-Dokumente werden stets von <gxl>
umschlossen; jeder im Dokument definierte Graph
von <graph>
jedem Graph muß eindeutiger Name zugewiesen
werden
zu jedem Graph gehört Graph-Schema
Knoten und Kanten werden mit <node> bzw. <edge>
und optionalem eindeutigen Namen gekennzeichnet
Innerhalb von <node> bzw. <edge> werden durch
1. from und to zu einer Kante inzidente Knoten
2. fromorder und toorder die Ordnung der Kanten
3. <type> der aus dem Graph-Schema bekannte
Typ für Knoten und Kanten
4. <attr> zugehörige evtl. verschachtelte Attribute
des Typs <int>, <bool>, <string>, <float> u.a.
angegeben.
Beispiel (einfacher Graph)
GXL-Darstellung<?xml version="1.0"?>
<!DOCTYPE gxl SYSTEM "../../../gxl-1.0.dtd">
<gxl xmlns:xlink="http://www.w3.org/1999/xlink">
<graph id="simpleExample"><type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#
simpleExampleSchema"/>
<node id="p">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Pro
c"/>
<attr name="file">
<string>main.c</string>
</attr>
</node>
<node id="q">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Pro
c"/>
<attr name="file">
<string>test.c</string>
</attr>
</node>
<node id="v">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Var
"/>
<attr name="line">
<int>225</int>
</attr>
</node>
<node id="w">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Var"/
>
<attr name="line">
<int>316</int>
</attr>
</node>
<edge id="r1" from="p" to="v">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#ref"/>
<attr name="line">
<int>127</int>
</attr>
</edge>
<edge id="r2" from="q" to="w">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#ref"/>
<attr name="line">
<int>27</int>
</attr>
</edge>
<edge id="c" from="p" to="q">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#call"/
>
<attr name="line">
<int>42</int>
</attr>
</edge>
</graph>
</gxl>
GXL-Darstellung<?xml version="1.0"?>
<!DOCTYPE gxl SYSTEM "../../../gxl-1.0.dtd">
<gxl xmlns:xlink="http://www.w3.org/1999/xlink">
<graph id="simpleExample"><type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#
simpleExampleSchema"/>
<node id="p">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Pro
c"/>
<attr name="file">
<string>main.c</string>
</attr>
</node>
<node id="q">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Pro
c"/>
<attr name="file">
<string>test.c</string>
</attr>
</node>
<node id="v">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Var
"/>
<attr name="line">
<int>225</int>
</attr>
</node>
<node id="w">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Var"/
>
<attr name="line">
<int>316</int>
</attr>
</node>
<edge id="r1" from="p" to="v">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#ref"/>
<attr name="line">
<int>127</int>
</attr>
</edge>
<edge id="r2" from="q" to="w">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#ref"/>
<attr name="line">
<int>27</int>
</attr>
</edge>
<edge id="c" from="p" to="q">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#call"/
>
<attr name="line">
<int>42</int>
</attr>
</edge>
</graph>
</gxl>
GXL-Darstellung<?xml version="1.0"?>
<!DOCTYPE gxl SYSTEM "../../../gxl-1.0.dtd">
<gxl xmlns:xlink="http://www.w3.org/1999/xlink">
<graph id="simpleExample"><type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#
simpleExampleSchema"/>
<node id="p">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Pro
c"/>
<attr name="file">
<string>main.c</string>
</attr>
</node>
<node id="q">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Pro
c"/>
<attr name="file">
<string>test.c</string>
</attr>
</node>
<node id="v">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Var
"/>
<attr name="line">
<int>225</int>
</attr>
</node>
<node id="w">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Var"/
>
<attr name="line">
<int>316</int>
</attr>
</node>
<edge id="r1" from="p" to="v">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#ref"/>
<attr name="line">
<int>127</int>
</attr>
</edge>
<edge id="r2" from="q" to="w">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#ref"/>
<attr name="line">
<int>27</int>
</attr>
</edge>
<edge id="c" from="p" to="q">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#call"/
>
<attr name="line">
<int>42</int>
</attr>
</edge>
</graph>
</gxl>
GXL-Darstellung<?xml version="1.0"?>
<!DOCTYPE gxl SYSTEM "../../../gxl-1.0.dtd">
<gxl xmlns:xlink="http://www.w3.org/1999/xlink">
<graph id="simpleExample"><type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#
simpleExampleSchema"/>
<node id="p">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Pro
c"/>
<attr name="file">
<string>main.c</string>
</attr>
</node>
<node id="q">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Pro
c"/>
<attr name="file">
<string>test.c</string>
</attr>
</node>
<node id="v">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Var
"/>
<attr name="line">
<int>225</int>
</attr>
</node>
<node id="w">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#Var"/
>
<attr name="line">
<int>316</int>
</attr>
</node>
<edge id="r1" from="p" to="v">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#ref"/>
<attr name="line">
<int>127</int>
</attr>
</edge>
<edge id="r2" from="q" to="w">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#ref"/>
<attr name="line">
<int>27</int>
</attr>
</edge>
<edge id="c" from="p" to="q">
<type
xlink:href="../../schema/gxl/simpleExampleSchema.gxl#call"/
>
<attr name="line">
<int>42</int>
</attr>
</edge>
</graph>
</gxl>
Austausch von Hypergraphen per GXL
Betrachtung typisierter, attribuierter,
(un-)gerichteter, geordneter Hypergraphen
⇒Notwendigkeit zusätzlicher Tags im GXL-Dokument
jede Hyperkante wird durch <rel> definiert und evtl.
durch <type> und <attr> näher erklärt
die durch eine Hyperkante verbundenen Knoten
werden über <relend> angegeben und durch
target, role, startorder, endorder,
isdirected, direction genauer spezifiziert.
Beispiel (Hypergraph)
a = max(a,b)
<?xml version="1.0"?>
<!DOCTYPE gxl SYSTEM "../../../gxl-1.0.dtd">
<gxl xmlns:xlink="http://www.w3.org/1999/xlink">
<graph id="hypergraph2"><type
xlink:href="../../schema/gxl/hypergraph2Schema.gxl#
hypergraph2Schema"/>
<node id="v1">
<type
xlink:href="../../schema/gxl/hypergraph2Schema.gxl#Functi
on"/>
<attr name="name">
<string>main</string>
</attr>
</node>
<node id="v4">
<type
xlink:href="../../schema/gxl/hypergraph2Schema.gxl#Functi
on"/>
<attr name="name">
<string>max</string>
</attr>
</node>
<node id="v6">
<type
xlink:href="../../schema/gxl/hypergraph2Schema.gxl#Variabl
e"/>
<attr name="name">
<string>a</string>
</attr>
</node>
<node id="v7">
<type
xlink:href="../../schema/gxl/hypergraph2Schema.g
xl# Variable"/>
<attr name="name">
<string>b</string>
</attr>
</node>
<rel id="r1">
<type
xlink:href="../../schema/gxl/hypergraph2Schema.g
xl# FunctionCall2"/>
<attr name="line">
<int>8</int>
</attr>
<relend target="v1" role="caller"/>
<relend target="v4" role="callee"/>
<relend target="v6" role="output"/>
<relend target="v6" role="input"
startorder="1"/>
<relend target="v7" role="input"
startorder="2"/>
</rel>
</graph>
</gxl>
<?xml version="1.0"?>
<!DOCTYPE gxl SYSTEM "../../../gxl-1.0.dtd">
<gxl xmlns:xlink="http://www.w3.org/1999/xlink">
<graph id="hypergraph2"><type
xlink:href="../../schema/gxl/hypergraph2Schema.gxl#
hypergraph2Schema"/>
<node id="v1">
<type
xlink:href="../../schema/gxl/hypergraph2Schema.gxl#Functi
on"/>
<attr name="name">
<string>main</string>
</attr>
</node>
<node id="v4">
<type
xlink:href="../../schema/gxl/hypergraph2Schema.gxl#Functi
on"/>
<attr name="name">
<string>max</string>
</attr>
</node>
<node id="v6">
<type
xlink:href="../../schema/gxl/hypergraph2Schema.gxl#Variabl
e"/>
<attr name="name">
<string>a</string>
</attr>
</node>
<node id="v7">
<type
xlink:href="../../schema/gxl/hypergraph2Schema.g
xl# Variable"/>
<attr name="name">
<string>b</string>
</attr>
</node>
<rel id="r1">
<type
xlink:href="../../schema/gxl/hypergraph2Schema.g
xl# FunctionCall2"/>
<attr name="line">
<int>8</int>
</attr>
<relend target="v1" role="caller"/>
<relend target="v4" role="callee"/>
<relend target="v6" role="output"/>
<relend target="v6" role="input"
startorder="1"/>
<relend target="v7" role="input"
startorder="2"/>
</rel>
</graph>
</gxl>
Austausch hierarchischer Graphen
Problem: Große Graphen führen schnell zu
unübersichtlichen Strukturen
Lösung: Zusammenfassung zusammengehöriger
Objekte zu eigenständigen Strukturen
Umsetzung in GXL durch Verschachtelung von
<graph>-Elementen
Beispiel (Hierarchischer Graph)
<edge id="e1" from="u" to="v"> <type xlink:href="../../schema/gxl/ crossingSchema.gxl#E"/> </edge> </graph> </node> <node id="w"> <type xlink:href="../../schema/gxl/ crossingSchema.gxl#W"/> </node> <edge id="e2" from="t" to="w"> <type xlink:href="../../schema/gxl/
crossingSchema.gxl#f"/> </edge> <edge id="e3" from="w" to="v"> <type xlink:href="../../schema/
gxl/crossingSchema.gxl#g"/> </edge> </graph></gxl>
<?xml version="1.0"?><!DOCTYPE gxl SYSTEM "../../../gxl-1.0.dtd"><gxl xmlns:xlink= "http://www.w3.org/1999/xlink"> <graph id="crossingHierarchies"> <type xlink:href="../../schema/gxl/ crossingSchema.gxl#crossingSchema"/> <node id="t"> <type xlink:href="../../schema/gxl/ crossingSchema.gxl#T"/> <graph id="graph2"><type xlink:href="../../schema/gxl/ crossingSchema.gxl#GraphT"/> <node id="u"> <type xlink:href="../../ schema/gxl/ crossingSchema.gxl#U"/> </node> <node id="v">
<type xlink:href= "../../schema/ gxl/crossingSchema.gxl#V"/> </node>
<edge id="e1" from="u" to="v"> <type xlink:href="../../
schema/gxl/crossingSchema.gxl#E"/> </edge> </graph> </node> <node id="w"> <type xlink:href="../../schema/gxl/ crossingSchema.gxl#W"/> </node> <edge id="e2" from="t" to="w"> <type xlink:href="../../schema/gxl/
crossingSchema.gxl#f"/> </edge> <edge id="e3" from="w" to="v"> <type xlink:href="../../schema/
gxl/crossingSchema.gxl#g"/> </edge> </graph></gxl>
<?xml version="1.0"?><!DOCTYPE gxl SYSTEM "../../../gxl-1.0.dtd"><gxl xmlns:xlink= "http://www.w3.org/1999/xlink"> <graph id="crossingHierarchies"> <type xlink:href="../../schema/gxl/ crossingSchema.gxl#crossingSchema"/> <node id="t"> <type xlink:href="../../schema/gxl/ crossingSchema.gxl#T"/> <graph id="graph2"><type xlink:href="../../schema/gxl/ crossingSchema.gxl#GraphT"/> <node id="u"> <type xlink:href="../../ schema/gxl/ crossingSchema.gxl#U"/> </node> <node id="v">
<type xlink:href= "../../schema/ gxl/crossingSchema.gxl#V"/> </node>
Weitere Aspekte
Graphmodell von GXL als XML-DTD
Übersetzung manuell durchgeführt
⇒nur 18 XML Elemente notwendig
Graph-Schemata
Graphen stellen Strukturen zur Beschreibung
von Objekten (Knoten) und Zusammenhänge
(Hyperkanten) bereit
Graphen haben keine eigene Bedeutung
⇒Interpretation eines Graphen durch Betrachtung
der dahinterliegenden Anwendung
Anwendung entscheidet über
Knoten, Kanten, Hyperkanten
Beziehungen zwischen Graphobjekten
Attributstrukturen
Graphhierachien
weitere Bedingungen wie Inzidenzordnung,
Gradbeschränkung etc.
Darstellung von Graph-Schemata
Schematische Daten werden durch UML-Klassen-
Diagramme dargestellt
UML-Klassen-Diagramme können ebenfalls als
Graphen dargestellt werden
⇒Konkrete Graphen und Schemata können im
selben Dokument beschrieben werden (dies
entspricht nicht dem XMI-Ansatz)
Überblick
UML-Klassen-Diagramm
UML-Objekt-Diagramm
GXL Graph GXL-Metasche
ma
GXL-Schema
Graph-Klasse
Zur Darstellung von Schema-Graphen
ist Instanz von
wird repräsentiert durch
dargestellt als
visualisiert als
ist Instanz von
definiert
repräsentiert als
Nach: [7], Seite 2.
nutzt
4. GXL in der Praxis /
Implementierungen
GXL in der Praxis
GXL bzw. seine direkten Vorgänger wurden schon
zur Analyse einiger „prominenter“ Anwendungen
benutzt
GCC C++ Compiler (1.000.000 LOC)
Linux Kernel (7.000.000 LOC)
Netscape Navigator
Implementierungen
Implementierungen zwar angekündigt, jedoch
bisher nicht ausreichend umgesetzt
Einzelne (studentische) Projekte
Stillstand?
Fazit
GXL
ist akzeptiertes Graph-Austauschformat
bietet flexibles, erweiterbares Graphformat
ist einfach zu benutzen; intuitiv
wird durch Forschung und Wirtschaft unterstützt
ist (noch) nicht ausreichend implementiert
Ausblick
GXL wird (hoffentlich) immer stärker auch bei
bestehenden Softwarepaketen berücksichtigt
GXL ist Grundlage für weitere Graph-
Austauschformate
GXL wird das Zusammenwirken einzelner
Softwarekomponenten stark vereinfachen
Literatur / Quellen
[1] C.Berge: Graphs and Hypergraphs. North-
Holland, Amsterdam, 2.Edition, 1976.
[2] J.Ebert, A.Franzke. A Declarative Approach to
Graph Based Modelling. In: E.Mayr et al. (Hrsg.).
Graphtheoretic Concepts in Computer Science,
LNCS 903. Springer, Berlin, S. 38 - 50. 1995.
[3] J.Ebert, K.Kontogiannis, J.Mylopoulos:
Interoperbility of Reengineering Tools.
http://www.dagstuhl.de/DATA/Reports/
01041/, 2001.
Literatur / Quellen
[4] A.Winter: Exchanging Graphs with GXL.
http://www.gupro.de/GXL, 2001.
[5] http://www.gupro.de/GXL/(graph model).
[6] http://www.gupro.de/GXL/(DTD).
[7] http://ist.unibw-muenchen.de/GXL/volk/
gxl.the_basics/gxl_the_basics.htm.