On tässä tullut käyteltyä nyt jo jonkin aikaa OS X:ää niin pitää kommentoida hieman tyhmyyksiä siitä.
Ensimmäisenä viimeisin huomioni: property listat. Softat tunkevat asetuksensa ja muutakin plist-tiedostoihin. Nättiä että yhtenäinen formaatti jonka Apple on jopa määrittänyt. Ja vielä XML:ää. Eli käsittely on helppoa? No ei ihan.
plist-tiedostot sisältävät dictejä, jotka sisältävät avain-arvo -pareja. Tähän asti ihan ok. Mutta miten avain-arvo -parit on tehty? Siten, että sekä avaimet että arvot ovat suoraan dictin lapsia. Eli näin:
<dict>
<key>asd</key>
<string>joo</string>
<key>dsa</key>
<string>ei</string>
</dict>
Ok. Mites tällaisesta sitten haet nätisti tietyn avaimen arvon? No onnistuuhan se XPathilla hakemalla vaikka avain jonka innertext on sopiva ja sen next-sibling. Ei kovin nättiä. Entä jos haluan poistaa jonkin avain-arvo -parin? En voi tehdä sitä atomaarisesti mitenkään. Koko formaatti tuntuu olevan vain serialisointimuoto, eikä sitä pysty käyttämään XML:nä mitenkään järkevästi.
Entäs jos haluankin tehdä muutoksia tietoihin? Pitää varmistua että tägit ovat varmasti oikein peräkkäin. Ja sehän ei XML:n perusperiaatteisiin oikein sovi. Tägien pitää voida olla missä järjestyksessä tahansa, koska kyseessä on rakenteinen formaatti. Tietysti järjestyksellä on merkitystä, mutta ei siten että toisiinsa liittyvät asiat erotetaan.
Nykyisellään plist vastaa ini-tiedostoa, tai itse asiassa ini-tiedostot ovat jopa parempia koska niissä osiot nimetään. plistissä dict on vain dict.
Miten tämä sitten pitäisi tehdä oikein? Onhan kiva että datasta tietää mitä tyyppiä se on ja se löytyy helposti. Joten kerrotaan ne asiat, mutta ei sotketa asioita sen enempää. Esimerkiksi näin:
<dict>
<value key="asd" type="string">joo</value>
<value key="dsa" type="string">ei</value>
</dict>
Eli ei ollenkaan vaikeaa. Ja nyt voi sitten hakea nätisti halutun arvon, poistaa sen atomaarisesti jne. Miksi aina XML-formaatit pitää tehdä väärin? Muina esimerkkeinä Finvoice ja Ficoran domaininrekisteröinti-XML.