GXL – Eine XML-Anwendung

Post on 21-Jan-2016

36 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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 Presentation

Transcript

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.

top related