28
Tags:
xml
Skrevet af
Bruger #2086
@ 30.11.2003
Introduktion til XML
Der er mange der tror at XML er fantastisk svært at lære, til denne påstand kan sige både og.
I sig selv er XML utroligt let ! men følge teknologierene til XML kan være ret vanskelige
at have med at gøre. For at forstå hvad XML er for en størrelse, er det vigtigt at
man har 100% styr på HTML og/eller XHTML samt en god forståelse for stylesheets.
Grunden til at man skal kende til HTML er at XML er et markup sprog ligesom html.
For at kunne lave noget god XML kode er det nødvendigt, at kende til de elementer der
indgår i et markup sprog som F.eks tags, attributter og attributværdier.
Grunden til at man skal have forståelse for Stylesheets er, at XML indeholder ingen
formateringsmulighedder, men bruges kun til at beskrive data.
Alt formatering af XML dokumenter laves enten med CSS eller XSL
(Extensible Stylesheet Language som også er en del af XML specifikationen) eller en kombination både CSS og XSL.
Umidelbart kan det virke som en svaghed at XML ikke i sig selv indeholder formaterings mulighedder. Men det er netop dette faktum der gør XML til et stærkt værktøj.
XML er i modsætning til HTML ikke begrænset til et medie som f.eks WWW. Et XML dokument kan ved hjælp af XSL transformeres til mange forskellige formater f.eks WML, SVG og mange andre.
Fordelen burde være åbenlys:
Man kan bruge de samme XML data til WWW, i wap telefoner (WML) og til grafikske præsentationer som SVG, derud over har Photoshop lavet et plugin som gør at XML data også kan bruges sammen med Photoshop formater !
Grundlæggende om XML
Det grundlæggende ved XML er, at man navngiver selv sine tags, XML indeholder altså ingen begrænsninger men hensyn til at tags skal hedde noget bestemt som f.eks HTML tags <tr>, <td> osv.
En XML tag kan f.eks hedde <navneelement> eller lige præcis et hvilket som helst ord/navn man har lyst til give sit XML element. Man navngiver også sine attributter på lige den måde man vil f.eks: <navneelement navnet="helle">.
En vigtig huske regel er: ALLE VÆRDIER DER TILDELES EN ATTRIBUT SKAL I GÅSEØJNE !!
En af fordelene ved XML er at data bliver selv forklarende !
Det vil sige at når man læser sin kildekode vil man med det samme kunne se hvilke data et tag beskriver udfra navnet på taget, forudsat at man navngiver sine tags på en sigende måde.
Hvis du sidder og tænker "der er da ingen browsere der ved hvad de skal
stille op med tags som f.eks <navneelement>" så har du helt ret.
Men det er nu også det der er meningen XML skal kun beskrive data ikke præsentere dem.
Det man som udvikler er ude efter er at opnå en total adskillelse af data og præsentation, XML tilbyder lige præcis denne mulighed.
Sammenfattet kan man sige XML kan og skal kun bruges til at opbevare data i struktureret form. Bruges XML til andet end at beskrive data er dokumentet ganske simpelt ikke et XML dokument.
Præsentationen af data i f.eks en browser håndteres af et stylesheet.
Med andre ord XML giver mulighed for at bruge stylesheets på den måde som f.eks CSS oprindeligt var tænkt som et layout sprog. Når man opbygger et XML dokument er der 5 meget vigitge regler der skal overholdes:
1. En XML tag skal starte med et bogstav eller en underscore.
I XML er det tilladt at bruge både store og småbogstaver i sine tags og attributter. Men i modsætnign til HTML er XML case sensetivt det vil sige at: taget <navneelement> er ikke det samme som taget <NAVNEELEMENT>
Til forskel så tænk på at i HTML er der ingen forskel på disse to tags: <table> og <TABLE>
Hvis man overholder reglen om at XML tags skal starte med et bogstav eller en underscore må en tag også gerne indeholde tal, punktumer bindestreger osv.
Men et tag må IKKE starte med ordet XML uanset om XML er skrevet med store eller små bogstaver.
Et XML tag må heller ikke indeholde et $ tegn, $ tegn bruges i XSL til at referere til en variable og som følge heraf vil XML parseren blive forviret over et evt $ tegn.
Udover de ovennævnte ting er der ingen begrænsninger for navngivning af tags.
2. Alle tags skal have både en start og en slut tag.
På samme måde som i XHTML skal alle tags have både en start og en slut tag.
Et tag må gerne være tomt forstået på denne måde: Lige som at HTML kan indeholde et <img> der ikke indeholder data kan et XML tag også godt være uden data så længe man husker at afslutte taget på samme måde som man gør i XHTML f.eks: <navneelement /> hvis taget er afsluttet på denne måde er det helt iorden at det ikke indholder data men taget kan jo så indeholde en eller flere attributter.
3. Et XML dokument skal være velformet.
At et XML dokument skal være velformet betyder det samme som i XHTML nemlig, at tags skal lukkes i den rækkefølge de er blevet åbnet.
XML tags må altså ikke overlappe hinanden og som nævnt i punkt 2 alle tags skal afsluttes.
Hvis ovennævnte ikke overholdes er dokumentet ikke velformet og som følge her af kan dokumentet ikke betragtes som XML og vil resultere i en fejl fra XML parseren.
4. Et XML dokument skal opbygges som et hieraki af elementer.
Et XMl dokument skal altid indeholde et og KUN et tag der kan betragtes som "rod-elementet". På samme måde som HTML hvor rod-elementet er <html> taget, skal XML have et tag der kan betragtes som stammen på "XML træet" f.eks:
<?xml version="1.0"?>
<rodelement>
<førsteelement>indhold</førstelement>
<andetelement>indhold</andetelement>
<tredieelement>indhold</tredieelement>
</rodelement>
Ovenstående kode eksempel opfylder kravende for at være valid XML.
Den første linje i eksemplet er en såkaldt processing-instruction (PI), som fortæller XML paseren at dokumentet er af typen XML og at der kodes efter XML 1.0 standarden.
Hvis man laver et diagram over XML dokumentet som XML paseren (XML fortolkeren) opfatter dokumentet vil det se ud på denne måde.
Diagrammet illustrere at XML paseren opfatter elementerne som en "slags" grene der hænger på stammen "Rod element" på denne måde skal alle XML dokumenter opbygges.
Selvom at rod-elementet betragtes som "roden" i et XML dokument, indeholder XML også et objekt der er højerer placeret i hierakiet end rod-elementet.
Objektet kaldes for dokument-roden og er betegenelsen for hele XML dokumentet.
Lige nu behøver du ikke at have denne dokument-rod i baghovedet, men hvis du senere kommer igang med XSL og DOM er man nødt til at have i mende at rod-elementet befinder sig under dokumennt-roden.
5. Et XML dokument skal have erklæret et tegnsæt.
Som udgangspunkt er alle XML dokumenter defineret til at være unicode. Alle XML dokumenter skal startes med følgende tag:
<?xml version="1.0"?>
Det vil sige at hvis et XML dokument startes med denne PI <?xml version="1.0"?> vil XML parseren fortolke dokumentet som unicode.
Det er da også det mest optimale format at benytte til XML, da unicode indeholder alle tegn også kinesiske og japanske tegn og som følge her af lever op til XML's sigte at et tag skal kunne indeholde alle typer af tegn.
Hvis du ikke har rådighed over en tekstbehandler der kan gemme i unicode format (notepad til windows 2000 kan) kan man i sin XML erklæring indsætte en encoding attribut som kan indehold f.eks ascii format:
<?xml version="1.0" encoding="iso-8859-1"?>
Herefter kan XML parseren fortolke dokumentet efter tegnsættet iso-8859-1 som er det mest "normale" tegnsæt i vesteuropa. Pga. tegnsæt erklæringen vil man også kunne benytte danske bogstaver som æ, ø og å. Men det kan ikke anbefales at bruge æ,ø,å i sine tags, men det er ok i teksten der står i tagne.
Opbygning af XML dokumenter
Jeg vil nu gå igang med at oprette et XML dokument, Hvis du ikke har lyst til at indtaste XML dokumentet selv kan du jo bare kopiere XML i kodeboksen her under. Men for træningens skyld syntes jeg at du bør indtaste dokumentet selv, man får også en størrer forståelse for det man arbejder med når man får "fingerne i koden".
Før du går igang med XML dokumentet vil jeg lige gøre dig opmærksom på:
Hvis du skal kunne se din XML i en browser skal du bruge Internet Explorer i mindst version 5.0.
Jeg vil ikke lægge hovedet på blokken for det men jeg har fået at vide, at Netscape fra version 6.1 kan fortolke XML, men jeg har ikke testet så jeg ved det ikke om det rigtigt.
Under normale omstændigheder ville jeg bruger et ASP script til at fortolke min XML.
Det har den effekt at også browsere der normalt ikke kan vise XML dokumenter vil vise XML'en fordi den er genereret af en server og som følge heraf er transformeret til et format browseren kan forstå. Men nu til det som det handler om dit første XML dokument !
<?xml version="1.0" encoding="iso-8859-1"?>
<stamtrae>
<overskrift>Mit Stamtræ</overskrift>
<familemedlem id="001">
<fornavn>Susanne</fornavn>
<efternavn>Hansen</efternavn>
<roller>
<rolle>Mor til marc, </rolle>
<rolle>Claus kone, </rolle>
<rolle>Faster til Julie og Mathias, </rolle>
<rolle>Tante til Rasmus og Mads</rolle>
</roller>
<køn>Kvinde</køn>
<alder>38 år</alder>
<højde>167 cm</højde>
<vægt>Må jeg ikke oplyse (men den er lav ;o)</vægt>
</familemedlem>
<familemedlem id="002">
<fornavn>Claus</fornavn>
<efternavn>Pryds</efternavn>
<roller>
<rolle>Far til Marc, </rolle>
<rolle>Susannes mand, </rolle>
<rolle>Farbror til Rasmus og Mads, </rolle>
<rolle>Onkel til Julie og Mathias</rolle>
</roller>
<køn>Mand</køn>
<alder>37 år</alder>
<højde>175 cm</højde>
<vægt>74 kg.</vægt>
</familemedlem>
<familemedlem id="003">
<fornavn>Marc</fornavn>
<efternavn>Hansen</efternavn>
<roller>
<rolle>Vores søn, </rolle>
<rolle>Fætter til Rasmus, Mads, Julie og Mathias</rolle>
</roller>
<køn>Dreng</køn>
<alder>10 år</alder>
<højde>152 cm</højde>
<vægt>41 kg</vægt>
</familemedlem>
<familemedlem id="004">
<fornavn>Ellen</fornavn>
<efternavn>Pryds</efternavn>
<roller>
<rolle>Mor til Claus, </rolle>
<rolle>Svigermor til Susanne, </rolle>
<rolle>Farmor til marc, </rolle>
<rolle>Mormor til Rasmus og Mads</rolle>
</roller>
<køn>Kvinde</køn>
<alder>61 år</alder>
<højde>158 cm</højde>
<vægt>Ikke oplyst</vægt>
</familemedlem>
<familemedlem id="005">
<fornavn>Ib</fornavn>
<efternavn>Pryds</efternavn>
<roller>
<rolle>Far til Claus, </rolle>
<rolle>Svigerfar til Susanne, </rolle>
<rolle>Farfar til Marc, </rolle>
<rolle>Morfar til Rasmus og Mads</rolle>
</roller>
<køn>Mand</køn>
<alder>67 år</alder>
<højde>168 cm</højde>
<vægt>67 kg</vægt>
</familemedlem>
<familemedlem id="006">
<fornavn>Hanne</fornavn>
<efternavn>Pryds Skouby</efternavn>
<roller>
<rolle>Mor til Rasmus og Mads, </rolle>
<rolle>Søster til Claus, </rolle>
<rolle>Svigerinde til Susanne, </rolle>
<rolle>Faster til Marc</rolle>
</roller>
<køn>Kvinde</køn>
<alder>39 år</alder>
<højde>165 cm</højde>
<vægt>Ikke oplyst</vægt>
</familemedlem>
<familemedlem id="007">
<fornavn>Rasmus</fornavn>
<efternavn>Skouby</efternavn>
<roller>
<rolle>Søn til Hanne, </rolle>
<rolle>Bror til Mads, </rolle>
<rolle>Nevø til Claus, </rolle>
<rolle>Fætter til Marc</rolle>
</roller>
<køn>Dreng</køn>
<alder>14 år</alder>
<højde>172 cm</højde>
<vægt>56 kg</vægt>
</familemedlem>
<familemedlem id="008">
<fornavn>Mads</fornavn>
<efternavn>Skouby</efternavn>
<roller>
<rolle>Søn til Hanne, </rolle>
<rolle>Bror til Rasmus, </rolle>
<rolle>Nevø til Claus, </rolle>
<rolle>Fætter til Marc</rolle>
</roller>
<køn>Dreng</køn>
<alder>12 år</alder>
<højde>158 cm</højde>
<vægt>44 kg</vægt>
</familemedlem>
<familemedlem id="009">
<fornavn>Anne</fornavn>
<efternavn>Hansen</efternavn>
<roller>
<rolle>Mor til susanne, </rolle>
<rolle>Mormor til Marc, </rolle>
<rolle>Svigermor til Claus, </rolle>
<rolle>Farmor til Julie og Mathias</rolle>
</roller>
<køn>Kvinde</køn>
<alder>59 år</alder>
<højde>178 cm</højde>
<vægt>Ikke oplyst</vægt>
</familemedlem>
<familemedlem id="010">
<fornavn>Tonny</fornavn>
<efternavn>Hansen</efternavn>
<roller>
<rolle>Bror til Susanne, </rolle>
<rolle>Far til Julie og Mathias, </rolle>
<rolle>Lenes mand, </rolle>
<rolle>Svorger til Claus</rolle>
</roller>
<køn>Næsten en mand</køn>
<alder>36 år</alder>
<højde>198 cm</højde>
<vægt>TYK</vægt>
</familemedlem>
<familemedlem id="011">
<fornavn>Lene</fornavn>
<efternavn>Hansen</efternavn>
<roller>
<rolle>Tonnys kone, </rolle>
<rolle>Mor til Julie og Mathias, </rolle>
<rolle>Svigerinde til Susanne</rolle>
</roller>
<køn>Kvinde</køn>
<alder>34 år</alder>
<højde>178 cm</højde>
<vægt>Ikke oplyst</vægt>
</familemedlem>
<familemedlem id="012">
<fornavn>Julie</fornavn>
<efternavn>Hansen</efternavn>
<roller>
<rolle>Kusine til Marc, </rolle>
<rolle>Niece til Susanne, </rolle>
<rolle>Søster til Mathias</rolle>
</roller>
<køn>Pige</køn>
<alder>9 år</alder>
<højde>151 cm</højde>
<vægt>Ikke oplyst</vægt>
</familemedlem>
<familemedlem id="013">
<fornavn>Mathias</fornavn>
<efternavn>Hansen</efternavn>
<roller>
<rolle>Fætter til Marc, </rolle>
<rolle>Nevø til Susanne, </rolle>
<rolle>Bror til Julie</rolle>
</roller>
<køn>Dreng</køn>
<alder>4 år</alder>
<højde>98 cm</højde>
<vægt>21 kg</vægt>
</familemedlem>
<familemedlem id="014">
<fornavn>Luna</fornavn>
<efternavn>Vuffer</efternavn>
<roller>
<rolle>Gravhund</rolle>
</roller>
<køn>Kvinde</køn>
<alder>78 Hundeår</alder>
<højde>22 cm</højde>
<vægt>12 kg</vægt>
</familemedlem>
</stamtrae>
Hvis du har læst dig igennem hele XML dokumentet har du sikkert gættet, at XML dokumentet her er et udsnit af mit stamtræ. Jeg har valgt dette emne af flere grunde bl.a.
1. Strukturen i XML'en giver nogle gode mulighedder for at vise XML på flere måder.
2. Der er en lille smule symbolik i at vise et XML dokuments træ struktur som et stamtræ.
Hvis du kigger lidt på XML dokumentet og tænker lidt på de ting jeg har fortalt omkring kravene til XML, vil du se at ovenstående er velformet XML.
1. Dokumentet er startet med et PI (processing-instruction) element.
2. Dokumentet indeholder et "rod element" (<stamtrae>
3. Alle tags er afsluttet.
4. Der er ingen tags der overlapper hinanden.
5. Alle tags starter med et bogstav.
6. Alle værdi tildelinger til attributten id er sat i gåseøjne.
7. XML'en er hierakisk opbygget som et træ.
Jeg har her lavet et noget "langt" XML dokument, men det hænger sammen med at jeg er igang med, at lave en artikel der handler om, hvordan man formatere sin XML med CSS på en meget simpel men elegant måde.
Tilsidst så prøv at lave XML dokumentet selv og load det i din browser så vil du se, at XMLen bliver vist som rå XML data fordi at XML ikke indeholder nogen formatering overhovedet.
Håber at i får lidt baggrundsviden om XML fra denne artikel ;o)
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (11)
Tak for en god artikel! Du snakker om et ASP script. Det ville være meget rart hvis du fortalte lidt om det (om det er et du selv har lavet og hvor man evt kan hente det).
Jeg har lige lavet en artikel om XML og CSS
som er sendt til godkendelse og er i gang, med en artikel XSLT og i denne artikel er det script jeg omtaler beskrevet.
ASP scriptet er ikke så meget værd hvis du ikke har styr på XSLT og XMLDOM har du det ?`
Hvis du har skal jeg gerne sende scriptet til dig i en mail du kan bare sige til ;o)
Hej CLaus Pryds
Nu bruger jeg ikke XSLT (da jeg kun bruger XML til programmer, altså som en form for database), men jeg vil da meget gerne se scriptet
Forresten så er min mail mark@markjensen.dk
Scriptet kan ses her på siden i artiklen
Transformation af XML data med XSLT
Hej fra Claus
Meget god artikel ;-) Den har du sørme gjordt meget ud af!!! :-)
Rigtig god artikel.. Kun et lille men - du skriver at det ikke kan anbefales at bruge æ, ø & å i sine tags, og på trods af det har du selv gjort det...
Jeg synes at artiklen er godt skrevet, men der er et minus. Du skriver ikke noget om hvordan man skal gemme og afvikle XML filen.
(så 3 fra mig)
God artikel.
For dem der aldrig har kigget på xml før - som mig.
Håber du laver flere
Fed begynder artikel - Har altid troet at det var sådan noget helt vildt svært noget, men det er jo egentligt meget enkelt
- Thumps up
Jeg ved ude mærket godt at artiklen er meget gammel, men hvilken format skal teksten gemmes i? Jeg har forsøgt med .htm, men der kommer al teksten frem (uden tags) i en lang smøre, uden linjeskift eller noget. Er det meningen?
Dårlig, jeg fik intet at vide om hvad, hvordan og hvorfor jeg skulle bruge xml...
Du skal være
logget ind for at skrive en kommentar.