Anvendelse af XML data islands

I et html-dokument kan man lave en reference til et XML-dokument, der indeholder data (f.eks. mit CV) og herved lave en anderledes visning af disse data. Jeg havde svært ved at se, hvordan det kunne være smart i forhold til mit CV og valgte i stedet at bygge en øvelse i denne teknik op omkring min linksamling. Bonus herved blev at jeg så fik taget mig sammen til i det mindste at påbegynde en linksamling der har relevans til emnerne her på janeinabox. Jeg kunne ikke rigtig få det til at fungere og tyede til "XML i Praksis - Jakob Kristiansen" som igen havde et fint eksempel bygget op omkring nogle produkter. Men selv dette voldte mig nogle problemer, og jeg har på fornemmelsen, at diverse sikkerhedsindstillinger i Internet Explorer kan have en indvirkning på hvordan det fungerer. Det lykkedes mig at afprøve hans eksempel ved først at indlæse hans .xml-fil i min browser.

Den vigtigste erfaring jeg har gjort mig i forhold til XML data islands er, at det fungerer lettest hvis alle data er på samme niveau i XML-filen. Hermed mener jeg, at jeg til at starte med havde valgt at resultatet af X-diagrammet til linksamlingen skulle se således ud:

<?xml version="1.0" encoding="Unicode"?>
<linksamling>
	<emne id="">
		<link id="">
			<httpadresse></httpadresse>
			<beskrivelse></beskrivelse>
		</link>
	</emne>	
</linksamling>
</xml>

Idéen med "emne" var at jeg ville bruge det senere. Datamængden - det vil sige antallet af links - vil løbende blive udbygget. Det smarteste i den forbindelse er at være ligeglad med i hvilken rækkefølge linkene bliver "smidt ind i" XML-dokumentet, men da jeg samtidig allerede nu aner, at det vil være smart at kunne vise linkene udfra en emneinddeling (som f.eks. "XML", "RSS" o.l.) er "emne" bibeholdt i det endelige dokument. "Emne" kan formentlig anvendes som en sorteringsmåde senere. Dog er det ikke længere "omkransende" for et link. Et link derimod, omkranser de data der er væsentlige.
Se det som et kundekartotek. Det indeholder oplysninger om flere kunder. Hvert enkelt kunde-element indeholder forskellige oplysninger om den enkelte kunde. På samme måde er det med linksamlingen.
Den indeholder mange links, og hvert enkelt link-element indeholder forskellige oplysninger om det enkelte link. Specifikt er det væsentligste: httpadressen og beskrivelsen af hvad linket peger på. En linksamling der blot består af en masse httpadresser er trods alt for kedeligt. "Emne" er derfor flyttet ind i et link-element.

<?xml version="1.0" encoding="Unicode"?>
<linksamling>	
	<link id="">
		<emne></emne>
		<httpadresse></httpadresse>
		<beskrivelse></beskrivelse>
	</link>		
</linksamling>
</xml>

Ved eksemplet ovenfor fik jeg herved også "rettet alle data ind på samme niveau" hvilket gjorde det lettere at få de egentlige data fra den fyldte linksamling vist på en html-side.
For at se hvordan det i praksis fungerer henviser jeg til min linksamling, men kodemæssigt sker der følgende i selve html-dokumentet (mit eksempel er bygget op omkring et eksempel fra: "XML i Praksis - Jakob Kristiansen"):
Først laves der en reference til xml-dokumentet der indeholder data til linksamlingen. Jeg har kaldt det dokument "links.xml"

<xml id="linksamling" src="links.xml"></xml>
<input type="button" onclick="oTabel.previousPage();" value="<" />
<input type="button" onclick="oTabel.nextPage();" value=">" />

De to sidste linier laver de små knapper med pile i til at bladre. Det væsentlige ved disse er, at ved at klikke på dem, henter de oplysning fra tabellen (som har id=oTabel), som igen henter oplysninger fra xml-dokumentet. Herved kan brugeren komme til at "bladre" i linksamlingen.
Så bygges der en tabel op og i selve tabel-elementet laves følgende:

<table border="0" cellspacing="4" id="oTabel" datasrc="#linksamling" datapagesize="2">

datasrc="#linksamling" henviser til id'et på referencen til XML-dokumentet. datapagesize="2" bestemmer hvor mange links jeg ønsker bliver vist pr. gang. Og det var faktisk det.

Det drilske var så - for der er altid noget der lige driller - at selve linket, det vil sige værdien i elementet <httpadresse></httpadresse> ikke blev vist på html-siden så brugeren kunne klikke på det. Jakob Kristiansens eksempel indeholdte ikke noget med httpadresser. Jeg forsøgte forgæves at finde eksempler på nettet der løste denne problemstilling, og jeg kom tæt på. Heldigvis var det hver gang det samme resultat. Eksemplerne viste blot linksene som almindelig tekst. Stædig som jeg er måtte jeg så selv i gang. Det tog en del forsøg, men tilsidst fandt jeg ud af, at det kan gøres på følgende måde:

<tr valign="top"><td><b>Adresse</b></td>
<td><a href="linksamling" datafld="httpadresse"><span datafld="httpadresse"></span>
--></a></td></tr>

Som i andre eksempler er pilen indsat for at demonstrere at kodelinien egentlig fortsætter uden ny linie eller mellemrum.
Det interessante ved ovennævnte kode var, at både span-elementet og a href-elementet skal have sat datafld-attributten til at pege på "httpadresse" og a href-attributten skal særskilt have information om at pege på id-referencen til "links.xml".
Og så var det dét!

Valid CSS!

Valid XHTML 1.0!