marți, 13 ianuarie 2009

XML: Atribute versus Elemente

Lucrand la cel mai recent produs al nostru, un parser de arhive pentru diverse aplicatii de tip instant messenger, una din sarcinile pe care le-am avut de indeplinit a fost aceea de a construi o serie de fisiere XML, prin intermediul carora sa modelez informatia legata de tot ceea ce insemna o arhiva specifica unei astfel de aplicatii:

<?xml version="1.0" encoding="UTF-8" ?>

<log>

<auth>

<username value="user1">

<password value="pass1"/>

</auth>

Intrebare fireasca in aceasta situatie: user1 este valoare a elementului <username/> sau poate fi valoarea luata de un atribut al acestui element. Intrebare care se pare ca este pe buzele tuturor celor ce opteaza pentru modelarea datelor cu ajutorul XML.

Raspunsuri variate. Sigur este ca nu exista nici o regula, nici un standard in ceea ce priveste aceasta alegere.

 

Un articol interesant, scris de Uche Ogbuji, de la IBM, mi-a atras atentia. Acesta propune un set de 4 reguli pentru rezolvarea acestei dileme:

·         daca informatia poate fi marcata ea insasi cu elemente, atunci devine element.

·         daca este mai bine ca informatia sa devina atribut, dar exista posibilitatea ca elementul in cauza sa primeasca si alte atribute, atunci se recomanda folosirea unui nou etaj, de copii, informatiile devenind valori ale elementelor.

·         daca informatia trebuie sa se incadreze intr-un standard asemanator DTD, acesta cerand atribute specifice (ID, IDREF, ENTITY), se foloseste un atribut.

·         daca informatia nu trebuie normalizata, in vederea caracterelor whitespace, se folosesc elementele.

 

Cum bine remarca autorul articolului referit, lucrurile nu sunt atat de clare cand vine vorba de identificarea cazului in care te afli la un moment dat. Lasam asadar regulile la o parte si incercam cateva „sugestii”.

 

In primul rand, din categoria asa-NU:

·         faceti totul un element”: argumentele folosite pentru a sprijini aceasta idee variaza de la „Atributele complica lucrurile” pana la „Atributele inhiba extensibilitatea”. Totusi, nefolosirea atributelor, anuleaza unul dintre cele mai importante aspecte ale XML-ului.

·         daca este genul de continut ce trebuie afisat in browser, folositi valoarea unui element”. Problema cu aceasta sugestie este faptul ca incurajeaza utilizatorii sa gandeasca design-ul de continut al XML in termeni de prezentare, doua aspecte care este important sa nu fie amestecate.

 

Intr-un articol viitor, vom reveni si cu sugestiile de tip asa-DA.

 

Surse:

http://www.ibm.com/developerworks/xml/library/x-eleatt.html

http://xmleverywhere.com/newsletters/20000525.htm

 

Niciun comentariu: