Na het bouwen een wat mij betreft redelijk geslaagde parser (XML/XHTML), wil ik meer flexibiliteit inbouwen. Dat betekent dat ik echt met alles rekening moet kunnen houden.
Ik kwam op het idee om dan ook maar een parser te bouwen voor DTD's, en daar heb ik wel aardige ideeën over, maar ik stuitte op een rare regel in al bestaande DTD's, namelijk de html DTD's van www.w3c.org.
Bij elk element in een XML document, is in de document type definition vastgelegd welke waarden er tussen de betreffende tags mogen staan. Veelal is dat een datatype waarde, of een verzameling van een groep andere tags.
Ook zijn er meer complexe mogelijkheden, gelijkend op regular expressions, bijvoorbeeld het volgende:
Deze kan ik nog wel begrijpen, en het gaat ook wel lukken om dit toe te passen, maar ik stuitte ook op de volgende regel, en die kwam vrij onlogisch over:
Hierin is %head.misc; de verzameling: (script|style|meta|link|object)*
Kortom, dit levert altijd een match. Er hoeft dus niets te staan.
Maar waarom is dit alles gewikkeld in zo een vage constructie? Ik weet dat de title tag verplict is, en dat de base tag optioneel is. Slaat dit uberhaupt ergens op, of is dit gewoon een fout geweest en is het gewoon het volgende:
Dit kwam ik later tegen op een pagina van W3C. (HTML 4.01 REC) En dit is ook wat ik eigenlijk had verwacht.
Ik kom niet echt op een logische interpretatie van die ene regel, zoals vermeld in http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
Kan iemand hierbij verlichting geven? Ik wil uiteraard gráág verder met die parser, maar dan moet ik wel constructies als deze begrijpen, anders kan ik er net zo goed niet aan beginnen
Ik kwam op het idee om dan ook maar een parser te bouwen voor DTD's, en daar heb ik wel aardige ideeën over, maar ik stuitte op een rare regel in al bestaande DTD's, namelijk de html DTD's van www.w3c.org.
Bij elk element in een XML document, is in de document type definition vastgelegd welke waarden er tussen de betreffende tags mogen staan. Veelal is dat een datatype waarde, of een verzameling van een groep andere tags.
Ook zijn er meer complexe mogelijkheden, gelijkend op regular expressions, bijvoorbeeld het volgende:
code:
1
| <!ELEMENT table (caption?, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+))> |
Deze kan ik nog wel begrijpen, en het gaat ook wel lukken om dit toe te passen, maar ik stuitte ook op de volgende regel, en die kwam vrij onlogisch over:
code:
1
| <!ELEMENT head (%head.misc;, ((title, %head.misc;, (base, %head.misc;)?) | (base, %head.misc;, (title, %head.misc;))))> |
Hierin is %head.misc; de verzameling: (script|style|meta|link|object)*
Kortom, dit levert altijd een match. Er hoeft dus niets te staan.
Maar waarom is dit alles gewikkeld in zo een vage constructie? Ik weet dat de title tag verplict is, en dat de base tag optioneel is. Slaat dit uberhaupt ergens op, of is dit gewoon een fout geweest en is het gewoon het volgende:
code:
1
| <!ENTITY % (&head.content; title, base?)> |
Dit kwam ik later tegen op een pagina van W3C. (HTML 4.01 REC) En dit is ook wat ik eigenlijk had verwacht.
Ik kom niet echt op een logische interpretatie van die ene regel, zoals vermeld in http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
Kan iemand hierbij verlichting geven? Ik wil uiteraard gráág verder met die parser, maar dan moet ik wel constructies als deze begrijpen, anders kan ik er net zo goed niet aan beginnen