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
- XML er enkelt. Syntaksen er ikke helt avskrekkende
-
XML er en åpen standard(ISO standard). Det er plattform- og leverandøruavhengig.
Det er basert på unicode tegnsett, det innebærer at det har innebygget støtte
for alle verdens alfabeter
- XML er utvidbart ved at brukere kan definere egne elementer
- Gjenbruk er enkelt i XML ved at elementer kan gjenbrukes i mange applikasjoner
- I XML er innhold og presentasjon skilt fra hverandre
- XML har støtte for å hente data fra flere forskjellige kilder
-
I XML er det mulig å beskrive data fra mange forskjellige kilder,
og dataene er selvbeskrivende
- Med XML kommer mer avanserte søkemotorer
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:
- for å legge til innhold i eksterne filer
- som shortcuts til tekst man bruker ofte
- for å sette inn et hvilket som helst unicode-tegn i en tekst
- for å skille kodetegn fra innhold, f.eks. skille < fra <
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å:
-
Med elementer
-
Med attributter
-
Med en kombinasjon av elementer og attributter
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
|