Standard Generalized Markup Language (ISO 8879). Trots sin ringa ålder (skapades bara 1986) har SGML blivit markeringsspråkens språk - ett "moderspråk". Det är ett metaspråk, som beskriver andra markeringsspråk. Språket är mycket omfattande. Just på grund av sin komplexitet används inte språket i sin helhet i någon större utsträckning. Det som skiljer detta språk från andra markeringsspråk är dess:
http://www.iso.ch/
"Gentle Introduction to SGML" http://www-tei.uic.edu/orgs/tei/sgml/teip3sg/
Plattformsoberoende: dokument markerade med detta språk är plattformsoberoende. De kan avläsas oberoende av vilken program- och hårdvara som används. De kan läsas av alla applikationer som är skapade för dess avläsning. De kan läsas både på en Mac och en PC.
Beskrivande (i motsats till verkställande) egenskaper: markeringar i SGML beskriver dokumentets olika delar, t ex stycke eller radbrytning. Det "säger" till dokumentets tolkare / avläsare (programvara) "Här börjar ett stycke", "Här slutar ett stycke", "Här finns en radbrytning". Det säger inte "Visa mitt innehåll på det eller det sättet" eller "Gör det eller det med mitt innehåll". Det enda avläsaren vet är att innehållet mellan den markering som säger "Här börjar ett stycke" och den som säger "Här slutar ett stycke" är ett stycke. Sedan är det helt upp till avläsaren hur den visar innehållet. Den brukar visa det på det sätt den är inprogrammerad. Men avläsarens inprogrammering har inget med SGML att göra.
Dokumenttyp-konceptet: i likhet med Office-dokument som kan vara av olika typer, t ex:
Textdokument (Word), kalkyl (Excel) eller databas (Access), kan SGML-dokument vara av olika typer, t ex HTML eller XML (Extensible Markup Language).
Varje dokument innehåller information som är specifik för sin typ. Acces-dokument kan innehålla element, t ex fält som varken Word- eller Excel-dokument innehåller. Word-dokument å andra sidan kan innehålla element, t ex tabeller, som inte finns i Access.
Skillnaden mellan de olika typerna av dokument ligger i variationen av element som förekommer i dem (element-förekomst). Element som finns i en dokumenttyp behöver inte finnas i en annan.
Dokument av samma typ markeras på ett och samma sätt. Man skulle kunna säga att dokument av samma typ använder samma "markeringsteckentabell" för elementstrukturering.
Office-dokument kan vara av olika typer, t ex
Word-dokument
Access-dokument
Tidningar (en dokumenttyp) kan vara av olika typer:
Morgontidning
Kvällstidning
eller
Dagstidning
Månadstidning
SGML-dokument kan vara av olika typer, t ex:
HTML-dokument
XML-dokument
Exempel:
Tidningsdokument av typen månadsmagasin - InternetWorld
Tidningsdokument av typen dagstidning - Svenska Dagbladet
Officedokument av typen ordbehandling - Word-dokument
Officedokument av typen kalkylblad - Excel-dokument
SGML-dokument av typen XML - XML-dokument
SGML-dokument av typen HTML - HTML-dokument
SGML-dokument av typen HTML, version HTML4 - HTML4-dokument
Ett annat kännetecken för SGML-dokument är dess logiska och hierarkiska struktur. En hierarkisk struktur innebär att dokumenten är uppbyggda enligt familjeträd-principen. Det fungerar precis på samma sätt som familjeträd i vanliga familjer. På toppen av hierarkin står familjens grundare, en ancestor, en patriark, från vilken alla andra familjemedlemmar härstammar. Grundarens namn är även familjens namn.
Grundaren av denna familj är Jan Dal. Grundare: Jan Dal Familjen ärver sin grundares namn. Alla barn och deras barn härstammar från sin ancestor Jan Dal. |
Familjen Dals familjeträd |
Grundaren av denna familj är ancestorn Bok. Grundare: Bok Även här ärver familjen sin grundares namn. Alla barn och deras barn härstammar från sin ancestor Bok. |
Familjen Boks familjeträd |
Om vi översätter ovannämnda familjer till dokumenttyper och familjemedlemmar till element kan vi säga följande:
Varje dokumenttyp har sin ancestor / grundare. Denne kallas för rotelement. Alla andra familjemedlemmar (element) härstammar från rotelementet. Rotelementet ger namn åt hela familjen, i detta fall typen av dokument. Dokument av samma typ har samma rotelement.
Det måste finnas ett och bara ett rotelement. I SGML-dokument av typen bok är rotelementet bok. Just det faktum att dokumenttypen och rotelementet har samma namn ställer ibland till missförstånd. Man blandar ihop de båda och känner sig sedan villrådig. Skulle det hända tänk på familjen Dal och på att Jan Dal gav namn åt hela släkten.
Rotelement: Ett element som grundar en speciell typ av dokument och därmed ger namn åt dokument-typen. Alla andra element härstammar från rotelementet.
Dokumenttyp: eva
Rotelement: eva
I SGML-dokument av typen HTML är rotelementet HTML.
I SGML-dokument av typen bok är rotelementet bok.
Det är ytterst viktigt att förstå i vilken följd elementen får placeras i SGML-dokument då de följer ett i förväg bestämt mönster. Samma regler gäller för alla SGML-dokument.
Då rotelementet och dess avkomma gemensamt bildar familjeträdet i en viss typ av dokument samtidigt som SGML är ett beskrivande språk, ger elementen enbart struktur åt dokumentet. Därför kallas elementen för strukturella element, dvs element vars förekomst är fastställt av familjeträd: t ex kapitel som måste följas av stycke.
"Element vars förekomst är fastställt av familjeträdet" innebär att elementen kommer i en bestämd följd som inte kan ändras. Följden bestäms av dess placering (förekomst) i familjeträdet.
Sven och Eva är barn till Jan Dal. Därför placeras (förekommer) de direkt under Jan i familjeträdet. Ulf är barnbarn till Jan och barn till Sven. Därför placeras (förekommer) han direkt under Sven i familjeträdet. Skulle Sven ha placerats efter Ulf skulle familjemedlemmars födslar (förekomst) inte överensstämma med verkligheten. Därför kan inte ett sådant familjeträd vara familjen Dals familjeträd, utan (kanske) en annan familjs.
Elementet kapitel är barn till bok och förälder till stycke. Därför kan inte stycke förekomma någon annanstans i dokumentet utan enbart efter kapitel.
Elementens placering (följd) i dokumentet kallas för elementets förekomst.
Elementens förekomst fastställs av familjeträdet. I exemplet är stycke barn till kapitel, därför måste det följa sin förälder. En annan följd skulle orsaka syntaxfel i just denna typ av dokument. Om dessutom familjeträdet inte följs i t ex dokumentet av typen bok kan det aktuella dokumentet inte vara av typen bok.
Rätt: kapitel stycke
Fel: stycke kapitel
Skillnaden mellan de lika dokumenttyperna ligger i elementförekomsten. Dokument av typen bok innehåller, förutom rotelementet, även elementen kapitel och stycke. Dokument av typen tidning kan, förutom rotelementet, även innehålla elementen kapitel och stycke. Men det kan också innehålla elementen rubrik, kolumn och tabell. |
|
| bok | tidning | |
|---|---|---|
Då elementförekomsten skiljer sig i de olika typerna av dokument skiljer sig även antalet märkord i respektive dokumenttyp. Självfallet kan de element som förekommer i alla dokumenttyper markeras på samma sätt men, i dokument av typen tidning måste man kanske, förutom själva elementen, lägga till märkord för rubrik, kolumn och tabell. Även om skillnaderna mellan dokumenttyper kan vara minimala måste man skriva ner /sammanställa markerings- och andra regler för varje typ, eller som det kallas, definiera dokumenttypen. |
<bok> <kapitel> </bok> |
<tidning> <kapitel> </tidning> |
Märkord och andra markeringsregler som gäller för en specifik typ av dokument definieras i ett speciellt dokument som heter Dokumenttypsdefinition (Document Type Definition) eller DTD.
DTD Document Type Definition: Gällande markeringsregler för en specifik typ av dokument.
Varje dokumenttyp har sin egen DTD. Där definierar man rotelementet och dess avkomma samt dess placering (förekomst) i familjeträdet. I DTDn specificerar man också elementernas egenskaper (attribut) samt hur och med vilka märkord. elementen ska markeras.
DTDn sparas separt som en vanlig textfil. Med hjälp av en dokumenttypds-deklartion som skrivs in i dokumentet innehållande DTDns adress länkas de båda dokumenten samman. I visa markeringsspråk, t ex XML, finns det inga krav på DTD.
"DTD" för konstruktioner av typen hus:
rotelement: hus
typ (attribut): slott, stuga
barnelement: tak, tegel, fönster, vägg, dörr, skorsten
barnbarnelement: (ex dörr) handtag, gångjärn
attribut: (ex dörr) plast, trä, vit, stor, liten
förekomst: skorsten måste finnas på taket, fönster måste finnas i väggen.
Man kan skapa olika versioner av samma dokumenttyp. Varje ny version måste då definieras för sig själv i form av egen DTD.
Det finns till exempel olika versioner av HTML. Man brukar då säga:
SGML-dokument av typen HTML, version HTML 4.01
SGML-dokument av typen HTML, version HTML 3.2
SGML-dokument av typen HTML, version HTML 2.0
Även inom ramar av samma version kan man skapa olika "smaker" (flavors). HTML 4.0 är ett exempel på detta.
Språkversionen publicerades i tre "smaker" och varsin DTD. Skillnaden mellan versionerna (och smakerna) ligger i det antal element som de får innehålla, m.a.o. i elementförekomsten.
SGML-dokument av typen HTML, versionen HTML 4.0, smaken Strict
SGML-dokument av typen HTML, versionen HTML 4.0, smaken Transitional
SGML-dokument av typen HTML, versionen HTML 4.0, smaken Frameset
Alla HTML 4.0-dokument bygger på den strikta smaken. De andra smakerna ser dock friare på reglerna. Ett giltigt HTML 4.0-dokument, smaken Strict, är även giltigt HTML 4.0-dokument, smaken Transitional.
Elementen markeras med märkord (tags). En del kallar dem även för etiketter. Vanligtvis kommer de i par. Det första markordet markerar början på ett element och det andra slutet.
Markorden skapas med hjälp av vinkelparenteser som kallas för avgränsare och mellan avgränsarna skriver man elementets namn.
Märkord (markord, taggar), markup: Avgränsningstecken som läggs till i data (text) i ett dokument för att representera dess struktur.
<element> - markerar elementets början
</element> - markerar elementets slut
t ex
<p> - i HTML markerar detta märkord början på ett stycke
</p> - medan detta märkord markerar slutet på ett stycke
<element></elementets innehåll som ska markeraselement>
<p>HTML-styckets innehåll</p>
Elementen kan förekomma i varandra. Ett föräldralement kan ju innehålla sitt barn. Det är ytterst viktigt, speciellt i XML, att sådana förekomster markeras korrekt då elementen inte får överlappa varandra. Det element som börjar strängen måste även avsluta den. Det första elementet i följden avslutas sist och det andra elementet i följden avslutas näst sist osv.
<element1><element2><element3>...
</element3></element2></element1>
t ex
<bok><kapitel><stycke>...
</stycke></kapitel></bok>
Vissa markeringsspråk, t ex XML, skiljer dessutom på stora och små bokstäver. I dessa språk är <ELEMENT> ..... </element> inte start- och sluttagg av samma element.
| HTML | XHTML | XML | |||
|---|---|---|---|---|---|
| Stora, små och även blandning av de båda tillåts | Endast små bokstäver tillåts | Antingen stora eller små bokstäver | |||
| starttagg <table> <TABLE> <TaBle> |
sluttag </TABLE> </table> </tAbLE> |
starttagg <table> |
sluttag </table> |
starttagg <table> <TABLE> |
sluttag </table> </TABLE> |
Det har blivit allmän praxis att säga "tagg" när man egentligen refererar till "element" och tror att de två begreppen är en och samma sak. (Det motsatta händer väldigt sällan.) Men tagg och element är inte samma sak.
Ett element är dokumentets strukturella komponent som består av uppmärkningen och innehållet medan en tagg markerar början och slut på ett element.
| tagg | element (taggarnas innehåll) | tagg |
|---|---|---|
| <p> | Ett element är dokumentets strukturella komponent som består av uppmärkningen och innehållet medan en tagg markerar början och slut på ett element. | </p> |
Även om man strukturerar flera dokument av samma typ, t ex SGML-dokument av typen bok, enligt boks DTD, kan de se olika ut. Det beror på att dokumenten till exempel kan innehålla olika antal kapitel och/eller stycken - för att inte nämna själva textmassan.
Även i ett befintligt dokument kan olika ändringar förekomma, man lägger t ex till några stycken eller tar bort andra. En sådan uppdatering gör att man skapar ett helt nytt dokument eller, som det kallas, en ny dokumentinstans.
Dokumentinstans: Förekomst av individuella dokument inom en specifik dokumenttyp.
Definitioner av begreppen DTD, märkord och dokument-instans kräver ett tillägg till definitionen av strukturella element.
Strukturella element: Komponenter av en hierarkisk struktur som definieras i DTDn och som identifieras i dokument-instansen genom märkord.
| <bok> <rubrik>...</rubrik> <stycke>....</stycke> </bok> |
<bok> <stycke>...</stycke> <rubrik>...</rubrik> </bok> |