Elementy XML a atrybuty
W XML nie ma reguł dotyczących tego, kiedy używać atrybutów, a kiedy używać elementów podrzędnych.
Użycie elementów a atrybutów
Dane mogą być przechowywane w elementach podrzędnych lub w atrybutach.
Spójrz na te przykłady:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
W pierwszym przykładzie płeć jest atrybutem. W końcu seks jest elementem potomnym. Oba przykłady dostarczają tych samych informacji.
Nie ma reguł dotyczących tego, kiedy używać atrybutów, a kiedy używać elementów podrzędnych. Z mojego doświadczenia wynika, że atrybuty są przydatne w HTML, ale w XML powinieneś ich unikać. Użyj elementów podrzędnych, jeśli informacje przypominają dane.
Mój ulubiony sposób
Lubię przechowywać dane w elementach potomnych.
Poniższe trzy dokumenty XML zawierają dokładnie te same informacje:
W pierwszym przykładzie użyto atrybutu daty:
<note date="12/11/2002">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
W drugim przykładzie użyto elementu daty:
<note>
<date>12/11/2002</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Rozwinięty element daty jest używany w trzecim: (TO JEST MOJE ULUBIONE):
<note>
<date>
<day>12</day>
<month>11</month>
<year>2002</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Unikasz używania atrybutów?
Czy powinieneś unikać używania atrybutów?
Niektóre problemy z atrybutami to:
- atrybuty nie mogą zawierać wielu wartości (elementy podrzędne mogą)
- atrybuty nie są łatwo rozszerzalne (dla przyszłych zmian)
- atrybuty nie mogą opisywać struktur (elementy potomne mogą)
- atrybuty są trudniejsze do manipulowania przez kod programu
- wartości atrybutów nie są łatwe do przetestowania względem DTD
Jeśli używasz atrybutów jako pojemników na dane, otrzymujesz dokumenty, które są trudne do odczytania i utrzymania. Staraj się używać elementów do opisu danych. Używaj atrybutów tylko w celu podania informacji, które nie są istotne dla danych.
Nie kończ w ten sposób (nie tak powinno się używać XML):
<note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
Wyjątek od mojej reguły atrybutów
Zasady zawsze mają wyjątki.
Moja zasada dotycząca atrybutów ma jeden wyjątek:
Czasami przypisuję referencje ID do elementów. Te odwołania do identyfikatorów mogą być używane do uzyskiwania dostępu do elementów XML w podobny sposób, jak atrybuty NAME lub ID w HTML. Ten przykład pokazuje to:
<messages>
<note id="p501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="p502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not!</body>
</note>
</messages>
Identyfikator w tych przykładach jest tylko licznikiem lub unikalnym identyfikatorem identyfikującym różne notatki w pliku XML, a nie częścią danych notatki.
Chcę tutaj powiedzieć, że metadane (dane o danych) powinny być przechowywane jako atrybuty, a same dane powinny być przechowywane jako elementy.