Extensible markup language.
Minä väitän, että XML ei ole paras ratkaisu oikeastaan mihinkään. Se ei tuota lisäarvoa, mutta sen käytön opetteleminen tuottaa lisää vaivaa.
kategoria: työkalut (huonot sellaiset)
Valitse tästä, mikä vaikuttaa helpoimmalta kirjoittaa, lukea ja konelukea:
(1)
Section: foo Parameter1: bar Section: foo/sub1 Parameter2: ips, ops, öps Section: ez
(2)
(conf '((foo (param1 . bar)
(sub1 (param2 ips ops öps)))
(ez)))
(3)
<myconf:conf xmlns:myconf="http://blahblah.com/myconf.dtd">
<myconf:section name="foo">
<myconf:parameter name="Parameter1" value="bar"/>
<myconf:subsection name="sub1">
<myconf:parameter name="Parameter2">
<myconf:listitem>ips</myconf:listitem>
<myconf:listitem>ops</myconf:listitem>
<myconf:listitem>öps</myconf:listitem>
</myconf:parameter>
</myconf:subsection>
</myconf:section>
<myconf:section name="ez"/>
</myconf:conf>
Ja hei, tässä ei vielä edes käytetty mitään epäilyttävää. Ettekä ole joutuneet katsomaan DTD:a tai schemaa... ja katsokaapa huviksenne, kuinka monen sadan kilon kirjastoja on olemassa "ratkaisuna" tähän, mikä hoituisi noin 5 linjalla Perliä (josta en muuten pidä)...
(Metajuttu: tätä sivua kirjoitettaessa jouduin kakkosesimerkkiä varten jo hidastamaan kirjoittamista, mutta vasta kolmosesimerkissä onnistuin tekemään virheitä.)
(4)
conf = { 'foo': { 'param1': 'baz',
'sub1': { 'param2': ['ips', 'ops', 'öps'] }},
'ez': None }
yllä hakasuljeongelma -^.
XML:n standardi makroprosessori, XSLT, on vielä pahempi. Mutta ehkä siitä voipi olla jotain iloa. Itse en osaa XSLT:a kunnolla, jotta voisin demonstroida sitä, mutta haastan kenet tahansa sitä taitavan kirjoittamaan tämän skriptin (sama idea, ei tarkalleen sama funktionaliteetti):
print "<dl>\n";
while (<>) {
( $tagname, $args ) = /<myconf:([A-Za-z]*) ([^>]*)>/;
print "<dt>$tagname</dt> <dd>$args</dd>\n" if $tagname;
}
print "</dl>\n";
(mielenkiintoista. En osaa perliä kunnolla mutta tässä ohjelmassa ei ollut yhtäkään virhettä ensimmäisellä yrittämällä.)