XML -Elemente vs. Attribute
In XML gibt es keine Regeln darüber, wann Attribute und wann untergeordnete Elemente verwendet werden sollen.
Verwendung von Elementen vs. Attributen
Daten können in untergeordneten Elementen oder in Attributen gespeichert werden.
Schauen Sie sich diese Beispiele an:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
Im ersten Beispiel ist Sex ein Attribut. Im letzten ist Sex ein untergeordnetes Element. Beide Beispiele liefern dieselben Informationen.
Es gibt keine Regeln darüber, wann Attribute und wann untergeordnete Elemente verwendet werden sollen. Meine Erfahrung ist, dass Attribute in HTML praktisch sind, aber in XML sollten Sie versuchen, sie zu vermeiden. Verwenden Sie untergeordnete Elemente, wenn sich die Informationen wie Daten anfühlen.
Mein Lieblingsweg
Ich speichere Daten gerne in untergeordneten Elementen.
Die folgenden drei XML-Dokumente enthalten genau die gleichen Informationen:
Im ersten Beispiel wird ein Datumsattribut verwendet:
<note date="12/11/2002">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Im zweiten Beispiel wird ein Datumselement verwendet:
<note>
<date>12/11/2002</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Im dritten wird ein erweitertes Datumselement verwendet: (THIS IS MY FAVORITE):
<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>
Vermeiden Sie die Verwendung von Attributen?
Sollten Sie die Verwendung von Attributen vermeiden?
Einige der Probleme mit Attributen sind:
- Attribute können nicht mehrere Werte enthalten (untergeordnete Elemente können)
- Attribute sind nicht einfach erweiterbar (für zukünftige Änderungen)
- Attribute können keine Strukturen beschreiben (untergeordnete Elemente können)
- Attribute sind schwieriger durch Programmcode zu manipulieren
- Attributwerte sind nicht einfach gegen eine DTD zu testen
Wenn Sie Attribute als Container für Daten verwenden, erhalten Sie Dokumente, die schwer zu lesen und zu pflegen sind. Versuchen Sie, Elemente zur Beschreibung von Daten zu verwenden. Verwenden Sie Attribute nur, um Informationen bereitzustellen, die für die Daten nicht relevant sind.
Nicht so enden (so sollte XML nicht verwendet werden):
<note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>
Eine Ausnahme von meiner Attributregel
Regeln haben immer Ausnahmen.
Meine Regel über Attribute hat eine Ausnahme:
Manchmal weise ich Elementen ID-Referenzen zu. Diese ID-Referenzen können für den Zugriff auf XML-Elemente ähnlich wie die NAME- oder ID-Attribute in HTML verwendet werden. Dieses Beispiel demonstriert dies:
<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 diesen Beispielen ist nur ein Zähler oder eine eindeutige Kennung, um die verschiedenen Notizen in der XML-Datei zu identifizieren, und kein Teil der Notizdaten.
Was ich hier zu sagen versuche, ist, dass Metadaten (Daten über Daten) als Attribute gespeichert werden sollten und dass Daten selbst als Elemente gespeichert werden sollten.