(toiminnot)

hwechtla-tl: XML

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
viime muutokset


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


kommentoi (viimeksi muutettu 27.06.2005 15:41)