XML   
 

Opp

 

 

 

 

 

 

 

 

 

Ein introduksjon til XML

Mange har lurt på kva XML eigentleg er, og kva det kan nyttast til. Som mange veit er det eit SGML-språk, og dei som har arbeida med HTML tidlegare vil lett sjå korleis strukturen er.


"XML er eit språk for å beskrive data, og å fokusere på kva data er. HTML er eit språk for å vise data, og å fokusere på korleis data ser ut." Dette kan me lese på w3schools.org, som er ein svært god kjelde når ein skal kome i gang med XML.

Kort fortalt, XML er eit språk for lagring av data. Det finns ingen vanlege taggar slik som i HTML, men ein må definere sine eigne taggar. Dette gjer ein ved hjelp av ein dokumenttypedefinisjon (DTD), eller eit XML skjema. XML gjer heller ingenting, det er der berre for å lagre data. Ein må skrive program for å hente ut og lagre informasjonen i XML-dokument, og XML er etterkvart vorte ein god måte å lagre data på ein kompatibel måte, slik at andre program kan få tilgang til dei dataene som ein lagrar.

Dei fleste programmeringsspråk har no støtte for XML, med eigne klassar for å ta seg av parsing av XML-filer, dette inkluderer kjende språk som PHP og Delphi. I denne guiden skal me ikkje ta for oss korleis ein nyttar XML i dei ulike programmeringsspråka, men korleis ein lager gode XML-dokument. Eg tek det for gitt at du har litt erfaring frå HTML, eller andre SGML-språk.

Struktur og syntaks

<?xml version="1.0" encoding="ISO-8859-1"?>
<notat>
  <til>Vegard til>
  <fra>Sverre fra>
  <emne>XML-guide emne>
  <tekst>Hadde du giddet å skrive en guide til XML? tekst>
notat>


Det er lett å lese ut ifrå dokumentet (trykk her for å la din browser formattere dokumentet) at dette er eit notat fra Sverre til Vegard, og inneheld eit emne og ei tekst. Dokumentet gjer likevel ingenting, men om ein lagrer dette som ei .xml-fil og viser det i IE, vil ein sjå korleis strukturen på eit XML-dokument er. Sidan ein definerer kva taggar ein skal nytta sjølv, er det lett å lese enkle XML-dokument sjølv.

Når det gjeld språkbruk, kallar me heile notatet (frå opning av til lukking med ) ein rotnode. Heile til-feltet er ein node, det same er fra-feltet, emne-feltet og tekst-feltet. Ein node kan ha undernodar, i dømet er til, fra, emne og tekst undernodar av notat. På same måte nyttar me omgrepet foreldre om noden som er eit hakk høgare opp i systemet, og born om ein node som er eit hakk lågare. Notat er foreldren til emne-feltet. Til, fra, emne og tekst er born av notat. Ein annan vanleg notasjon på nodar er element. Me har eit rotelement, underelement, osv.. Eit element kan innehalde ulike ting; t.d. tekst, underelement eller begge delar.

Viktig er det og at alle XML-taggar må lukkast, noko som er ulikt frå enkelte HTML-taggar. Dette er viktg; alle XML-taggar må lukkast. Unntaket er XML-deklarasjonen øverst, sidan dette ikkje er ein XML-tagg. Vidare er det viktig at taggane vert skrivne likt heile tida, det er forskjell på store og små bokstavar.

XML-taggar kan og hierarkistruktur, du kan underordne ein eller fleire verdiar under ein annan, slik som i dømet under. Rekkjefølgja på opning og lukking av taggar er svært viktig i dette dømet, dersom ein ikkje hadde lukka barnebarn1 før ein opna barnebarn2, ville barnebarn2 vore eit barn av barnebarn1. Eit element kan berre ha ein foreldrenode, men mange undernodar.

<?xml version="1.0" encoding="ISO-8859-1"?>
<rot>
  <barn>
    <barnebarn1>...... barnebarn1>
    <barnebarn2>...... barnebarn2>
  barn>
rot>


Dersom me ønskja å ha ein tom node, kan me opna og lukka noden i berre ein tagg, . Sjølv ein tom node kan ha attributtar, som me no skal komma inn på. Det viktige er at ein lukkar noden med ein skråstrek på slutten.

Attributtar

Attende til notatet me viste tidlegare, kan me legge til det me kallar attributtar. Ein attributt er i XML ein underverdi av ein node, men ikkje på same måten som vanlege undernodar.

<?xml version="1.0" encoding="ISO-8859-1"?>
<notat dato="03.01.2003">
  <til epost="vegard@sourcecode.no">Vegard til>
  <til epost="sondre@sourcecode.no">Sondre til>
  <fra epost="sverre@sourcecode.no">Sverre fra>
  <emne>XML-guide emne>
  <tekst>Hadde noen av dere giddet å skrive en guide til XML? tekst>
notat>


Sjå i browser. Her har me lagt inn ein dato, som er tilleggsinformasjon når det gjeld notatet. Vidare har me og e-post-addressene til dei personane som har sendt og motteke notatet. Dømet vårt kunne t.d. ha vore nytta i eit e-postprogram når det gjeld lagring av e-postar. Her har eg og vist at det er mogleg å ha fleire av eit felt, slik som til-feltet, og på den måten indikere at notatet er sendt til fleire personar.

Når me bør laga attributtar og når me bør laga nodar  kan diskuterast, og det er best å finne du av det i kvart enkelt tilfelle. Om me tek dømet over, så kan det gjerast på ulike måtar; i staden for måten me har gjort det over, kunne me laga ein "dato"-node i staden. Den beste måten i dette tilfellet vil nok likevel vere å nytta følgjande format;

<?xml version="1.0" encoding="ISO-8859-1"?>
<notat>
  <dato>
    <aar>2003 aar>
    <maaned>01 maaned>
    <dag>03 dag>
  dato>
  <til epost="vegard@sourcecode.no">Vegard til>
  <til epost="sondre@sourcecode.no">Sondre til>
  <fra epost="sverre@sourcecode.no">Sverre fra>
  <emne>XML-guide emne>
  <tekst>Hadde noen av dere giddet å skrive en guide til XML? tekst>
notat>


På denne måten slepp ein å bekymra seg over ulike datoformat (sidan amerikanarar nyttar mm-dd-åååå-format, medan me nyttar dd-mm-åååå).

Dersom du ender opp med ein node som berre har attributtar, men ikkje nokon undernodar eller nokon tekst, har du gjort noko feil. Det er vanleg å prøve å ha flest mogleg nodar, og minst mogleg attributtar, og det er sjeldan ein nyttar attributtar til vanleg. Det er ein ting som det er kjekt å nytta attributtar til, og det er å lagra id-nummer på t.d. eit notat.

Det finns ikkje noko fasitsvar på når du bør nytta attributtar og når du bør laga undernodar, og det er ikkje alltid du kan gjere som i dømet over. Likevel er det beste rådet på dette punktet å nytta sunn fornuft når du byggjer strukturen i dokumentet. Uansett må du huske å vere konsistent når du bestemmer deg for å nytta attributtar. Du kan altså ikkje lage ein attributt ein plass i dokumentet, og seinare lagar du ein node av same verdien. Når ein skal programmere, er det forskjell på korleis ein hentar ut og lagrar data i nodar og i attributtar.

Hermeteikn

XML tillet bruk av både doble og enkle hermeteikn, og den vanlegaste typen er doble, slik som me har nytta til no. Dersom du ønskjer å nytta doble hermeteikn i teksten som du ønskjer å lagre, kan du bytte ut hermeteikna rundt teksten med enkle hermeteikn;

<?xml version="1.0" encoding="ISO-8859-1"?>
<person namn='Vegard "KiloGram" Larsen'>
  ......
person>


Namngjevingsreglar

Dei som har drive med programmering eller databasar ei stund, veit at god namngjeving er viktig. Reglane for namngjeving av nodar i XML er enkle,
  • Nodenamn kan innehalde bokstavar, tall og teiknsetjing
  • Nodenamn må starte med ein bokstav
  • Nodenamn kan ikkje innehalda mellomrom
  • Nodenamn kan ikkje byrja med "XML" (t.d. "xml_test", "XmL_dokument", osb)


Nodenamn bør vera sjølvforklarande, t.d. når det gjeld bøker, så er bok_tittel eit godt namn, medan namnet_på_boka er eit dårleg namn. XML støttar norske bokstavar i nodenamn, men det er lite anbefalt å nytte dei, t.d. dersom utviklingsverktøyet du nyttar ikkje har direkte støtte for desse bokstavane.

Ein bør unngå å nytte punktum og bindestrek/minus i XML-namn. Dette er viktig fordi nokre utviklingsverktøy kan anta at "bok.tittel" betyr underelementet "tittel" i "bok"-noden, medan "bok.tittel" faktisk er ein eigen node. Vidare kan "bok-tittel" bety "bok" minus "tittel", som vil gje heilt uventa svar. Vidare tillet XML ikkje bruk av kolon i nodenamn.

Velforma og gyldig XML

Det er forskjell på kva som er velforma XML, og kva som er gyldig XML. Når du følgjer alle reglane for utforming når det gjeld XML, har du velforma XML. Når du har validert XML-koden mot ein dokumenttypedefinisjon (DTD), har du gyldig XML. All XML-koden me har skrive til no, er velforma XML, men den er ikkje gyldig.

Ein DTD kan lagrast i XML-fila, eller som ei ekstern fil. Dersom me har mange XML-dokument som skal validerast etter samme DTD, bør me velgje å legge DTDen i ei eiga fil. Dersom me har ei enkel XML-fil som inneheldt all data som skal lagrast, legg me DTDen internt i XML-fila.

Dersom me skulle laga ein DTD til vårt døme over, og velgjer å leggje den internt, vil eg endra dømet litt. Dømet for visning i browser er litt utvida i forhold til det som står her.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE notater [
     
]>
<notater>
  <notat>
    <dato>
      <aar>2003 aar>
      <maaned>01 maaned>
      <dag>03 dag>
    dato>
    <til epost="vegard@sourcecode.no">Vegard >
    <til epost="sondre@sourcecode.no">Sondre >
    <fra epost="sverre@sourcecode.no">Sverre >
    <emne>XML-guide >
    <tekst>Hadde noen av dere giddet å skrive en guide til XML? >
  notat>
notater>


Kva har me gjort her? Først og fremst er det DTDen på toppen ein må legga merke til. Me seier at dokumenttypen heiter "notater", og difor kallar me rotelementet det same. Rotelementet kan bestå av null eller fleire notat-nodar, dette kan me sjå på stjerna etter notat. Ein notat-node består av ein dato, ein eller fleire til-nodar (dette ser me på pluss-teiknet etter "til" i lista. Vidare har me fra-, emne- og tekst-nodar under notat.


Me går vidare og ser på dato-noden, som igjen består av aar, maaned og dag. Tilnoden er deklarert til å innehalde bokstavdata (såkalla #PCDATA), men om me ser under, ser me at den og har ein attributt, som heiter epost. Den er av typen CDATA (som er omtrent det same som PCDATA), og den er eit påkrevd felt. Om ein ser på franoden, ser me at det er omtrent det same der. Til slutt har me emne og tekst-felta, som består berre av tekst.

Endringane frå dei originale dømet er slik at me no kan lagra fleire notat i ei fil, og det er difor lurt å ha DTDen internt i fila.

Programmering med XML

Som eg nemnte tidlegare, kjem eg ikkje til å gå inn på korleis ein nyttar XML i ulike programmeringsspråk, men det finns nokre generelle reglar for korleis dette skal gjerast. Først og fremst er det svært viktig at du følgjer XML-spesifikasjonane når du skriv program for å tolke XML. Det finns svært mange tilgjengelege tolkingsmotorar (parsers) til XML, og dei fleste programmeringsspråk har slike. Dei tre vanlegaste er MS XML, Xerces XML og Open XML. Dei skal oppføre seg relativt likt når du nyttar dei, og utviklingsverktøyet ditt har sikkert ein eigen klasse som kan veksle mellom desse motorane.

Det er svært viktig at dersom programmet ditt kjem borti ugyldig XML, så må det feile. Dette er ein del av XML-standarden som ofte vert oversett, men det er svært viktig at du får dette inn i ditt eige program. Grunnen til dette er kompatibilitet med andre program. Sidan XML er ein open standard, skal data lagra som XML i andre program ikkje vere noko problem å importere. T.d. kan me rekna med å sjå at dei fleste store skriveprogramma kjem til å støtte XML i framtida, noko som gjer at å utveksle filer mellom ulike program ikkje lenger skal vera noko problem.

Meir informasjon om XML kan du finne hos World Wide Web Consortium (W3C), eller ved å følgja linkane under. Du kan og stille spørsmål angåande XML på vårt forum.

Nyttige linkar:
- w3schools.org
- World Wide Web Consortium

Startside ] Opp ] [Søk]

Copyright © 2002 Øyvind Haugland
Sist endret:  13 januar 2019
 

  Interested in this stuff? Please write to:
 

HTML Counter            stats counter