fredag, januari 19, 2007

XML och scheman

Nu har kursen börjat och som första del har vi analyserat kvitton (vanliga kvitton från matvaruaffärer) för att skapa ett enhetligt vokabulär och senare för att normalisera informationen. Kvitton ifrån olika affärer ser olika ut men innehåller ungefär samma information. Problemet är "ungefär", varje affär vill presentera sina kvitton på sitt sätt. Lösningen (som jag tror) är att man sparar layouten i en sepparat XML fil som bearbetas av en XSLT som binder samman layout (och affärernas egna termer) med databas (som i sin tur finns utspridd över ytterliggare XML filer). På så vis kan man lätt lägga till nya affärer men använda samma back-end, vilket är trevligt om man vill kunna räkna statistik exempelvis per vara. I XML finns det tre olika typer av scheman som kan användas för validering. Det finns olika nivåer av validering varav den enklaste är att filen är välutformad vilket innebär att alla taggar som börjar måste sluta, exmepelvis: <tag>innehåll</tag> <-- gilltig <tag>innehåll <-- ogilltig Man kan också skapa ett element (det finns element och attribut, kort kan man säga att element är delar med < > och attribut står inom en starttag/tomtag) som tomt: </tag> <-- gilltig I den andra änden av valideringen kontrolleras att innehåller är semantiskt korrekt. Ett exempel på det kan vara att vid angivelse av tidsperiod ska stratdatum inträffa före slutdatum. Mittemellan finns validering av datatyper men det stöds inte av alla scheman. De scheman som jag hittills kommit i kontakt med är DTD, XSD och Relax NG. De skiljer sig åt ganska kraftigt och då framförallt DTD som uppfanns någon gång på 80-talet. Jag ska försöka förklara lite mer ingående.

DTD

Document Type Definition, den första stora standarden för att validera XML. Den är inte skriven i XML själv och är därför relativt lätt att läsa för en människa och går ganska fort att skriva. Det finns inte något stöd för att validera datatyper. DTD tillåter förändring av informationen under tiden som den valideras och vissa anser att det är väldigt korkat (vem vill ha en validator som förändrar dokumentet som valideras) medans andra tycker att det är fullkomligt briljant eftersom det tillåter större frihet (PERL).

XSD

Xml Schema Definition, en applikation av XML. En stor förändring jämfört med DTD men inte nödvändigtvis till det bättre. XSD är betydligt mer tungrott än DTD eftersom det måste följa XML syntaxen vad gäller start och slut av taggar. En stor fördel med XSD är dock användandet av datatyper, man kan exempelvis begränsa ett värde till INT, DOUBLE eller DATE. Microsoft har hängt på och jag kommer säkert att arbeta med XSD inom en nära framtid. En annan skillnad mot DTD är att XSD låter dig sätta begränsningar i antal barn som en viss nod (element) kan ha. Exmepelvis att man vill tillåta en grupp att ha mellan 20 och 30 medlemmar.

Relax NG

Relaxing, det senaste av schemana nämnda här. Relax NG stödjer två olika former av syntax, den vanliga XML syntaxen och en egen kompakt syntax som påminner om DTD. Under utvecklingen av XSD var det flera inblandade som insåg att det vart det höll på att barka hän och övergav skeppet för att arbeta med Relax NG som påminner mer om XSD än DTD i sin funktionalitet men som tagit bort mycket av det som stör för användaren. Om man vill ha stöd för datatyper kan man använda de som finns i XSD. Jag är nybörjare och varken kan eller vill uttala mig om vilken typ som är bäst men troligtvis är de bra i olika sammanhang.

Inga kommentarer: