XML
XML
Børre Stenseth

XML

XML (Extensible Markup Language) omtales oftest som et språk. Det går an å diskutere dette siden det i så fall er et språk uten ord. Vi kan kanskje kalle det et metaspråk eller om vi vil, et sett med regler for å lage språk, en grammatikk.

XML er på den ene siden enkelt. Det er intuitivt enkelt å lage et formelt riktig XML-dokument. Det er dog av og til en del nødvendige mekanismer som av og til kan gjøre det litt vanskeligere. (namespace, entities, CDATA).

XML er en etablert standard og inngår direkte eller indirekt i en rekke sammenhenger, både i webutvikling og i annen programutvikling. Noen av de tingene som taler for XML som dataformatrringsverktøy:

  • XML er etablert og allment kjent og lett å forstå intuitivt
  • Alle "siviliserte" programmeringsspråk har etablert en bibliotek for å arbeide med XML-strukturer. Disse bibliotekene er bygd etter en etablert, om ikke standard, så i hvert fall rekomendasjon
  • XML som trestruktur er rask og sikker å parse
  • Det er lett å kontrollere at en XML-fil er velformet, dvs at alle tagger er på plass og er plassert riktig
  • Det er etablert mekanismer (dtd, schea) som lar oss sjekke at XML-filer inneholder det de skal
  • XML er leselig for mennesker
  • Det er enkelt å transformere XML-filer til andre XML-filer, til text, til JSOn eller hva vi måtte ønske. Dette kan vi gjøre med vanlige programmeringsspråk eller ved hjelp av XSLT(XSL Transformations)
  • En del databaser leverer XML-respons på sql-queries
  • XML lar seg bearbeide i modern browsere (ekstrahere data og transformere med XSLT)

På minussiden kan man innvende at XML er ganske plasskrevende, f.eks. i forhold til en CSV (kommaseparert) tekst fil.

I grove trekk kan vi si at et XML-dokument består av to hoveddeler: En prolog og datadelen (rotelementet)..

Et XML-dokument kan se slik ut:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!-- dette er en velformet fil uten mening -->
<!DOCTYPE litteratur SYSTEM "bokdok.dtd" [<!ENTITY gj "God Jul">]>
<?xml-stylesheet type="text/xsl" href="a_trans.xslt"?>
 
<litteratur/>

Prolog

Den første linja har flere komponenter:

   <?xml version="1.0" encoding="UTF-8" standalone="no"?>

Den første delen, xml version=1.0" er obligatorisk og signaliserer til det programmet som skal lese fila, og oss, at dette er en XML-fil. Det kan ikke være blanke linjer eller tegn foran denne begynnelsen.

Den andre delen encoding="UTF-8" sier oss hvordan innholdet er kodet, hva slags tegnsett som er brukt. Dette åpner for stor frihet til å skrive i en rekke ulike språk med tegnsett som er helt annerledes en det vi er vant til å bruke. Det finnes en rekke definerte tegnsett som har kjente betegnelser. For å skrive norsk bruker vi ofte "ISO-8859-1", som er en standard som ivaretar våre nordeuropeiske tegn. Tegnsett og nødvendig tilhørende teknologi er en ganske omfattende historie. Unicode er en viktig del av dette. UTF-8 er 8-bits unicode som expanderer i antall byte etter behov. UTF-8 er "standard" og default koding i alt som har med XML å gjøre

Den tredje delen standalone="no" sier oss hvorvidt dokumentet er selvforsynt, eller om andre filer er involvert, f.eks. om det finnes en ekstern DTD. Denne delen trenger vi ikke ta med, og det litt uavklart hvordan ulike programmer og parsere skal forholde seg til dette.

Den andre linja:

   <!-- dette er en velformet fil uten mening -->

er en kommentarlinje som kan settes inn hvor som helst i et xml-dokument.

Den tredje linja:

   <!DOCTYPE litteratur SYSTEM "bokdok.dtd">

er en dokumentdeklarasjon, DOCTYPE.

Den andre delen litteratur angir at deklarasjonen gjelder dokumenter med rotelement litteratur.

Den tredje delen SYSTEM "bokdok.dtd" henger sammen og sier oss at selve dokumentdefinisjonen ligger på en URI som heter bokdok.dtd. Det vil i dette tilfellet si en fil i samme katalogen som selve XML-dokumentet. SYSTEM sier oss at dette ikke er noen generell, allment kjent DTD. Alternativet er PUBLIC. PUBLIC antyder at den aktuelle dokmenttypen er slik at det behandlende programmet kan gjenkjenne den og kan behandle den uten slå opp definisjonen. I så fall tjener URI'en som en identifikasjon, snarere enn en adresse til en definisjon.

En dokumentdeklarasjon kan inneholde både en PUBLIC-del og en SYSTEM-del. F.eks. kjenner vi deklarasjonen av XHTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

der den første delen -//W3C//DTD XHTML 1.0 Strict//EN er tilstrekkelig informasjon for nettlesere til å vite hva de skal gjøre mens den andre URI'en er en implisitt SYSTEM-deklarasjon og angir hvor DTD'en faktisk befinner seg.

Det er også lovlig å lage følgendedede konstruksjon:

   <!DOCTYPE litteratur SYSTEM "bokdok.dtd" [<!ENTITY gj "God Jul">]>

der vi har lagt til en spesifikasjon av en entitet til den aktuelle DTD'en.

Den fjerde linja

   <?xml-stylesheet code="text/xsl" href="a_trans.xslt"?>

er et eksempel på en prosesserings instruksjon (PI). I dette tilfellet angivelse av et stilsett som skal brukes, her en XSL-transformasjon. Et annet eksempel er angivelse av et CSS-stilsett:

   <?xml-stylesheet code="text/css" href="a_stil.css"?>

Roteelementet

Hoveddelen, den delen som vi hovedsaklig har fokus på er i dette perspektivet svært enkel. Den består av et rotelement som kan inneholde alle de komponentene som kan inngå i lovlig, velformet XML. (elementer, tekst, attributter, CDATA). I eksempelet over er rotelementet tomt.

<litteratur/>

Siden et XML-dokument skal ha en ren trestruktur, så er det altså ikke lov å ha flere "rotelementer".

[1]
Referanser
  1. XML (Extensible Markup Language) w3.org www.w3.org/XML/ 14-03-2010