Ik probeer het nog steeds te bevatten maar wat biedt XML als voordeel ten opzichte van een database?
Het zijn in weze hele andere dingen. Het slaat allebei data op, sure, maar de toepassingen zijn heel anders. Je kunt je mischien ook wel af vragen waarom we filesystems hebben om data in op te slaan, als dat ook in een DB kan, of andersom.
Soms overlappen al deze functionaliteiten elkaar wel. Het voordeel van XML is dan dat je een defacto serialisation formaat hebt. Ook een DB heeft haar gegevens natuurlijk uiteindelijk ergens op disk staan. Maar in welk formaat is dat? Losse binaire files? Raw blocks op een eigen partitie? Welk formaat het ook is, in veel gevallen is het niet makkelijk een file'tje die je even overstuurt.
Daarbij komt, je kunt een XML file makkelijk onder versie controlle zetten en het kan zowel met tools die het speciale formaat herkennen ge-edit worden als met de hand.
Als voorbeeld, neem bijvoorbeeld het web.xml bestand in een (java) web applicatie. Dit is een bestand dat configuratie data bevat. Je zou dit ook vanuit een DB kunnen laden, maar dat is redelijk onzinnig. web.xml is pure statische data dat in z'n geheel regel voor regel verwerkt moet worden.
Een DB zou handig zijn als het om dynamische data gaat (data die tijdens de runtime continue veranderd wordt) en waar er sprake is van specificieke items die op request benaderd moet worden. Bij een configuratie bestand is dat allemaal niet van toepassing.
Zelfs als je wel specifieke data 'items' wilt, kun een DB vrij zinloos zijn. Neem bijvoorbeeld i18n keys. Je wilt niet voor elke key een query naar je DB doen. Dat is veels te langzaam. Zogenaamde i18n resource bundles worden dan ook direct in het geheugen geladen en in een hashmap geplaatst. De keys kunnen dan in een XML bestand geplaatst worden, dat dan puur en alleen als simpel serialisatie formaat dient.
Weer een andere toepassing is als het om kleine chunks van data gaat met een sterke hierarchy. Neem bijvoorbeeld JSF pagina layouts. Deze beschrijven in XML de layout van een pagina, waarbij components genest zijn en vele attributen hebben. Dit soort data kun je echt niet met goed fatsoen in een relationeel model stoppen. Je editors zouden dan de gehele pagina beschrijving als 1 object uit de DB moeten trekken. Dat kun je doen, maar je hebt dan nog steeds het XML formaat nodig voor de interne structuur nodig.