Kommentare und Verarbeitungsanweisungen |
Top Previous Next |
Beispiele > XML > Kommentare und Verarbeitungsanweisungen
Es gibt noch eine Reihe von Schönheitsfehlern in ISO_XML.ttp, die nun im Übergang zu XML.ttp beseitigt werden sollen.
Der letzte Punkt dient didaktischen Zwecken. In anderen Grammatiken wäre er von größerem Nutzen als gerade bei XML, wo diese Einschlüsse nur an genau spezifizierten Stellen vorkommen dürfen.
Kommentare und Verarbeitungsanweisungen haben eine Sonderrolle: sie können an vielen Stellen im Dokument eingeschoben sein, ohne die Daten zu verändern, die durch das XML-Dokument zu einer Anwendung transportiert werden; sie enthalten zusätzliche Informationen. Die Kommentare sind für den menschlichen Leser bestimmt und können von der Anwendung ignoriert werden. Der reguläre Ausdruck, der die Kommentare beschreibt kann mit den anderen auszulassenden Zeichen in einen Ausdruck zusammengefasst werden.
(\s|<!--([^-]|-+[^->]|->)*-+->)+
Verarbeitungsanweisungen enthalten Informationen für externe Anwendungen - z.B. können vollständige php-Skripte hier eingebettet sein - und können als Einschluss-Produktion gesetzt werden.
Der neue Ausdruck und die Einschluss-Produktion können in den globalen Projektoptionen gesetzt werden. (ProcInstr muss dabei in den lokalen Optionen von sich selbst als Einschluss entfernt werden.) Dann toleriert der Parser allerdings auch XML-Dokumente in denen z.B. ein Kommentar innerhalb eines Tags vorkommt. Soll ein derartiges Vorkommen einen Fehler erzeugen, müssen die Produktionen so verändert werden, dass sich ihre lokalen Optionen so modifizieren lassen, dass genau die erlaubten Vorkommen von Kommentaren und Verarbeitungsanweisungen erfasst werden. Ob es auszulassende Zeichen gibt oder, ob ein Einschluss folgt wird stets vor der Ermittlung des nächsten Tokens geprüft. Die lokalen Optionen einer Produktion hierfür werden also wirksam, sobald innerhalb der Produktion ein neues Token ermittelt wird. Da z.B. content mit comment beginnen kann, muss das Token das in der XML-Syntax als letztes vor content steht das erste Token einer Produktion sein, die auf Kommentare prüft. Deshalb wird die zusätzliche Produktion element_content, definiert (und analog die zusätzliche produktion doctypedecl_core). In den lokalen Optionen der folgenden Produktionen werden die Kommentare und Verarbeitungsanweisungen gesetzt:
content ::= ( element | CharData | "]]>" EXIT | Reference | CDSect )* element_content ::= content ETag element_end ::= "/>" | ">" element_content
doctypedecl_core ::= "[" ( markupdecl | PEReference )*
prolog ::= XMLDecl? doctypedecl?
Man beachte, dass auch in und nach der der prolog-Produktion Kommentare und Verarbeitungsanweisungen erkannt werden, da anders als bei anderen automatisch erzeugten Parsern, auch die Nachfolger von Produktions-Aufrufen explizit ermittelt werden. Die element-Produktion ist nun ebenfalls etwas verändert. In ihr werden aber keine lokalen Optionen gesetzt.
element ::= "<" Name Attribute* element_end
|
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |