Konzepte Content-Repräsentation & Markup-Sprachen

7.3 Nebenbedingungen für Bildungsregeln

Um den Validierungsprozeß wie eingangs beschrieben durchführen zu können, darf jedes Element nur einmal auf der linken Seite einer Bildungsregel vorhanden sein, d. h. eine DTD darf daher nur eine Deklaration für jeden Elementtyp enthalten. Diese Beschränkung stellt sicher, daß jede DTD in einer Form dargestellt werden kann, die eine effiziente sequentielle Überprüfung des Dokuments ermöglicht. Die Bildungsregeln werden dazu intern als Zustandsübergangsdiagramm aufgefaßt, in dem für jedes Auftreten eines Elements nur ein möglicher Übergang zum jeweiligen Folgezustand existieren darf. Insbesondere kann für die Entscheidung, welche Regel zu überprüfen ist, kein nachfolgendes Element gelesen werden. Folgendes Beispiel zeigt die potentiellen Auswirkungen für daraus resultierende Mehrdeutigkeiten:

Beispiel 4. Mehrdeutige Elementtyp-Deklarationen

      <!ELEMENT a (b,c)>
      <!ELEMENT b (d)>
      <!ELEMENT b (e)>
    

Abbildung 3 zeigt stark vereinfacht, daß dies für die oben angegebene Regelmenge nicht gegeben ist, weil nunmehr zwei mögliche Regeln für den mit b zu markierenden Zustand existieren. Um einen Pfad aus Zustandsübergängen von a nach c zu konstruieren, müßte also vorab bekannt sein, ob im zu prüfenden Dokument dem b-Starttag ein Starttag für das Element d oder für das Element e folgt.

Abbildung 3. Nicht-Entscheidbarkeit bei mehrdeutiger Bildungsregel

Ein ähnliches Problem kann auch innerhalb einer einzelnen Bildungsregel zutage treten. Folgende Elementtyp-Deklaration zeigt eine Mehrdeutigkeit, die durch die Verwendung des Auswahl-Operators hervorgerufen wird:

Beispiel 5. Mehrdeutiges Content Model

      <!ELEMENT a (((b,d)|(b,e)),c)>
    

Die hier verwendete Model Group (b,d)|(b,e) führt wiederum zu dem in Abbildung 3 skizzierten Entscheidungsproblem bei der Konstruktion der Zustandsübergänge: Für ein gelesenes Starttag b kann ohne Vorgriff auf das Folgeelement (entweder d oder e) nicht entschieden werden, ob die Regel (b,d) oder (b,e) anwendbar ist.

Zur Vermeidung mehrdeutiger Bildungsregeln stehen viele Techniken zur Verfügung, die jedoch ein wenig Übung erfordern. So können die Mehrdeutigkeit in der zuletzt betrachteten Bildungsregel beispielsweise wie folgendermaßen beseitigt werden:

Beispiel 6. Eindeutige Bildungsregel

      <!ELEMENT a (b,(d|e),c)>
    

Wie Abbildung 4 zeigt, ist hier in jedem Zustand eindeutig festgelegt, zu welchem Folgezustand ein gelesenes Starttag führt. Wird demnach im Zustand b das Starttag <d> gelesen, so wird d zum aktuellen Zustand. Wurde statt <d> hingegen <e> gelesen, so schlägt der XML-Prozessor den unteren Pfad ein, und e wird zum aktuellen Zustand.

Abbildung 4. Aufgelöste Mehrdeutigkeit im Content Model

Kommentare (0)

Ihr Kommentar

Name