eXtensible Markup Language (XML) - Ideologi og praksis

Tags:    xml
Skrevet af Bruger #2137 @ 11.10.2004
Introduktion.

Artiklens Formål.
Det er meningen med denne artikel at uddybe og argumentere for idégrundlaget bag XML, og forklare hvad tanken bag XML er.

Forudsætninger.
Jeg vil prøve at være teoretisk og generel i min formulering, og håber derved at artiklen stiller så lave forudsætninger som muligt. Men da XML indtil nu har haft mest succes i forbindelse med internetteknologier vil kendskab til disse måske være en fordel.
Hvis du læser med den forudsætning at du allerede kender til XML og ved hvordan det kan bruges, kan du betrakte denne artikel som en forklaring på hvorfor du skal bruge XML og hvad god XML brug er.


Hvad kan XML?

En ven stillede mig en dag dette spørgsmål, og efter kort betænkings tid kom svaret: "Intet!". Dette var naturligvis ikke et svar han kunne bruge til noget og prøvede med en omformulering:
"Hvad kan XML bruges til?"
Først da opdagede jeg hvilket paradoks XML egentlig er, og måske også en del af grunden til den manglende forståelse der er for XML. Jeg kunne ikke gøre andet end at svare ærligt: "XML kan bruges til alt."
Først efter denne episode har jeg forstået hvorfor nogle mennesker synes at XML er noget luftigt og uhåndgribeligt.
Begge ovennævnte spørgsmål er faktisk 'skud forbi målet' når de stilles til XML - faktisk skal man ud i et langt mere generelt scope for at få et fornuftigt svar på XML:


Hvad er XML?

XML er en måde at gemme, håndtere og transmitere data på. Data der gemmes i XML kan læses af alle klienter med en XML parser. XML er i sig selv blot "metadata", dvs. data om data - på denne måde er data gemt i XML format "selv beskrivende" (det kommer jeg ind på senere).
Og sidst men ikke mindst: XML er virkeliggørelsen af drømmen om ægte 'inter-exchangable data,' dvs. data der kan fløttes rundt mellem systemer uden at det går ud over læsbarheden.

Og hvordan er alt den herlighed så opnået?
1. XML er afledet af SGML standarden som "er alment kendt", derfor kan parsere til XML dokumenter nemt bygges ved at anvende eksisterende teknologi.
2. XML er per standard formateret som UTF-8 eller UNICODE som begge er internationale standarder for tekstformatering og som kan læses i hele verdenen. På denne måde opnår XML en 'rejsefrihed' på tværs af virtuelle, geografiske og formelle grænser.
3. XML er en W3C standard som er fri for copyrights og patent krav, derfor kan alle implementere teknologien uden at skulle betale royalties - dette hjælper også på XMLs bevægefrihed.
4. XMLs tekstbaserede natur er med til at øge fremtidssikringen, da tekstformater ikke udvikler sig med samme hast som resten af IT-branchen. Fremtidens arkæologer vil simpelthen have letter ved at decifrere XML data end hvis de skulle tygge sig igennem store bineære databasefiler.
5. XML adskiller dataerne fra alt hvad der har med layout og fremstilling at gøre, samtidig med at semantikken (forståelsen og betydningen) er bevaret, dette bevirker at præsentationen af dataerne kan ændres hemningsløst uden at det føre til tab af information.
6. XML har en meget god oopbakning fra bla. Microsoft, vis XML parsere siden version 3 har været 100% kompatible med W3Cs standard. For ikke at snakke om understøttelsen i .NET arkitekturen og i Java. Desuden følger browserunderstøttelsen efterhånden også godt med.

XML er ganske enkelt et orgie af fordele.


Ideologien.

XML var oprindeligt designet til at håndtere store mængder af elektroniske data udgivelser. Eks. elektroniske bogudgivelser. Dette udspringer af tanken om, at hvis man adskilder layout fra den reelle information, og opdeler denne i elementer med forskellige betydninger, kan layout elementer genbruges og ændres efter for godtbefindene og efter behov fra den der læser dataerne.
Ved at adskilde præsentation og information kan man ændrer i den ene part uden at det påvirker den anden. desuden vil det gøre læseren i stand til at vælge den præsentation der passer vedkommende bedst.
En strukturering af data i XML bevirker desuden at data kan struktureres og beskrives i en logisk sammenhæng - denne sammenhæng minder om ideologien bag objekt orienteret programering. Sammenhængen er, i al sin enkelthed, en bevægelse fra generelt til specifikt - det er en træ-strukture som i kode faktisk kan illustreres som et træ:
Fold kodeboks ind/udKode 

Her gå vi fra et generelt træ, til en nærmere bestemt gren, til et helt specifikt blad - graden af detajler øges simpelthen.

Melodien om at bevæge sig fra store generelle, og til dels, uhåndgribelige ting, til mindre grupperinger, opdelinger og sågar objekter, genkendes også i objekt orienteret programering (OOP). Dette betyder at XML inkorporeres let med denne programerings form og samspillet betyder store fordele for begge ideologier:
OOP har med XML en måde at gemme objekt orienteret data i en naturlig form.
XML data kan direkte omsættes til håndgribelige instanser af objekter som kan håndteres naturligt og gnidningsløst som en integreret del af det sprog som den logik, der læser XML dataerne, er skrevet i.
Artiklerne om Object Factories, her på udvikleren.dk, er udemærkede eksempler på hvordan XML samspiller med OOP.

Tænk på at fordelende ved objekt orienteret programering efterhånden er hævet over enhver tvivl.
Hvis du så betrakter XML som en form for objekt orienteret data, så bliver lighederne tydelige, og det to teknologier og ideologier har mange fælles fordele, som, når de bruges sammen, danner en fordelagtig synergi.


Semantikken.

Semantik handler simpelthen om hvad ting betyder. Hvis vi tager programeringssprogene Java og C/C++ som eksempler, så er det semantik at ordet "int" betyder at vi vil erklære en heltals variabel - den diamentrale modsætning er syntaksologien, som bestemmer hvor og hvordan ord og sætninger skal skrives. Syntaksologi betyder "sætningslære" mens semantikken har med forståelse at gøre.

Informationer og data i XML er selvbeskrivende, det betyder i praksis at elementerne, i modsætning til HTML, ikke er foruddefinerede.
I HTML er det "alment kendt" at <h1> tagget betyder 'overskrift'. "Overskrift" er ganske enkelt den semantiske betydning af "h1" i HTML.
XML, derimod, har ikke foruddefinerede elementer (med untagelse af process instruktioner) og derfor går semantikken i XML ud på at definere logiske navne til ens elementer - ligsom når man giver sine variabler navne. På denne måde vil et element så som <overskrift> (eller <headline>;) være et langt bedre valg end <h1>, da elementets navn fortæller om de data som elementet indeholder - denne brug af metadata er en af grundstenene i XML.

Hvis navngivning ikke er nok - det er jo trods alt begrænset hvor meget man kan sige med så få ord - kommer namespaces til hjælp. Et namespace handler om, at et navn (på et element) skal betraktes/forstås på en bestemt måde. Hvis vi vil uddybe vores <overskrift> element kan vi bruge et namespace på følgende måde:

Fold kodeboks ind/udKode 


Nu bliver navnet "overskrift" kategoriseret under et namespace ved navn "format" som foræller at dette element har noget med formatering at gøre. Den URL der gives er faktisk det 'rigtige' namespace mens "format" bare er en forkortelse. Det er ikke en regel, men god skik, at URLen peger på en webside der detaljeret forklare namespacets betydning - i det her tilfælde vil der nok stå en masse om hvordan overskrifter skal se ud, plus beskrivelser af en masse andre elementer som også har med formatering at gøre.
Namepsaces løser problemerne med navne konfliketer og tvetydighed. Tænk eks. på det engelske ord "table", er der en tabel som i HTML? eller et bord hvor man kan stille ting på? Hvis det sidste er tilfældet, ville et "furniture" namespace være på sin plads, med en reference til en side som forklare et bords funktion og brug, samt dets sammenhæng i det pågældene XML dokument.

Et konkret eksempel på god semantisk brug af XML, kan være en dato-tidsgruppe som bruges som tidsstempel i militæret:
Fold kodeboks ind/udKode 

Når du ser disse data i Opera browseren (der ikke viser XML som kode) vil dato-tidsgruppen "091043ZMAJ04" stå på skærmen, men hvis du vedhæfter et stylesheet til din XML fil vil du være i stand til at farvelægge og formatere den enkelte elementer efter behov - men ikke nok med det, en klient vil også have meget lettere ved at ændre på de enkelte elementer i dato-tidsgruppen og forståelsen af dataerne i denne opstilling er faktisk så stor at et kalender program kan bygges således, at det uden problemer kan læse og forstå dato-tidsgruppen - hvis dato-tidsgruppen bare stod i én tekststregn ville risikoen for misforståelser være stor, bla. fordi et program i sådan et tilfælde kun ville kunne definere en rigtig dato ud fra den regel, at alle tal er grupperet i par - dette er et meget løst grundlag da programmet jo egentlig ikke ved hvor dataerne kommer fra eller hvem der har lavet dem, og slet ikke om disse overholder de samme regler for formatereing og konstruering at en dato-tidsgruppe som det kalender program vi ville bygge.

Læg mærke til, at de reelle data står indkapslet i hver sit element. Der er ikke noget med at data lægges i attributer, som det eks. gøres her:
Fold kodeboks ind/udKode 

Ovenstående er forkert brug af XML - der er ikke noget syntaktisk fejl i dette element, men det modstrider med idéen om, at metadata lægges inden for krokodille tegnene (mellem < og >, taggets hoved). Denne idé har et praktisk eksempel i HTML hvor det kun er det mellem de forskellige tags der bliver skrevet på skærmen, og selve de forskellige tags forklare hvordan dataerne så skal se ud. Det er står i et taggets hoved er altså noget der fortæller om det der står mellem start og slut tagget - derfor er det de data der står mellem start og slut tagget der er den reelle information, og således vil korrekt XML strukturering af ovenstående person se sådan ud:
Fold kodeboks ind/udKode 



God Praktisk XML brug.

Dette emne har jeg i forige blok været lidt inde på. Det handler bla. om at adskille metadata fra de reelle data, ved at holde de reelle data indkapslet mellem start og sluttags, og så reservere taghoveder og attributter til metadata.
En anden god vane jeg gerne vil sælge er brugen af XML Schemaer.
Et XML Schema er en XML fil der fungere som et regelsæt for hvordan andre XML dokumenter kan struktureres - selvom en XML fil er 'well-formed' kan der godt være fejl i den alligevel. Men med XML Schemaer som meget faste regelsæt for hvordan en XML fil kan se ud (både i strukture og datatyper) kan mange forståelses fejl ellemineres. Og klienter kan med nogenlunder sikkerhed regne med, at hvis en XML fil passer til et schema, så er det nok den rigtige fil vi har fat i (ller i hvert fald en som klienten kan læse).
Schemaer har også den fordel, at deres beskrivelse af en XML fil, kan hjælpe andre programøre og software udviklere til at bygge klienter til en bestemt type af XML filer., da schemaer kan siges at være en slags 'blue print' over en bestemt type XML dokumenter. Dette vil yderliger højne XMLs 'inter-exchangablility'.
Det sidste råd jeg vil give, er: tænk i objekter.
Det giver meget mere mening når en liste over personer beskrives som en liste af navn-telefonnummer datapar, en to parallele lister hvori der er telefonnumre i den ene og navne i den anden, bare for at tage et eksempel. Hold data, som har logisk relation til hindanden samlet og grupperet under større noder og elementer (objekter). Dette vil også hjælpe på overblikket over filen og gøre den mere robust.


Afslutning.

Det var alt hvad jeg havde om XML ideologi og praktik. Hvis du har spørgsmål, rettelser eller forslag er du velkommen til at bruge udvikleren.dk's interne postsystem.

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 (13)

User
Bruger #2730 @ 13.10.04 10:03
God artikel, rigtigt godt med baggrunds viden omkring brugen af XML samt hvordan man bør strukturere sin fil. Et lille side-emne jeg godt kunne have ønsket mig var nogle få eksempler hvad man eventuelt kunne bruge en XML fil til. Jeg ved godt at der referes til Object factory artiklen, men alligevel. Nogle få linier om dette ville ikke have skadet forståelsen
User
Bruger #2137 @ 13.10.04 15:29
Ja, det er der sikkert mange der godt kunne tænke sig, og det ligger da også i naturlig forlængelse af denne tekst. Men, jeg har valgt at afgrændse emnet og holde det praktiske lidt i baggrunden, og besluttet at konkrete anvenelse er ude af scope i denne omgang. Men med de gode ratings jeg har fået indtil nu, kan det da være at jeg får blod på tanden og laver en forsættelse :)
User
Bruger #5715 @ 13.10.04 22:09
Lige sådan en artikel jeg havde brug for :D Thx..
5 Her fra ...
User
Bruger #5789 @ 14.10.04 20:07
Fortsæt endeligt....

Mvh
User
Bruger #5394 @ 14.10.04 22:31
Det ihvertfal den bedste artikel jeg har læst endnu, man kommer et skridt nærmere.

Lidt offtopic: syntes vi mangler eksempler på hvor man viser forskellen mellem html og xml. Altså hvordan vil det se ud i praktis hvis man gør det i html, og hvordan vil det se ud hvis man adskiller tekst og præsentation.
Ved ikke hvordan det kunne laves, men det må kunne laves :)
Måske en ide til ny artikel.
User
Bruger #2137 @ 14.10.04 22:38
Det er faktisk det som Claus Pryds er inde på i sine artikler - selvom han måske ikke skriver det direkte. Og du har da også ret i, at de to ting stillet op mod hinanden er stof som mangler her udvikleren. Dette vil også falde godt sammen med de konkrete brugseksempler som Brian Hvaaregaard efterlyser. Nu har jeg jo stort set et emne defineret. Nu må vi se om jeg får tid til at lægge hjernen i blød en dag :)
User
Bruger #4003 @ 01.12.04 10:31
Det blev en 5'er ;-)

Rigtig god og velskrevet artikel (ok, en korrekturlæser til lige at klare slåfejl ville fuldende værket, men det skal ikke trække ned fra min side).

Det er absolut en af de mest velskrevne artikler på udvikleren, og jeg håber ligeledes på at vi får en "serie" at se....godt gået Christian....jeg glæder mig til at tage det næste skridt ind i praktikken med dig ved roret!
User
Bruger #6973 @ 25.12.04 18:35
rigtig god artikel.
Overskuelig og godt skrevet
User
Bruger #6139 @ 08.02.05 05:02
5! Superblaeret!
User
Bruger #6384 @ 11.07.05 14:08
5! Denne artikel har gjort mig klart mere interesseret i xml
User
Bruger #5400 @ 13.10.05 15:28
hold kæft en god artikel! SKRIV MERE!!

:P
User
Bruger #7788 @ 24.10.05 17:12
Jeg gi'r dig et stor, stor 5-tal!
User
Bruger #13669 @ 27.04.08 11:42
God artikel, har tit tænkt på hvad XML enlig var.
Du skal være logget ind for at skrive en kommentar.
t