Referensbok

SGML © Eva von Pepel

* Referensböcker | SGML-intro | DTD | HTML 3.2-träd

SGML-introduktion

Inledning

När vi strukturerar våra dokument i en vanlig ordbehandlare använder vi oss av t ex vagnretur för att åtskilja dokumentets olika delar (komponenter/element) från varandra, som stycken eller tabeller. Då denna metod är plattformsberoende (alla känner ju till problem med filöverföringen mellan olika system) är den inte lämplig för strukturering av dokument avsedda för WWW vars grundidé var just skapandet av plattformsoberoende dokument, dvs dokument till vilka alla oberoende av program- eller hårdvara kan ha tillgång. För att möta detta kriterium behövdes det ett annat system för dokumentstrukturering. På så sätt kom markeringsspråket HTML till.

HTML (HyperText Markup Language) är ett utav markeringsspråken som används för att strukturera dokument avsedda för WWW. Markeringsspråk består av olika textmarkeringar som används i dokumentstruktureringen. Dessa textmarkeringar är överenskomna markord som markerar dokumentens olika delar (element), ett markerar början av elementet och ett annat slutet samt beskriver att innehållet mellan dem består av något, t ex ett stycke. Markorden läses senare av en www-klient och elementet de innehåller struktureras enligt beskrivningen. Själva presentationen är dock upp till en www-klient.

För att kunna veta vad man har kommit överens om, dvs vilka regler som gäller i ett specifikt markeringsspråk behövs det en standard som beskriver detta språk. En sådan standard är SGML.

SGML (Standard Generalized Markup Language) är en internationell standard för att definiera anordning- och systemoberoende metoder för presentationer av elektroniska texter. Det är ett metaspråk som på ett formellt sätt beskriver ett markeringsspråk, dvs vilka markeringar är tillåtna, vad de betyder och hur de ska åtskiljas från vanlig text. SGML är en samling markeringsregler som ska tillämpas i ett markeringsspråk.

HTML dokument är SGML dokument. Det bästa sättet att förstå hur ett HTML dokument är strukturerat är att titta närmare på strukturen av SGML dokument.

De specifika SGML egenskaperna är också de egenskaper som åtskiljer detta språk från andra markeringsspråk:

SGML är ett beskrivande språk som bygger på en logisk och hierarkisk uppbyggnad av dokument, dvs text. Beskrivande språk tar inte hänsyn till vad de olika komponenterna (elementen) som bygger upp dokumentets logiska struktur är och hur det ska presenteras utan:

En sådan struktur kallas hierarkisk struktur och dokumentets olika delar kallas strukturella element. Den hierarkiska strukturen av dokumentet bygger på familjeträdets hierarkiska strukturs regler. Dokumentens familjeträd är uppbyggt precis på samma sätt som familjeträdet i våra egna familjer eller dynastier. Överst "härskar" hierarkins grundare, en stamfader därifrån allt annat härstammar. Så som det kan finnas olika dynastier (Karlsson, Svensson, Ming) kan det också finnas olika "SGML-dynastier" - dokumenttyper.

Dokumenttyp konceptet

SGML-dokument kan vara av olika typer. En sådan typ är HTML (dynasti Karlsson), en annan typ är XML (Extensible Markup Language - ett annat markeringsspråk) (Dynasti Svensson). En tredje typ, BOK (dynasti Ming), kan vi skapa själva

Då HTML-dokument är en typ av SGML-dokument kallas de SGML-dokument av typ HTML. Om vi jämför SGML med tryckta saker skulle då tidningar kunna vara HTML - en typ av tryckta saker och böcker kunde man jämföra med XML - an annan typ av tryckta saker.

Ett HTML-dokument = SGML-dokument av typ HTML
En tidining = Tryckta saker av typ Tidning

HTML som dokumenttyp

HTML-dokument är alltså en typ av SGML-dokument. Då HTML är ett "levande språk" utvecklas det ständigt. Element, attribut och värden skrivs ner, försvinner eller läggs till. Idag finns ett antal olika versioner av språket, t ex HTML 3.2 eller HTML 4.0. Skillnaden mellan de olika versionerna är antal tillåtna element, attribut och värden.

Om vi vidare delar upp tidningar i morgon- och kvällstidningar skulle då morgontidningar vara en version av tidningstyp (t ex HTML 3.2) medan kvällstidningar en annan version av tidningstyp (t ex HTML 4.0).

Tryckta sakerSGML-dokument
Typ av tryckta saker: tidningar
Tidningsversion: morgontidning
Tidningsversion: kvällstidning
Typ av SGML-dokument: HTML
HTML-version: HTML 3.2
HTML-version: HTML 4.0

Ett HTML 3.2-dokument = SGML-dokument av typ HTML version HTML 3.2

Oberoende på antal medlemmar i varje dynasti (antal stödda element eller attribut i en specifik dokumenttyp och version) bygger alla SGML-dokument på samma princip som alla andra hierarkiska strukturer, inklusive de mänskliga familjerna, nämligen familjeträdet. Låt oss titta på ett sådant familjeträd, nämligen dynastins Karlsson.

Familjeträdet

Varje dynasti härstammar från en individ - stamfadern. Grundaren av dynastin var en gång i tiden en Jan Karlsson. Som brukligt var det han som gav namn åt hela dynastin. Därför heter dynastin Karlsson.

exempel på dynastin Jan hade två barn: Fredrik och Nicklas som i sin tur hade egna barn. Som barn till Jan har både Nicklas och Fredrik bestämda platser i familjeträdet och får inte befinna sig någon annanstans än just där de befinner sig. Hade Fredrik bytt plats med Anna skulle inte familjeträdet överensstämma med verkligheten och därför kan inte trädet visa Karlssons dynasti utan en annan, kanske Svenssons.

SGML-dokument är uppbyggda på precis samma sätt men terminologin är lite annorlunda. Ordet dynasti byts ut mot dokumenttyp och familjemedlem mot elementtyp men familjeförhållandet är detsamma.

Så som dynastins Karsson stamfadern hette Karlsson hetter även stamfadern till dokument av typ HTML - HTML därför att elementet HTML är familjens grundare från vilket alla andra element (familjemedlemmar) härstammar. Elementets HTML familjeträd kan se ut på följande sätt:

dokumenttyp exempel Stamfadern är alltså elementet HTML. Elementet HTML har två barn: elementen HEAD och BODY. Elementet HEAD har ett antal barn, bl.a. elementet TITLE och elementet META. Även elementet BODY har ett antal barn, bl.a. elementet P (stycke). Vidare kan elementet P ha några barn, t ex elementet IMG (bild).

Om vi nu ska skapa en fiktiv dokumenttyp som vi kallar BOK kommer även stamfadern heta BOK och familjeträdet kan se ut enligt följande:

dokumenttyp exempel I dokument av typ BOK heter stamfadern BOK därifrån allt annat härstammar. BOK kan ha ett eller flera barn, t ex tvillingar KAPITEL vars barn kan vara AVSNITT vars barn kan vara STYCKE vars barn kan vara RAD vars barn kan vara ORD vars barn kan vara TECKEN. Då TECKEN är den minsta möjliga enheten kan det inte innehålla något och då tar den grenen av familjeträdet slut.

Hierarkins uppbyggnad och arv

Precis som familjemedlemmar ur dynastin Karlsson har sina bestämda platser i hierarkin har även medlemmar (elementtyp) ur dokumenttypen BOK och HTML sina bestämda platser. Föräldrar är högre upp än barn, barn är högre upp än barnbarn osv. Ett barn kan inte finnas högre upp i hierarkin än sina föräldrar. Om medlemmar byter plats med varandra överenstämmer inte familjeträdet och då kan inte dokumenttypen kallas för BOK eller HTML version HTML 3.2.

Medlemmar ur en SGML familj (dokumenttyp) heter elementtyp. Elementtyper identifieras genom att namnge dem. Varje typ av element har sitt eget namn, t ex element av typ KAPITEL eller IMG.

Struktureringen av HTML dokument bygger på de olika medlemmarnas (elementtypers) hierarkiska relation till varandra och kallas för elementens förekomst. Just p.g.a. de hierarkiska relationerna kan inte elementen förekomma hur som helst i dokumentet utan måste följa familjeträdet. Även utan speciella kunskaper är det lätt att gissa sig fram till elementens förekomst. HTML är ju ett logiskt språk. Det är uppenbart att t ex en bokstav (FONT) kan inte innehålla en tabell medan en tabell kan innehålla en font.

I likhet med vanliga familjer där barn ärver föräldrarnas egenskaper, t ex ögonfärg, ärver även barn i SGML familjer föräldrarnas egenskaper t ex storlek eller färg på fonter. Genom att låta barn ärva sina föräldrar räcker det att en viss egenskap, t ex FÄRG tilldelas bara föräldern. Därför är det viktigt att elementen följer familjeträdet.

Struktur av ett SGML-dokument

Ett SGML-dokument består också av två delar:

  1. prolog bestående av:
    • · en SGML deklaration innehållande basfakta om själva språkets uppbyggnad - lexikon (DNA)
    • · en Dokumenttyp Definition (DTD) som definierar denna specifika typ av dokument - grammatik (familjeregler)
  2. den färdiga produkten - - själva dokumentet (en individ som tillhör familjen)

SGML-deklaration

Alla SGML dokument börjar med en SGML deklaration. Informationen som denna deklaration innehåller används av SGML processorer och är osynlig/oåtkomlig för en vanlig användare (under förutsättning att han/hon inte har någon avsikt att skapa en egen dokumenttyp).

Här deklareras grundfakta som t ex vilken teckentabell används, vilka tecken kan användas för att kunna referera till andra objekt, vilka tecken används som avgränsare < och > delimiters så att ett markord skapas, längden på namn av de identifierade objekten osv.

SGML deklarationen består av sju delar:

  1. En beskrivande rubrik identifierar standarden av den SGML version som överensstämmer med dokument innehållande den aktuella SGML deklarationen. F.n. finns det bara en sådan standard ISO 8879:1986 - (International Organization for Standardization) standard nummer 8879 som publicerades 1986
    <!SGML "ISO 8879:1986"
  2. CHARSET - 2 CHARSET (character set) - dokumentets teckentabell som definierar vilka tecken kan användas för att markera texten och vad dessa tecken betyder. Till skillnad från ett datasystem som har bara en teckentabell har SGML dokument tre.
    1. SYNTAX (syntax-reference character set)
    2. BASET (base character set)
    3. DESCSET (described character set)
  3. CAPACITY (capacity set) - kapacitet - deklarerar hur stort antal av något någonting annat får innehålla, t ex ELEMCAP deklarerar hur många element ett SGML dokument får innehålla, NAMELEN deklarerar hur många tecken får finnas i namnet på ett identifierat objekt
  4. SCOPE (concrete syntax scope) - bestämmer om den konkreta syntaxen definierar hela dokumentet (SCOPE DOCUMENT) eller bara dokumentets instans (SCOPE INSTANCE)
  5. SYNTAX (concrete syntax) - den formella syntaxen deklareras oftast i form av en referens till ISO standarden
  6. FEATURES (feature use) - här deklareras olika optionella egenskaper, t ex om det finns ett stöd för valfria markord
  7. APPINFO (application-specific information) - information som deklareras här görs tillgänglig för den applikation som tar emot "output" från en SGML-parser men används inte av parsern själv

Dokumenttyp-definition (DTD)

Varje dokumenttyp och dess versioner, eller nivåer som de också heter, har sina egna regler. Dessa regler beskriver vilka element, attribut och värden är tillåtna, deras förekomst, dvs om ett visst element får innehålla ett annat och i så fall vilket samt hur de olika elementen markeras. En sådan regelsamling kallas för DTD - Document Type Definition. DTD definierar ett språk eller dess nivå, dvs beskriver språkets grammatik.

I DTD:n identifieras och namnges varje elementtyp, dess attribut och värden. Samma namn återfinns senare i dokumentets instans i form av markord. Efter att elementtypen har identifierats deklarerar man markeringsregler för denna typ och fastställer hur elementen av denna typ relaterar till andra elementtyper - var någonstans i det hierarkiska trädet elementet får befinna sig, om elementet är en förälder eller ett barn eller kanske bara syskon till något annat element - dvs elementens förekomst.

I dynastier sköter naturen de olika familjeförhållanderna. I SGML tar man logiken till hjälp och bestämmer själv hur de olika elementen relaterar till varandra. En sådan hierarkisk placering är nödvändig för att kunna fastställa om elementet i fråga kan innehålla andra element och i så fall vilka. Följande frågor måste besvaras: kan eller måste STYCKE innehålla RAD, räcker det med ORD för att STYCKE ska vara STYCKE, kan ORD innehålla RAD. Hur många RADer får STYCKE innehålla, osv.

För att kunna åtskilja mellan de olika versionerna och för att kunna tala om för en validator enligt vilka regler dokumentet (dokument instans) ska testas deklarerar man i sina dokument vilken nivå av språket som användes vid struktureringen så att dokumentet kan testas enligt de rätta reglerna - DTD:n. DTD definierar med andra ord den typ av dokument mot vilken dokument instans ska valideras.

Denna deklaration kallas för Dokumenttyp deklaration och skrivs på den absolut första raden av varje dokument . Om du till exempel strukturerar dina dokument enligt HTML 4.0 skriver du följande Dokumenttyp deklaration:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">

DTD:n består av en mängd deklarationer om vilka kan du läsa i dokumentet SGML-DTD.

Dokument instans

Stamfadern i dokument av typ HTML är elementet HTML. Från detta element alla andra element härstammar. Innehåll av ett HTML-dokument är innehåll av elementet HTML. Ett HTML-dokument består av ett enda element - elementet HTML.

Elementet HTML innehåller två andra element: HEAD och BODY. Dessa i sin tur kan innehålla en mängd olika element. Förutom det obligatoriska elementet TITLE som HEAD måste innehålla är alla andra element valfria, dvs de kan förekomma noll eller ett obegränsat antal gånger i oräkningsbart antal kombinationer. Elementen kan innehålla data som även den är specifik för varje element (t ex text i varje stycke är unik). Det gör att varje enskilt dokument är unikt och kallas dokument instans.

Till exempel alla dokument av typ HTML version HTML 3.2 struktureras enligt samma regler - de regler som deklareras i definitionen för denna typ av dokument. Dokumenten är ändå unika eftersom innehållet är unikt.

Dokument instans är HTML elementets innehåll: text, markeringar och olika referenser. Varje dokument instans innehåller en referens till den DTD som ska användas för att tolka den.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">

dokumentinstans exempel

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">

dokumentinstans exempel

Båda dokumenten är av samma typ då de struktureras enligt samma regler. Ändå är de olika. Därför heter vart och ett en instans av samma dokumenttyp.

Mer info finns på: SGML

Upp | Referensböcker

Valid HTML 4.0 dok. http://vonpepel.com/ref/ - Senaste uppdatering 7 maj 1998