Om syntaksen i HTML-kommentarer vs SGML-kommentarer, samt problemene dette kan medføre.
Kommentarer i HTML er en ren adopsjon av SGML. HTML er en applikasjon av SGML, men syntaksen i kommentarer er lik for HTML og SGML. Problemet er bare at syntaksen i SGML-kommentarer ikke er spesielt god fra bunnen av, og kan fint skape problemer i HTML. Først av alt kan vi ta et kommentareksempel, noe du kanskje drar kjenselen på?
<!-- Kommentar -->
Kapittelet om kommentarer i spesifikasjonen for SGML sier at kommentarelementet består av to deler; kommentardeklerasjonen og kommentaren. Kommentardeklerasjonen startes med "<!", etterfølges av ingen eller flere kommentarer, og avsluttes med ">". En kommentar startes og avsluttes med "--" og kan ikke bestå av noen "--".
Kapittelet for kommentarer i HTML 4.01 sier følgende:
White space is not permitted between the markup declaration open delimiter("
<!") and the comment open delimiter ("--"), but is permitted between the comment close delimiter ("--") and the markup declaration close delimiter (">"). A common error is to include a string of hyphens ("---") within a comment. Authors should avoid putting two or more adjacent hyphens inside comments.
Note that comments are markup.
Hvorfor er det viktig å unngå doble bindestreker i HTML-kommentaren? Jo, nettopp på grunn av SGML-modulens oppbygning av en kommentar. Selve kommentaren starter ikke med "<!--" men med "--" Dette betyr at dersom man bruker doble bindestreker inne i kommentarelementet avslutter man kommentaren. Informasjon etter disse bindestrekene vil derfor være ren tekst, ikke kommentarer. Derav, W3C notis om at kommentarer også er markup. La oss ta noen eksempler:
<!-- Kommentar #1 --> <!-- Kommentar ---- #2 --> <!-- Kommentar -- #3 --> <!Kommentar -- #4 -->
Eksempel #1 er vår standardmal. Kommentaren er valid i henhold til HTML 4.01s spesifikasjon og i SGML-format. Kommentar #2 er i SGML format, men mot HTML 4.01 anbefalinger om doble bindestreker inne i kommentaren. Dette eksempelet blir dog valid ettersom vi har fire par bindestreker inne innenfor kommentardeklerasjonen. HTML 4.01 sier SHOULD, ikke MUST om doble bindestreker. De første to starter den første kommentaren ("Kommentar"), de første to av den fire-doble-bindestreken avslutter første kommentar, de siste to i firer-streken starter andre kommentar i kommentarelementet ("#2"), mens de siste to bindestrekene avslutter andre kommentar. Til slutt sitter vi da igjen med et kommentarelement med to kommentarer. I eksempel #3 har vi kun to bindestreker mellom "Kommentar" og "#3". Dette medfører at vi avslutter første kommentar, mens "#3" blir ugyldig tekst liggende inne i kommentarelementet. De neste to bindestrekene blir da også starten på andre kommentarelement som igjen etterfølges av avsluttende tegn for kommentardeklerasjonen. Dette bryter dermed med HTML 4.01s anbefaling om "markup close delimiter" inne i kommentarer, samt med SGMLs syntaks om at antall bindestrek skal være produkt av doble par. Eksempel #4 inneholder tekst før kommentarer noen som fører til en ugyldig SGML-syntaks, samt et brudd med HTML 4.01 anbefalinger om ingen "white space" mellom kommentardeklerasjon og kommentarstart.
Anbefalingen til slutt er derfor enkel. Skal du skrive kommentarer i kildekoden, bruk formatet i eksempel #1, samt unngå all bruk av doble bindestreker i kommentaren. Grunnet store problemer med tolkning av SGML-kommentarer har også disse blitt fjernet fra WASPs kjente ACID2-test. De var tidligere en del av testen for å se etter nettleserens støtte for SGML-formaterte kommentarer.