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ä.)