Afsnittet er temmelig teoretisk. Er du mere til det praktiske, går du blot til det næste afsnit. XML (eng. extensible Markup Language) XML er en måde at strukturere data på i tekstform. På samme måde som HTML anvendes til at præsentere data på i f.eks. en browser, anvendes XML til at definere/beskrive selve data. På det seneste er XML blevet udråbt, til at være løsningen på alle mulige problemer- og det kan også godt være, at det bliver det, men i sig selv kan XML ikke gøre noget. XML er udvidelig XML er et såkaldt beskrivende sprog (eng. Meta language), og ordet Extensible betyder, at det er muligt at tilføje nye elementer efter behovet. XML er ikke som HTML, der er ikke nogen forud definerede koder/elementer, som f.eks. <body> i HTML. XML koder og deres betydning kan defineres efter behov. Da XML kan udvides inden for rammerne af standarden, har man mulighed for at tilpasse det til den enkeltes behov, f.eks. ved at starte med simple datastrukturer og så udvide det i takt med, at behovet for mere sofistikerede datastrukturer opstår. XML er læsbart XML er almindelig tekst, selv om det ikke er beregnet til at skulle læses af mennesker. Til gengæld er det nemt at have et program til at læse og fortolke en sådan tekst. Der er således dukket mange standard programmer (og biblioteker) op i den sidste tid, som gør implementeringen af XML i egne programmer meget nemt. XML kan struktureres Da XML indeholder mulighed for at angive de såkaldte "Dokument type Definitioner" (DTD), dvs. mulighed for at beskrive, hvordan dokumentstrukturen er, har det givet mulighed for at definere standarder inden for forskellige brancher. Altså en mere simpel EDI/EDIFACT løsning. XML kan kontrolleres Hvis der findes en DTD til et XML dokument, og det er ikke altid tilfældet, kan strukturen af dokumentet kontrolleres af de føromtalte standard produkter. Dvs. at udviklingsomkostningerne ved udvidelse/implementering af XML begrænses til selve anvendelsen af XML-data, idet kontrollen af strukturen og syntaksen kan overlades til standardprodukter. Til sidst skal lige nævnes at en afløser til DTD, XML Schema, er stærkt på vej, og vil være at finde hos Kand.dk snart. Fordele ved XML XML har betydning for databeskrivelsen, ligesom HTML har det for datapræsentationen. Det er derfor, at XML er utrolig populært og dets anvendelse spredes mere og mere. Nogle af de helt åbenlyse betydninger er:
Ingen begrænsninger i antallet af elementer Flexibilitet med hensyn til udvidelse Egen fortolkning af elementer Mulighed for oprettelse af egne standarder inden for rammerne af XML Standard-værtøjer til fortolkning og validering af XML Simpel men kraftfuld mulighed for udveksling af data mellem forskelligartede applikationer, og dermed også mellem forskellige interessenter. Der findes sikkert også andre fordele, men også enkelte ulemper. Ulemperne ved XML Det faktum, at XML er tekstbaseret, og at dataelementer er "kodede", betyder, at selve beskrivelse af dokument strukturen (den såkaldte DTD'er) samt markering af data, ofte vil fylde mere end selve dataindholdet. Så selv om kapacitets krav ikke er noget man taler om, så skal XML ikke opfattes som en erstating af en database. Den er plads ineffektiv. Den kan heller ikke på en effektiv måde håndtere relationelle sammenhænge, selv om XQL har set dagens lys. Når XML er pladskrævende, er det samtidigt også et langsommere udvekslings format end f.eks. andre specifikke formater. I dette afsnit kommer vi ind på definitionen af et XML element, samt de helt generelle regler/syntaks der gælder for disse elementer. Den fulde XML syntaks fra World Wide Web Consortium (W3C) findes i kap. Syntaks til dette kursus. Grundregler Syntaksen for XML er ret simpel. Denne består af markeringer (også kaldet tags) og tekst. Se på følgende eksempel med en firma-markering: <firma>kurt Nielsen ApS</firma> En sådan linie i XML vil vi kalde for et XML-element (eller blot element). Det ovenstående element består af 3 dele: Start-markering <firma> Data-indhold Kurt Nielsen ApS Slut-markering </firma> Og nu kan vi præsentere de første 2 regler for et XML-element: Hvis der findes et start-markering, så skal der findes et slut-markering med samme navn. Start- og slut-markerings navnet skal være fuldstændig ens med hensyn til store og små bogstaver. Som følge heraf er følgende XML-dokument ikke korrekt udformet: <kunde> <firma>kurt Nielsen ApS
<telefon>12 34 56 78</Telefon> </kunde> idet slut-markering </firma> mangler og slut-markering </Telefon> anvender stort bogstav "T", hvor det skulle have været lille "t" Indskudte elementer I eksemplet er der ligeledes vist, at et element kan indeholde et andet element. Vi vil kalder det for et indskudte elementer. Og der gælder følgende regel : Slut-markering for indskudte elementer skal overholde hierarkiet. Det er altså ikke nok, at der er en slut-markering, og at navnet på denne er identisk med start-markeringen, det skal også forekomme symmetrisk (overholde hierarkiet). F.eks. er det næste XML-dokument derfor ikke korrekt udformet: <kunde> <telefon>12 34 56 78</kunde> </telefon> Den korrekte måde at skrive dette XML-dokument er: <kunde> <firma>kurt Nielsen ApS</firma> <telefon>12 34 56 78</telefon> </kunde> I øvrigt skal du være opmærksom på, at man ikke må navngive et element så det begynder med 'xml' (uanset om det er med store eller små bogstaver). Disse navne er reserveret af standardiserings organisationen (W3C). Tomme elementer Det er ikke altid, at et element har et indhold. Vi kalder dem "tomme elementer" og disse kan skrives på to måder: <telex></telex> eller <telex/> Begge notationer kan anvendes og det er tilladt at veksle mellem dem i et og samme dokument. Blandede elementer Sidst men ikke mindst, elementer kan både indeholde tekst og andre elementer på en og samme gang: <besked> Hej Tim, se lige det vedlagte billede! mvh
Kai <vedlagt>portrait.tiff</vedlagt> </besked> I det tidligere afsnit har vi set at elementer kan have et indhold, kan være tomme eller de kan indeholde andre elementer. I dette afsnit vil vi se, at man kan knytte egenskaber (også kaldt attributter) til elementer. Syntaks Den fulde XML syntaks fra W3C findes i kap. Syntaks til dette kursus. Her ser vi på de generelle regler omkring egenskaber. Men først et lille eksempel: <kontanter valuta='dkk'>24.00</kontanter> Og vi kan præsentere den første regel: En egenskab skal altid bestå af et navn/værdi par. For eksempel vil, en for HTML helt almindelig <option> markering, være ugyldig. <option value="1" selected>januar</option> I XML ville det se ud som følger: <option value="1" selected="">januar</option> Idet, Værdien af en egenskab altid skal placeres imellem to anførselstegn (enkelte ['] eller dobbelte ["]). Der må kun forefindes en egenskab med et og samme navn. Følgende XML har således begge fejl. <kassebeholdning> <checks valuta=dkk >154.00</checks> <kontanter valuta='dkk" valuta="sek" >254.00</kontanter> </kassebeholdning> Egenskaber vs. elementer Skal man designe et XML dokument, vil man meget ofte stille følgende spørgsmål: "Hvornår skal man anvende egenskaber (attributter), og hvornår skal man anvende indskudte elemnter?" Det er nemt at udskifte anvendelse af egenskaber med indskudte elementer. For eksempel kan følgende XML: <kassebeholdning> <kontanter valuta="dkk">200.00</kontanter> <kontanter valuta="sek">54.00</kontanter> </kassebeholdning> nemt omdannes til : <kassebeholdning>
<kontanter> <valuta>dkk</valuta> <belob>200.00</belob> </kontanter> <kontanter> <valuta>sek</valuta> <belob>54.00</belob> </kontanter> </kassebeholdning> Det modsatte er ikke altid lige oplagt. Men der er ikke noget krav i selve XML om, hvornår der skal anvendes det ene eller det andet. Den enkelte kan, inden for rammerne af syntaksen, selv afgøre dette. Der findes dog mange, som mener, at anvendelsen af egenskaber skal begrænses mest muligt. Hvorvidt dette passer til dig, eller om en mere intensiv anvendelse af egenskaber er optimalt for dig, må nok afgøres ud fra det du skal anvende XML til, end de mere generelle betragtninger. Du skal dog være opmærksom på følgende forhold, under dit designarbejde: egenskaber er een dimensionale, dvs. de kan ikke håndtere komplicerede struktur. egenskaber kan kun optræde een gang i et element (regel 3) og kan derfor ikke håndtere multiple forekomster i samme element (indskudte elementer kan). På nuværende tidspunkt burde du have en god ide om hvordan data kan markeres, så det overholder syntaksen. I dette kapitel vil vi beskæftige os lidt med den administration som kræves for at et XML-dokument kan blive anvendt i bredt forstand, f.eks af en "browser". Tegnsæt Har du lagt mærke til, at vi i det tidligere kapitel har benyttet markeringen <belob>, i stedt for <beløb>? Dette skyldes blandt andet, at almindelig browsere som f.eks IExplore, ikke kan forstå de danske specialtegn. Prøv selv : Derfor findes der en måde, hvorpå det er muligt at specificere, hvilket tegnsæt der anvendes. Dette er den såkaldte XML deklaration, og adskiller sig fra XML elementer ved at markeringen er udvidet med et '?' (spørgsmålstegn). <?xml version="1.0" encoding="iso-8859-1"?> Lige pludselig så virker det efter hensigten, vi kan anvende de danske tegn til navngivning af elementer samt egenskaber (attributter). Prøv selv.
Version Du har sikkert lagt mærke til, at der har sneget sig en anden egenskab ind i deklarationen. Dette er et "syntaktisk" krav, at versionen være angivet. Vil man anvende XML-deklarationen, så skal versionen være angivet. Den er tiltænkt fremtidig brug, men er altså påkrævet allerede nu. Prøv at gå tilbage til det foregående eksempel, fjern version="1.0" og se, hvad der sker. Ind imellem har man brug for at kunne kommentere et dokument, dvs. angive en tekst, som ikke skal være en del af XML data og som heller ikke skal fortolkes af det program eller bibliotek, der skal behandle dokumentet. Andre gange kan der være behov for at specificere yderligere instruktioner til det program eller bibliotek, der skal behandle dokumentet, dette kaldes "Proces Instruktioner" og er heller ikke en del af XML data. I dette kapitel vil vi kort komme ind på disse emner. <?xml version="1.0" encoding="iso-8859-1"?> <!-- En lille kommentar --> Men der knytter sig også nogle regler til en kommentar. 8. Kommentarer må ikke forekomme indenfor element markeringer. 9. Kommentarer må ikke indeholde '--' strengen. 10. Kommentarer må ikke slutte med et '-' tegn. Alle 3 regler er blevet overtrådt i følgende XML dokument: <?xml version="1.0" <!-- Anvendes ikke --> encoding="iso- 8859-1"?> <!-- Dette beløb er --alt-- for småt --> <!-- heldigvis er vi snart færdige ---> Proces Instruktioner Proces Instruktioner er meget lidt brugt af almindelige udviklere, men vi tager det med for en helheds skyld. Disse "Process Instruktioner" er instruktioner til den applikation der anvender fortolkerprogrammet eller biblioteket. Det er altså ikke en del af XML data, og det skal heller ikke bruges af fortolkeren. Notationen minder meget om XML deklarationen. Vi har tidligere set, hvordan deklarationer påvirkede selve fortolkeren uden at være en del af XML data. Men dette skyldes, at XML deklarationen er en "Proces Instruktion", blot beregnet på selve fortolkeren.