1. InledningPå den här sidan visar jag hur man använder Xml för att skapa ett enkelt dokument. Jag berättar också hur man gör en grundläggande DTD för sin kod. I mitt exempel vill jag använda Xml för att beskriva innehållet på en musik-CD. Jag har valt att strukturera en skivas innehåll, José González "Veneer", som blev mycket uppmärksammad under 2003 och bl.a vann flera priser. Genom att välja en CD-skiva blir det förhoppningsvis ganska lätt att förstå hur Xml fungerar. Att strukturera en CD, video eller DVD är också ett ganska ofta förekommande exempel i böcker och på sajter om Xml. 2. Skapa en dokumentstrukturInnan man börjar koda i Xml är det viktigt att ha klart för sig vad det är man vill åstadkomma. God planering är nödvändig för att skriva en välformad kod. Det inledande planeringsarbetet går därför ut på att skapa en struktur över innehållet. Ibland kallas det därför att skapa en innehållsstruktur. Det jag först måste göra är alltså att ta reda på vilket innehåll jag vill strukturera. Efter en stunds fundering kommer jag fram till följande: först och främst är det en viss slags CD i en viss genre, av en viss artist, utgiven ett visst år på ett visst bolag, med en viss titel. På skivan finns också olika låtar, som har ett visst namn och en viss längd. Längden uttrycks i minuter och sekunder. Jag nöjer mig med dessa kategorier, som här är markerade med fet stil. Ytterligare kategorier hade självklart gått att ta med, som kompositör, textförfattare, producent, osv. Jag hade också kunnat dela in artistens namn i ett för- och ett efternamn. även låtarnas texter hade givetvis kunnat ingå i dokumentstrukturen.
Alla dessa kategorier ritas sedan upp i ett schema, där kategoriernas relationer till varandra, framgår. Här har jag gjort ett sådant, som du ser i bilden. Alla dessa kategorier eller noder skall sedan ingå i Xml-koden i form av olika element. Dessa element finns inte ännu, men kommer att se ut så här: <artist>José González</artist> Här är "artist" kategorin, <artist> startelementet, "José González" elementinnehållet och </artist> slutelementet. Ibland kallas dock hela uttrycket för element och <artist> och </artist> start- respektive sluttaggar. Självklart kan vi inte använda oss av Html-koden för tecknen é och á när vi senare kodar i Xml. I stället måste vi då använda teckenkoden i ISO-8859-1, där é översätts med é och á med á. Du hittar teckenkoderna på en särskild sida. Gå dit > Elementinnehållet är alltså "José González". Detta innehåll kallas ibland även för "Parsed Character Data" eller PCDATA. Detta blir viktigt i avsnittet om hur man skapar en DTD för de element man använder. Om man nu "översätter" strukturen ovan med element, kommer man att få följande kod - och här har jag ersatt alla svenska tecken eftersom dessa inte fungerar i elementnamnen: <music_cd>
<namn>Remain</namn>
<namn>Lovestain</namn>
(...och så vidare...) Som du ser har jag här använt elementnamn med ungefär samma tecken som i den dokumentstruktur jag tidigare hade. Med en Xml-deklaration kommer koden att utgöra ett välutformat Xml-dokument. I sista stycket kommer jag att berätta lite mer om hur webbläsaren tolkar koden. 3. Skapa en egen DTDEftersom jag tillverkat egna element som inte ingår i någon känd DTD vet webbläsaren inte hur koden skall tolkas. Därför måste jag nu tillverka en egen DTD som berättar hur elementen får skrivas. En DTD kan antingen vara intern eller extern. En intern DTD kan endast utnyttjas av det dokument i vilket den förekommer. En extern DTD kan däremot användas av flera olika dokument. De båda skiljer sig inte mycket åt när man skriver koden - förutom då att den interna DTD:n ligger inbäddad i dokumentet och den externa utgör en egen fil. Så här ser båda sätten ut: intern DTD: <!DOCTYPE rotelementet [ DTD-koden ]> extern DTD: <!DOCTYPE rotelementet SYSTEM (DTD-filen.dtd)> Jag kommer att berätta mer om externa DTD-filer på senare sidor i den här sektionen. Nu tänker jag endast gå in på tillverkningen av en intern DTD. Först och främst gäller då att man måste göra ett tillägg till Xml-deklarationen: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> Uttrycket standalone anger att dokumentet inte är beroende av någon extern DTD. Efter denna rad följer: <!DOCTYPE musik_cd [
I DOCTYPE-elementet, som inleder deklarationen, anger jag att musik_cd är rotelementet. Sedan följer en klammer och det är denna som startar själva definitionen av de olika elementen. I ELEMENT-elementet definierar jag vilka element som är direkt underordnade rotelementet. Stjärnan talar om att elementet förekommer flera gånger. Jag kommer att berätta mer om sådana specialtecken på sidan om attribut och specialkommandon. På samma sätt måste sedan alla underliggande element definieras: <!ELEMENT genre (#PCDATA)>
Genom att skriva #PCDATA berättar vi att elementet inte innehåller några underordnade element, utan bara textinnehåll. Ett textinnehåll är t.ex artistens namn eller skivans titel. Som du ser definieras först alla element på en viss nivå i strukturen. Därefter definieras alla element under respektive element, osv. Det bteyder att "namn" och "längd" definieras först ihop med "låtar", eftersom de är direkt underordnade detta element. Hela DTD:n avslutas sedan med: ]> som framgår av koden nedan. Så här ser hela DTD:n alltså ut: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Koden börjar sedan skrivas på raden efter avslutningen. Elementen i koden måste komma i den ordning man skrivit dem i DTD:n. Man måste alltså skriva "genre" före "artist", annars kommer man att få upp ett felmeddelande. 4. Öppna Xml-filenJag har nu skapat en fil med både DTD:n och Xml-koden. Jag har sparat filen med namnet exempel_1.xml. För att du skall se hur den fullständiga koden ser ut har jag även skapat en Html-fil med all kod utskriven: Titta på koden >
Bilden visar hur koden ser ut. Vad är det man ser? Webbläsaren skapar ingen vanlig webbsida utan visar helt enkelt dokumentstrukturen så som den står enligt Xml-koden. Minustecken (inringat med rött) kan användas för att fälla ihop strukturen. På motsvarande sätt kan man använda plustecken till att fälla ut underliggande innehåll. Observera att DTD:n inte syns utan endast visas om man väljer att visa dokumentets källkod (source). |