XML -elemente vs. eienskappe
In XML is daar geen reëls oor wanneer om eienskappe te gebruik en wanneer om kinderelemente te gebruik nie.
Gebruik van elemente vs. eienskappe
Data kan in kinderelemente of in eienskappe gestoor word.
Kyk bietjie na hierdie voorbeelde:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
In die eerste voorbeeld is seks 'n eienskap. In die laaste is seks 'n kinderelement. Beide voorbeelde verskaf dieselfde inligting.
Daar is geen reëls oor wanneer om eienskappe te gebruik en wanneer om kinderelemente te gebruik nie. My ervaring is dat eienskappe handig is in HTML, maar in XML moet jy probeer om dit te vermy. Gebruik kinderelemente as die inligting soos data voel.
My gunsteling manier
Ek hou daarvan om data in kinderelemente te stoor.
Die volgende drie XML-dokumente bevat presies dieselfde inligting:
'n Datum-kenmerk word in die eerste voorbeeld gebruik:
<note date="12/11/2002">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
'n Datumelement word in die tweede voorbeeld gebruik:
<note>
<date>12/11/2002</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
'n Uitgebreide datumelement word in die derde gebruik: (DIT IS MY GUNSTELING):
<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>
Vermy die gebruik van eienskappe?
Moet jy die gebruik van eienskappe vermy?
Sommige van die probleme met eienskappe is:
- eienskappe kan nie veelvuldige waardes bevat nie (kinderelemente kan)
- eienskappe is nie maklik uit te brei nie (vir toekomstige veranderinge)
- eienskappe kan nie strukture beskryf nie (kinderelemente kan)
- eienskappe is moeiliker om deur programkode te manipuleer
- kenmerkwaardes is nie maklik om teen 'n DTD te toets nie
As jy eienskappe as houers vir data gebruik, eindig jy met dokumente wat moeilik is om te lees en in stand te hou. Probeer elemente gebruik om data te beskryf. Gebruik eienskappe slegs om inligting te verskaf wat nie relevant is vir die data nie.
Moenie so eindig nie (dit is nie hoe XML gebruik moet word nie):
<note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
'n Uitsondering op my kenmerkreël
Reëls het altyd uitsonderings.
My reël oor eienskappe het een uitsondering:
Soms ken ek ID-verwysings aan elemente toe. Hierdie ID-verwysings kan gebruik word om toegang tot XML-elemente te verkry op baie dieselfde manier as die NAAM- of ID-kenmerke in HTML. Hierdie voorbeeld demonstreer dit:
<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>
Die ID in hierdie voorbeelde is net 'n teller, of 'n unieke identifiseerder, om die verskillende notas in die XML-lêer te identifiseer, en nie 'n deel van die notadata nie.
Wat ek hier probeer sê, is dat metadata (data oor data) as eienskappe gestoor moet word, en dat data self as elemente gestoor moet word.