Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

XML-Programmierung mit XDuce Bearbeitet von: Daniel Beck Taoufik Romdhane Logische Aspekte von XML Proseminar im Sommersemester 2003 Prof. Gert Smolka.

Ähnliche Präsentationen


Präsentation zum Thema: "XML-Programmierung mit XDuce Bearbeitet von: Daniel Beck Taoufik Romdhane Logische Aspekte von XML Proseminar im Sommersemester 2003 Prof. Gert Smolka."—  Präsentation transkript:

1 XML-Programmierung mit XDuce Bearbeitet von: Daniel Beck Taoufik Romdhane Logische Aspekte von XML Proseminar im Sommersemester 2003 Prof. Gert Smolka

2 2 Inhalt Was ist XDuce? Typaspekte Pattern Matching Restriktionen und Probleme Zusammenfassung

3 3 Was ist XDuce? Man spricht Transduce aus ;) Eine funktionale Programmiersprache Typen sehen der DTD ähnlich aus (Document Type Definition) XML Dokumente sind Werte Statisch typisiert

4 4 Typaspekte Beispiel Typdefinition für ein Adressbuch : type Addrbook = addrbook[(Name, Addr, Tel?)*] type Name = name[String] type Addr = addr[String] type Tel = tel[String] Entsprechendes DTD:

5 5 Typen Mächtiges Typsystem: Typen werden als reguläre Ausdrücke angegeben (DTD) Typsystem entspricht den regulären Baumautomaten Strukturelles Subtyping Statisches Typechecking Typen als Menge von Werten

6 6 Typdefinition T ::=XVariable BBasistyp ()leere Sequenz l[T]Label T,TKonkatenation T|TVereinigung

7 7 Was ist mit *, + und ? Kleenesche Stern wird rekursiv definiert: T* = T,T* | () + und ? sind Abkürzungen für: T+ = T,T* T? = T|()

8 8 Typen als Menge von Werten Funktion [[.]]: nimmt einen Typ und eine Umgebung ρ, die Typvariablen auf Mengen von Werten bildet gibt eine Menge von Werte zurück

9 9 Subtyping-Relation Es gibt Typen, die in andere enthalten sind (Teilmenge- Relation): a <: a+ a ist Teilmenge von a+ Ein Typ ist ein Subtyp von einem anderen, wenn der erste eine Teilmenge vom letzten beschreibt Die Werte die links enthalten sind, sind auch rechts enthalten

10 10 Subtyping-Relation Addressbuch-Beispiel (1) Beispiel: Der Wert mybook val mybook = addrbook[ name[Peter], addr[Berlin], name[Hans], addr[Bonn], tel[ ]] Zur Erinnerung: Definition vom Typ Addressbuch: type Addrbook = addrbook[(Name, Addr, Tel?)*] type Name = name[String] type Addr = addr[String] type Tel = tel[String]

11 11 Subtyping-Relation Addressbuch-Beispiel (3) Kann man dem Wert mybook den Typ Addrbook zuweisen? val mybook = addrbook[ name[Peter], addr[Berlin], name[Hans], addr[Bonn], tel[ ]] mybook hat den Typ: addrbook[Name,Addr,Name,Addr,Tel] Und: addrbook[Name,Addr,Name,Addr,Tel] <: addrbook[(Name,Addr,Tel?)*] := Addrbook

12 12 Typrekursion Bis jetzt wurde das Typsystem als kontextfreie Sprache definiert Aber: Subtyping wäre dann nicht entscheidbar Deswegen: Restriktion auf Rechts- Rekursion Jetzt: gleich mächtig mit den regulären Baumautomaten

13 13 Pattern Matching Sehr ähnlich zu dem aus ML, aber durch reguläre Ausdrücke mächtiger Beispiel: erstes Tripel finden fun firstTriple: (Name,Addr,Tel?)* -> (Name,Addr,Tel)? = ps:(Name,Addr)*, t:(Name,Addr,Tel), rest:(Name,Addr,Tel?)* -> t | whole:(Name,Addr,Tel?)* -> () Pattern Matching besteht aus 2 Fälle: (Name,Addr)* werden übersprungen, t wird das erste Tripel zugewiesen Sonst gibt der zweite Fall () zurück.

14 14 Pattern Matching Regeln 1. first matching policy: Ambiguität: ps:(Name,Addr)* -> ps | t: (Name,Addr) -> t Mehrere Patterns "matchen" dieselbe Eingabe Lösung: Nimm erstes passendes Pattern

15 15 Pattern Matching Regeln 1. longest match: Ambiguität: ps:(Name,Addr,Tel?)*, t:(Name,Addr,Tel), rest:(Name,Addr,Tel?)* Ein Pattern kann eine Eingabe unterschiedlich matchen Welcher Tripel ist nun mit t gemeint? Lösung: Das früher auftretende Pattern hat höhere Priorität Jedes Pattern darf so viel wie möglich matchen Deswegen matcht t das letzte Tripel in der Eingabe

16 16 Pattern Matching Exhaustiveness Mit Subtyping wird geprüft, ob ein Pattern erschöpfend (exhaustive) ist Im Beispiel der Tripelsuche: fun firstTriple: (Name,Addr,Tel?)* -> (Name,Addr,Tel)? = ps:(Name,Addr)*, t:(Name,Addr,Tel), rest:(Name,Addr,Tel?)* -> t | whole:(Name,Addr,Tel?)* -> () Muss folgendes gelten: (Name,Addr,Tel?)* <: ((Name,Addr)*,(Name,Addr,Tel),(Name,Addr,Tel?)*) | (Name,Addr,Tel?)*

17 17 Restriktionen der Sprache XDuce wird weiter entwickelt. Zur Zeit fehlen wichtige Features: Funktionen höherer Ordnung Polymorphismus Parametrisierte Typen (Typkonstruktoren) …

18 18 Probleme der Sprache Pattern- und Typsystem gleich mächtig wie Baumautomaten Operationen sind sehr teuer (Typechecking: EXPTIME)

19 19 Zusammenfassung Funktionale und typisierte Sprache mit XML- Dokumenten als primitive Werte Schwerpunkte: Strukturelle Typen mit regulären Ausdrücken Pattern Matching mit regulären Ausdrücken Was noch fehlt: (geplant) Funktionen hoeherer Ordnung (Parametrischer) Polymorphismus Object-Orientierte Features (wie in den XML Spezifikationen vom W3C) Effizienz?

20 20 Anwendungen Beispiele von Progammen, die in XDuce geschrieben sind: HTML2Latex : Ein Konverter (264 Zeilen) Diff: zeigt an ob sich eine XML Datei verändert hat (300 Zeilen)

21 21 Alternativen zu XDuce CDuce Basiert auf XDuce First-class Funktionen Noch besseres Pattern Matching Subtyping-Algorithmus ohne Backtracking Man kann auch Typen unter Schnitt, und Komplement bilden YAT vom Prinzip her XDuce sehr nah XMLambda Funktionen höherer Ordnung Parametrisches Polymorphismus

22 22 Referenzen Haruo Hosoya and Benjamin C. Pierce: Regular expression pattern matching for XML. A typed XML processing language (preliminary report). Unter : Uwe Schöning, Theoretische Informatik – kurzgefasst. Um mehr über XDuce zu wissen: xduce.sourceforge.net / XMLambda


Herunterladen ppt "XML-Programmierung mit XDuce Bearbeitet von: Daniel Beck Taoufik Romdhane Logische Aspekte von XML Proseminar im Sommersemester 2003 Prof. Gert Smolka."

Ähnliche Präsentationen


Google-Anzeigen