Dipl. User mit summa cum laude
Im Grunde hast du das Problem doch gar nicht, denn dein TML ist isomorph, bijektiv auf dein Metadatenformat abbildbar, was praktisch XML mit [] statt <> und ohne Endtags ist.
#num:text\n -> [Episode, id=num, name=text]
<text>\n -> [Scene, description=text]
name:text\n -> [Line, character=name] text
{text} \n -> [Camera] text
Im Grunde hast du nur eine kurznotation, das format der Daten aendert sich nicht, sie beschreiben den selben Baum und sind damit eben auch nicht flach.
Deine Aktuelle Strukturierung der Daten erlaubt keine tiefere Verschachtelung als bis zur Scene ebene. (Warum auch .. Szenen innerhalb Szenen ?) Darauf ist auch dein Format ausgerichtet, denn du implizierst durch das weglassen der Endtags automatisch, das gleiche Elemente hierarchisch auf der selben Ebene angelegt werden. Wenn du auf eine Stelle wie <s1> <s2> stoesst, weisst du automatisch, das sie im selben Episodenobjekt liegen, wenn du ein neues Episodenobjekt, weisst du damit, das alte ist beendet, da das neue ja dazu parallel liegen muss.
Bei einem Hierarchisch geordneten Baum beliebiger Tiefe hast du allerdings stattdessen 3 Moeglichkeiten, was du tun kannst, wenn du auf eine struktur wie <s1><s2> stoesst.
1. s2 ist ein Subelement von s1 und spannt damit eine weitere Tiefenebene auf.
2. s2 liegt auf der selben Ebene wie s1. Damit wird s1 automatisch geschlossen und parallel dazu s2 eingefuegt (und mit dem Elternknoten verbunden).
3. s2 liegt in (irgendeiner) Ebene unterhalb von s1 und alle Knoten unterhalb von s1 bis zu der Ebene, in der s2 liegen soll, muessen geschlossen werden.
Wie du sehen kannst, kannst du mit einem weiteren (optionalen) Parameter komplexe hierarchieebenen aufbauen. Wenn du also jedem Construct ein Symbol der Form (!([0..9]*))? voranstellst, kannst du beliebig tiefe und komplexe Baeume aufbauen.
Ein <text> wuerde parallel zu einem eventuell vorhandenem Scene Objekt im aktiven Elternknoten eingefuegt werden.
Ein !<text> macht das letztoffene (und sinnvolle) Objekt zum neuen Elternknoten und fuegt das Scene Objekt dort ein.
Ein !2<text> geht 2 Ebenen tiefer, schliesst auf dem Weg alle offenen Knoten darueber, macht den dort befindlichen Knoten zum aktiven Elternknoten und fuegt das Szene-Objekt ein.
Das Format ist zudem 100% abwaertskompatibel zu deinem Format (indem einfach kein ! am Zeilenanfang vorkommt).
Irgendwie hat das ganze was von Turtle-Graphik ^^
Geändert von Ineluki (09.04.2008 um 14:02 Uhr)