robbinh: Pre-cies, het is om data te 'storen' en eventueel te 'formatten'. Maar het wordt wel degelijk geparst!
Mwah, dit past niet bepaald in de kritiek die ik op de poster had.
Als je XML wilt inlezen moet het inderdaad geparsed (vreselijke verbastering

) worden, maar dat is een irrelevant iets in het hele concept van XML. De syntax van XML is zelfs volkomen irrelevant in de hele visie van XML. Het enige relevante van de syntax van XML is, dat het geparsed kan worden door een
generieke parser. XML is een standaard voor het representeren van boom-vormige data (om precies te zijn reguliere bomen, die beschrijven kunnen worden met een regular tree grammar). Het is hierdoor in feite een abstract data-type: een data structuur waar je data in kunt stoppen. De syntax van XML is slechts een syntax voor deze boom-vormige data structuren.
Het gaat dus niet om de syntax, het parsen of de tags:
het idee van XML is data niet uitgewisseld moet worden in een syntax, maar in bomen..
Omdat data niet uitgewisseld wordt in een bepaalde syntax, is er voor het inlezen van deze data geen specifieke parser nodig. Voor een specifieke
concrete syntax is er namelijk een parser nodig. Op zich allemaal geen probleem: een parser is zo gegenereerd uit een grammatica, maar toch blijkt het in de praktijk niet altijd even prettig te werken.
Een parser zet een stukje syntax om naar een
parse-tree. Deze parse-tree is een
boom die uitlegd wat er bedoeld wordt met een stukje concrete syntax. Het hele idee van XML is in feite om, als we toch altijd het liefste op bomen willen werken, de hele stap naar concrete syntax en de bijbehorende parsers maar gewoon over te slaan. We wisselen de data gewoon uit in boom-vorm. Deze boom-vorm heeft een bepaalde syntax die geparsed kan worden door een
generieke parser voor alle XML documenten.
De productie-regels die je ziet in een grammatica voor een bepaalde taal komen eigenlijk vrijwel 1 op 1 overeen met XML elementen. Ik gaf een
tijdje geleden een voorbeeld in W&G, wat ik hier maar even plak:
Klein voorbeeldje: 4 + 5 kan je als volgt in XML vorm representeren:
code:
1
2
3
4
| <plus>
<int-const>4</int-const>
<int-const>5</int-const>
</plus> |
Nog een klein voorbeeldje: 4 + 5 * 6 kan je als volgt in XML vorm representeren:
code:
1
2
3
4
5
6
7
| <plus>
<int-const>4</int-const>
<multiply>
<int-const>5</int-const>
<int-const>6</int-const>
</multiply>
</plus> |
Als je een grammatica zou willen schrijven voor deze rekenkundige expressies zou je bijvoorbeeld dit kunnen doen:
code:
1
2
3
| plus: Exp "+" Exp -> Exp
multiply: Exp "*" Exp -> Exp
int-const: IntLiteral -> Exp |
Uit deze
context-vrije grammatica, die bestaat uit
productie-regels met een label, zou je (met nog wat extra informatie) een parser kunnen genereren. Als je de parser zou toepassen op een rekenkundige expressie zoals in de voorbeelden hierboven krijg je een boom die exact hetzelfde is als de XML die ik hierboven gaf.
Even samenvattend:
De uitwisseling van data in XML formaat is dus in feite de uitwisseling van data in boom-vorm.
Dat is waar alles om draait bij XML. De syntax van XML is hierbij irrelevant (alhoewel de syntax van XML zeker voordelen heeft die de universaliteit van XML vergroten).
Hum, tis niet echt een enorm gestructureerd verhaal geworden, maar goed

.