1. XML – før vi starter
1.1 XML – eXtensible Markup Language
XML præsenteres generelt som et opmærkningssprog på lige fod med HTML. Der er altså i begge tilfælde tale om en form for sprog, de hedder begge Markup Language, og de bruger begge tags til opmærkning. Den samlede mængde af tags kaldes traditionelt for et vokabular.
I XML udarbejder du dit eget vokabular. I HTML er der et foruddefineret vokabular, det vil sige en mængde gyldige, navngivede tags, som angiver hvordan data i et HTML-dokument skal præsenteres. Derfor vil man også møde de samme tags i stort set alle HTML-dokumenter. Formålet med et prædefineret vokabular er indlysende: en hvilken som helst browser kan genkende og fortolke de tags der forekommer i et dokument og vise indholdet i dokumentet i overensstemmelse hermed.
Et XML-vokabular udgøres af tags som er valgt og defineret med henblik på at fortælle noget om indholdet i data. Et XML-vokabular vil derfor være forskelligt fra det ene XML-dokument til det andet, afhængigt af de skiftende indhold som skal opmærkes. Der findes imidlertid regler for hvordan et XML-vokabular skal se ud, hvordan det skal struktureres. Disse regler – se dem i afsnit 3 i dette modul – udgør rygraden i XML.
XML er et sæt regler for opmærkning. Følger man disse regler bliver
resultatet et velformet XML-dokument som gør det muligt at bygge,
vedligeholde, udveksle og genbruge data. 1
XML er således et meta-sprog, det vil sige et sprog som kan bruges af alle der gerne vil opmærke en eller flere tekster i deres eget opmærkningssprog. Men hvis man vil gøre sig forståelig for omverden, for eksempel fordi man vil distribuere sine opmærkede dokumenter, er det vigtigt at man overholder den særlige syntaks der gælder for XML.
1.2 XML-dokumentet
En opmærket tekst gemmes som et XML-dokument. Et XML-dokument indeholder strukturerede data som i kraft af opmærkningen udgør struktureret information.
Vi vil typisk opbevare et XML-dokument som en fil, en fysisk enhed gemt i et lager på en computer, hvorfor vi giver vores fil efternavnet *.xml. Men vi vil også gerne have at dokumentet, den logiske enhed, informationsenheden, kan læses og genkendes som XML af en XML-processor. Det vil blandt meget andet sætte os i stand til at udveksle XML-dokumenter med andre brugere på tværs af computere, styresystemer og diverse andre teksnologiske restriktioner. For at opnå dette bliver nødt til at følge de regler som definerer hvad der gør strukturerede data til et velformet og gyldigt XML-dokument.
At et dokument er velformet vil sige, at det overholder de syntaksregler der er defineret for XML. At et dokument er gyldigt vil sige, at der foreligger en form for grammatik for opmærkningen og at den konkrete opmærkning er i overensstemmelse hermed.
En sådan grammatik, som definerer hvilke tags der må forekomme, hvor mange gange og i hvilken rækkefølge, kaldes her og i tilhørende moduler også for en informationsmodel 2. Den særlige syntaks som gælder for opbygning af informationsstrukturerne i et XML-dokument vil blive gennemgået i det følgende. Ønsker man at studere dette emne i en original version, anbefales det at starte på www.w3.org.
2. Opmærkning med XML
2.1 Forlægget
Det er som det første vigtig at være opmærksom på, at man ikke skal skrive sine XML-dokumenter i et tekstbehandlingsprogram. Et sådant program indsætter koder overalt i dokumentet, for linieskift, indrykning af afsnit og andet tilsvarende, og den XML-processor som skal tage hånd om dokumentet vil ikke acceptere disse koder. Det vil give en masse fejlmeddelelser. Brug derfor enten en almindelig teksteditor som for eksempel Notepad, eller find en XML-editor på nettet 3.
Udgangspunkt for gennemgangen af de basale byggeklodser i XML er følgende bogtitel fundet i Gentofte Kommunes online-katalog og her præsenteret i let bearbejdet version:
|
Skal denne information omsættes til et XML-dokument, kunne resultatet være som
vist nedenfor:
1: <?xml version="1.0" encoding="UTF-8" ?>
2: <bog>
3: <forfatter>
4: <fornavn>Anne Marie</fornavn>
5: <efternavn>Løn</efternavn>
6: </forfatter>
7: <titel>Sekstetten</titel>
8: <forlag sted="København">Gyldendal</forlag>
9: <udg>2008</udg>
10 <sidetal>550</sidetal>
11: <ISBN>
12: <heftet pris=" 299,00">978-87-02-07227-3</ heftet>
13: <indbundet pris="349,00">978-87-02-07365-2</ indbundet >
14: </ISBN>
15: <genre>roman</genre>
16:</bog>
fig. 2: sekstetten.xml
2.2 XML – sproget
Et XML-dokument består af en prolog og et antal elementer. I en prolog placerer man alle de instrukser som specificerer hvordan dokumentet skal behandles, for eksempel en grammatik for dokumentet. Her angiver man også om for eksempel et style-sheet skal inddrages i den aktuelle kørsel. Prologen er altid det første man møder i et XML-dokument.
2.2.1 Prologen
Som det allerførste i linie 1 i sekstetten.xml er der i prologen placeret en såkaldt deklaration:
1: <?xml version=”1.0” encoding=”UTF-8” ?>
Her defineres at der er tale om XML og at der anvendes version nummer 1.0. Endvidere defineres et tegnsæt og dermed mængden af tegn som processoren kan genkende4. I denne mængde indgår blandt andet de danske tegn æ, ø, å og det gør dermed tilværelsen lettere for alle dansktalende brugere af XML.
Anvendelsen og placeringen af spørgsmålstegn definerer en såkaldt processing instruction (PI), det vil sige at alle informationer her er systemorienterede, at de ikke indgår i selve XML-dokumentet og derfor ikke skal godkendes som velformede af XML-processoren.
Resten af dokumentet er bygget op ved brug af de grundlæggende og klassiske byggeklodser i XML, som introduceres nedenfor.
2.2.2 Elementer
Den grundlæggende byggeklods i XML er elementet. Et element består af en starttag, for eksempel <fornavn>, og en tilhørende sluttag, </fornavn> som vist i linie 4. En sluttag kender vi på tegnet ’/’. Mellem disse tags finder vi elementets indhold, forfatterens fornavn. Et element i XML udgøres altså af en starttag, af et indhold, og af en sluttag. Ud fra denne betragtning kaldes et element ofte for en container.
Et element skal have et navn. Det er dig som opmærker der bestemmer, hvad elementet skal hedde, og det er ikke mindst på dette punkt at XML adskiller sig fra HTML. Antallet af navngivne elementer udgør det samlede XML-vokabular.
I sekstetten.xml finder vi i linie 4 og 5 elementerne FORNAVN og EFTERNAVN 5:
4: <fornavn>Anne Marie</fornavn>
5: <efternavn>Løn</efternavn>
Elementer af denne art kalder vi for tekstelementer, da indholdet i elementet er ren tekst. Indholdet i FORNAVN er tekststrengen ’Anne Marie’, og tilsvarende er indholdet i elementet EFTERNAVN tekststrengen ’Løn’.
I linie 3 finder vi en starttag til elementet FORFATTER, den tilhørende sluttag står i linie 6. Lad os se lidt nærmere på indholdet i dette element:
3: <forfatter>
4: <fornavn>Anne Marie</fornavn>
5: <efternavn>Løn</efternavn>
6: </forfatter>
Elementet FORFATTER indeholder ikke tekst, men derimod tekstelementer, elementerne FORNAVN og EFTERNAVN. Vi siger at disse elementer er indlejret (eng. embedded) i elementet FORFATTER.
Et element der som indhold har et eller flere andre elementer, kalder vi for et strukturelement.
Strukturelementer skal, som navnet angiver, skabe struktur i informationsmængden. Strukturen kan vi i dette tilfælde definere som en relation, en relation mellem elementer og anførte informationer: at en forfatter er en person som har et fornavn og et efternavn. Eller, på en anden måde, at FORNAVN og EFTERNAVN er egenskaber ved en FORFATTER.
Der findes et yderligere og specielt strukturelement i dokumentet: elementet BOG. Ser vi nærmere efter, viser det sig at hele dokumentet, fra linie 2 til og med linie 16, er ét enkelt element, eller én enkelt container kaldet BOG. Dette element indeholder hele det samlede XML-dokument. Et element som indeholder det samlede XML-dokument, kalder vi for dokumentets rodelement.6 Vi skal senere se hvordan man kan udnyttet rodelementet til at få fat i hele indholdet i et XML-dokument.
Der findes en tredie form for element: det tomme element. Der er ikke noget tomt element i vores dokument. Vi skal senere se nogle tilfælde, hvor det er nyttigt at gøre brug af tomme elementer.
2.2.3 Attributter
Elementet FORLAG er udformet på en speciel måde. Der er tale om et tekstelement, en container, som vi bruger til at anføre navnet på det forlag som er ansvarlig for udgivelsen. Men i elementets starttag er der indbygget mere information, en angivelse af hvor det aktuelle forlag findes:
8: <forlag sted="København">Gyldendal </forlag>
Information angivet på denne måde i en starttag kalder vi for et attribut.
Et attribut er generelt en karakteristisk bestemmelse af en person eller et begreb. Et attribut i XML er supplerende information som karakteriserer det element som attributtet er knyttet til og eventuelle data indeholdt i elementet. Det er med andre ord data om data, det vi også kalder for metadata. I det aktuelle tilfælde, i linie 8, er det data som karakteriserer forlaget med hensyn til beliggenhed, at der er tale om forlaget Gyldendal i København, og ikke Gyldendal i Oslo.
Et attribut skal have et navn – navnet bestemmer du – og en tilhørende værdi. Det er værdien som specificerer data. Et forlag, alle forlag, er hjemmehørende et bestemt sted, og det konkrete forlag Gyldendal ligger i København:
sted=”København”
Navnet på dette attribut er ’sted ’og værdien knyttet hertil er ’København’. Læg mærke til at man anvender tegnet ’=’ til at forbinde navnet på et attribut med attributets værdi, og at værdien er anført i dobbelte citationstegn.
I sekstetten.xml er der ligeledes brugt attributter i elementerne HEFTET og INDBUNDET til at angive to forskellige priser (linie 12 g 13). Hvornår man skal placere sine informationer i et element og hvornår de hører hjemme som et eller flere attributter, er en afgørelse som træffes af den der opmærker og som ofte er genstand for megen diskussion. Man kan for eksempel diskutere, om SIDETAL (linie 10) skal være et selvstændigt element – kan man på et tidspunkt have glæde af denne oplysning som selvstændig enhed ? – eller om det burde optræde som attribut. Og hvor skulle det så placeres ?
De øvrige elementer i dokumentet giver ikke anledning til yderligere kommentarer. Alt i alt er der således
3 strukturelementer: BOG, FORFATTER og ISBN
9 tekstelementer: FORNAVN, EFTERNAVN, TITEL, FORLAG, UDG (=udgivelse), HEFTET, INDBUNDET, SIDETAL, GENRE
3 attributter: STED, HEFTET, INDBUNDET
3. Syntaks
For at kunne tale om et velformet XML-dokument, skal der gælde følgende:
- Et XML-dokument bør starte med en XML-deklaration, og denne skal i så fald være placeret som det allerførste i dokumentet
- Et XML-dokument skal indeholde ét element som indeholder samtlige andre elementer i dokumentet. Dette element kaldes for rodelementet
- Et element i XML skal have både en starttag og en sluttag
- Navnet på start- og sluttag skal matche fuldstændigt
- Navnet i en tag må ikke indeholde blanke tegn (mellemrum), men man kan i stedet bruge underscore
- Navnet på en tag må ikke begynde med et tal
- Værdierne anført i et attribut skal anføres i dobbelte citationstegn (jf ovenfor)
At et XML-dokument er velformet vil sige, at ovennævnte regler er overholdt. Der findes imidlertid en række typiske fejl, fejl som man måske ikke selv får øje på i første omgang, men som fremkommer som en fejlmeddelelse fra processoren når man vil have testet om et dokument er velformet. Regel nummer 4 er nok den regel man lettest kan komme til at forsynde sig imod. Men heldigvis er xml-processoren ekstremt sensitiv, og den vil give besked på skærmen når der er tale om en syntaksfejl og angive nummeret på linien i dokumentet hvor der er en fejl.
De følgende eksempler overholder ikke reglerne 4-6 (og er derfor forsynet med en *):
1: * <Fornavn> Niels </fornavn>
2: * <fornavn> Niels </navn>
3: * <titel> Sekstetten <titel>
4: * <ISBN nummer> 123456789 </ISBN_nummer>
5: * <6_række> 6 </6_række>
Der er tale om følgende fejl:
1: der er brugt ’F’ og ’f’ i navnet, de matcher ikke
2: <fornavn> matcher ikke med </navn>
3: tegnet ’/’ mangler i sluttag
4: der er en blank i starttag
5: navnet på en tag må ikke begynde med et tal
Udover syntaksfejl forekommer en anden type fejl, fejl som ikke fanges af processoren, fordi der er tale om logiske fejl. Logiske fejl hænger sammen med opmærkningen og opbygningen af dokumentet. Det kan for eksempel være, at man fejlagtigt anfører forfatterens fornavn som efternavn og efternavnet som fornavn. Den slags fejl skal fanges af den menneskelige processor.
4. Test dig selv
- I sekstetten.xml er GENRE et selvstændigt element med indholdet roman. Denne information kan også anføres som et attribut. Hvor vil du placere dette attribut ?
- Giv et forslag til opmærkning af følgende bogtitel:
Torgny Lindgren
Norrlands Akvavit
Samleren 2008
org.: Norrlands Akvavit 2007
overs.: Karsten Sand
Torgny Lindgren (f. 1938) er en af Sveriges helt store forfattere og desuden medlem af Det Svenske Akademi, som uddeler Nobelprisen i litteratur. Hans forfatterskab tæller titler som Batseba, I brogede Blades vand, Pölsa og Dorés Bibel.
416 sjæle! 416 sjæle frelste Olof Helmersson for 50 år siden i et dalstrøg i Västerbotten. Med livfulde ord og store armbevægelser, inderlighed og harmonikaspil ledte han sin flok. Helmersson var vækkelsens konge. Tanken om de 416 sjæle har boet i ham lige siden, også da han forlod de helliges forsamling og fik job på et sindsygehospital. Og tanken har plaget ham. Så meget, efterhånden, at der skal gøres op. Så den 83-årige Helmersson vender tilbage og slår sig ned hos Ivar og Asta og gør sig klar til at møde de vakte. Men det går ikke helt efter planden og Helmerssons hoved.




