Kom i gang med XML

Hva er XML?

XML står for eXtensible MarkupLanguage, og er utviklet av W3C.
XML er ikke et programmeringsspråk, men et metaspråk, dvs. et språk for å beskrive andre språk.
XML, som HTML, er en begrenset versjon av SGML utviklet spesielt for www-dokumenter.
Det er ment som et overbygg til HTML der brukeren selv kan definere tagger.
XML versjon 1.0 kom i slutten av 1998, og har siden hatt en voldsom utvikling mhp bruk og popularitet.

Fordeler med XML

De ulike bestanddelene i XML

Grovinndeling

Grovt sett kan vi si at et xml-dokument består av en prolog, et rotelement og, hvis man vil, en epilog.
Et xml-prosjekt kan bestå av en xml-fil(.xml), et skjema(.xsd) eller en dtd(.dtd) og et xml-stylesheet(.xsl) eller cascading style sheet(.css)

Prolog

Prologen beskriver xml-dokumentet, importerer skjema eller dtd og evt. xml- eller cascading stylesheets(xslt eller css). Prologen kan inneholde såkalte prosesserings instruksjoner.

Rotelement

I rotelementet ligger dataene(xml-fil), definisjon av typer og elementer(schema-fil) eller oppsett av utseende(xsl-fil).

Epilog

I epilogen kan man legge det samme som i prologen, bortsett fra den første linja som definerer versjon og encoding. Det er ikke vanlig å bruke epilogen, men muligheten er der. Det er usikkert hvilke konsekvenser det får å legge kode i epilogen istedenfor i prologen, så det anbefales ikke.

Fininndeling

Under vil jeg si noe om noen av de forskjellige delene et xml-dokument(.xml, .xsd, .xsl) kan bestå av.

Kommentarer

Kommentarer skrives som i html: <!-- kommentar -->
Kommentarer kan finnes overalt bortsett fra helt først i fila

Elementer

Første element er alltid rot-elementet
Et element kan inneholde underelementer, data eller attributter eller det kan være tomt
Et element har alltid enten en start-tag(<tag>) pluss en slutt-tag(</tag>) eller en lukket start-tag((<tag/>))
Elementnavn er case-sensitive(dvs ikke som i html!)
Rekkefølgen på elementer er ikke tilfeldig. Data må legges inn i xml-fila samme rekkefølge som de er definert i schema-fila.

Eks(NB! Kode som ikke er vesentlig for å vise strukturen er fjernet):
schema xml-data
<wt:element name="kjøretøy">
   <wt:complexType>
      <wt:sequence>
         <wt:element name="bil" minOccurs="0" maxOccurs="unbounded">
            <wt:complexType>
               <wt:sequence minOccurs="0" maxOccurs="unbounded">
                  <wt:element name="bilnr" type="wt:string" minOccurs="1" maxOccurs="1"/>
                  <wt:element name="farge" type="wt:string" minOccurs="0" maxOccurs="1"/>
               </wt:sequence>
            </wt:complexType>
         </wt:element>   
      </wt:sequence>
   </wt:complexType>
</wt:element>
            
<kjøretøy>
   <bil>
      <bilnr>AA11111</bilnr>
      <farge>blå</farge>
   </bil>
</kjøretøy>

Attributter

Et attributt er en verdi som beskriver et element.
Et attributt består av et navn-verdi par.
Rekkefølgen på attributter er ikke viktig, men man bør være konsekvent og bruke samme rekkefølge i all innlegging av data for lesbarhetens skyld.

Eks(NB! Kode som ikke er vesentlig for å vise strukturen er fjernet):
schema xml-data
<wt:element name="kjøretøy">
   <wt:complexType>
      <wt:sequence>
         <wt:element name="bil" minOccurs="0" maxOccurs="unbounded">
            <wt:complexType>
               <wt:sequence minOccurs="0" maxOccurs="unbounded">
                  <wt:element name="farge" type="wt:string" minOccurs="0" maxOccurs="1"/>
               </wt:sequence>
               <wt:attribute name="bilnr" type="wt:string" use="required"/>
            </wt:complexType>
         </wt:element>
      </wt:sequence>
   </wt:complexType>
</wt:element>
            
<kjøretøy>
   <bil bilnr="AA11111">
      <farge>blå</farge>
   </bil>
</kjøretøy>

Entity references

Alle entiteter har et unikt navn, og bruken av en slik kalles en entitetsreferanse(Entity reference).
En entitetsreferanse kalles ved å skrive &entitetsnavn;, mens en parameterentitetsreferanse kalles ved å skrive %entitetsnavn;
Man må definere en DTD for å kunne bruke entitetsreferanser.
Entitetsreferanser brukes:

CDATA

CDATA brukes for å kunne legge inn kode som tekst.
XML-parseren ignorerer alle kodetegn inne i CDATA-blokken, og sender det bare videre som tekst.

Organisering av data

Det finnes flere måter å organisere dataene i et skjema på:

Den beste måten å organisere dataene på er å kun bruke elementer, mens det å kun bruke attributter ikke er å anbefale. Dette fordi det er vanskeligere å hente ut attributt-data enn det er å hente ut element-data(sammenlign xsl-koden i eksempel 2 og eksempel 3).

Eksempel 1: Et lite eksempel med værdata
Eksempel 2: samme som 1, men viser bruk av for-each løkke i xsl-fila
Eksempel 3: samme som 2, men bruker attributter istedenfor elementer og choose-test og demonstrasjon av variable i xsl-fila
Eksempel 4: viser eksempel på entity reference, samtidig som det viser en xml-fil som bruker både schema og DTD
Eksempel 5: viser eksempel på CDATA
Eksempel 6: viser eksempel på bruk av spesialtegn med utf-8 tegnsett(utf-8 er en unicode standard)
Eksempel 7: viser eksempel på bruk av flere schema-filer i et prosjekt og bruk av derived types