XML -elementen versus attributen
In XML zijn er geen regels over wanneer attributen moeten worden gebruikt en wanneer onderliggende elementen moeten worden gebruikt.
Gebruik van elementen versus attributen
Gegevens kunnen worden opgeslagen in onderliggende elementen of in attributen.
Kijk eens naar deze voorbeelden:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
In het eerste voorbeeld is geslacht een attribuut. In het laatste is seks een kindelement. Beide voorbeelden geven dezelfde informatie.
Er zijn geen regels over wanneer attributen moeten worden gebruikt en wanneer onderliggende elementen moeten worden gebruikt. Mijn ervaring is dat attributen handig zijn in HTML, maar in XML moet je ze proberen te vermijden. Gebruik onderliggende elementen als de informatie aanvoelt als gegevens.
Mijn favoriete manier
Ik hou ervan om gegevens op te slaan in onderliggende elementen.
De volgende drie XML-documenten bevatten exact dezelfde informatie:
In het eerste voorbeeld wordt een datumattribuut gebruikt:
<note date="12/11/2002">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
In het tweede voorbeeld wordt een datumelement gebruikt:
<note>
<date>12/11/2002</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Een uitgebreid datumelement wordt gebruikt in de derde: (DIT IS MIJN FAVORIET):
<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>
Vermijd het gebruik van attributen?
Moet u het gebruik van attributen vermijden?
Enkele van de problemen met attributen zijn:
- attributen mogen niet meerdere waarden bevatten (onderliggende elementen kunnen dat wel)
- attributen zijn niet gemakkelijk uitbreidbaar (voor toekomstige wijzigingen)
- attributen kunnen geen structuren beschrijven (onderliggende elementen kunnen dat wel)
- attributen zijn moeilijker te manipuleren door programmacode
- attribuutwaarden zijn niet gemakkelijk te testen tegen een DTD
Als je attributen gebruikt als containers voor data, krijg je documenten die moeilijk te lezen en te onderhouden zijn. Probeer elementen te gebruiken om gegevens te beschrijven. Gebruik attributen alleen om informatie te verstrekken die niet relevant is voor de gegevens.
Eindig niet zo (dit is niet hoe XML moet worden gebruikt):
<note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
Een uitzondering op mijn eigenschapsregel
Regels hebben altijd uitzonderingen.
Mijn regel over attributen heeft één uitzondering:
Soms wijs ik ID-verwijzingen toe aan elementen. Deze ID-referenties kunnen worden gebruikt om toegang te krijgen tot XML-elementen op vrijwel dezelfde manier als de NAME- of ID-attributen in HTML. Dit voorbeeld toont dit aan:
<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>
De ID in deze voorbeelden is slechts een teller, of een unieke identificatie, om de verschillende notities in het XML-bestand te identificeren, en geen onderdeel van de notitiegegevens.
Wat ik hier probeer te zeggen, is dat metadata (gegevens over gegevens) als attributen moeten worden opgeslagen, en dat gegevens zelf als elementen moeten worden opgeslagen.