Wir möchten einige Daten aus unserer Datenbank als XML exportieren. Zum Beispiel kann eine Person
haben kann age
, name
und einige andere Eigenschaften.
Wir haben zwei Möglichkeiten, um das XML-Format zu definieren.
Wahl 1:
<Persons>
<Person>
<Age>16</Age>
<Name>Richard</Name>
</Person>
<Person>
<Age>34</Age>
<Name>Eric</Name>
</Person>
...
</Persons>
Wahl 2:
<Persons>
<Person Age="16" Name="Richard"/>
<Person Age="34" Name="Eric"/>
...
</Persons>
Was ist der Unterschied zwischen der Definition eines Unterknotens oder Attributs? Und was ist der Vorteil jeder Wahl?
Antworten:
Es gibt keine eindeutige Dokumentation / Best Practice dafür, aber ziehen Sie die Alternativen in Betracht, da Sie Folgendes haben:
Als Elementtext:
<name>
oder<age>
für diesen Zweck zu verwendenAls Attribute:
age
Attribute enthalten.Ich habe viel Zeit mit XML verbracht, und meiner Meinung nach sollten für die reine Datenkommunikation Attribute verwendet werden, wann immer dies möglich ist. Wenn das XML wahrscheinlich für Präsentationen verwendet wird (XSLT, xhtml usw.), ist es möglicherweise besser als Textinhalt (aber nicht unbedingt).
quelle
Prinzipien des XML-Designs: Die Verwendung von Elementen im Vergleich zu Attributen von Uche Ogbuji von IBM ist wahrscheinlich eine der besten Ressourcen in diesem Bereich.
Der Kern der Entscheidung ist, dass Attribute erledigte Dinge sind. Sie können sie nicht ändern oder modifizieren oder verschachteln. Sie sind in der Reihenfolge unabhängig und unterscheiden sich innerhalb des Elements (Sie können nicht zwei gleiche Dinge haben).
Wenn sich eine dieser Einschränkungen möglicherweise ändert, machen Sie die Daten zu einem untergeordneten Knoten der XML.
In Ihrem Beispiel haben Sie eine Person, die einen Namen und ein Alter hat. Ich habe einen Vor-, einen Mittel- und einen Nachnamen ... und einen Spitznamen. Und manche Menschen haben Mädchennamen, mehrere Zweitnamen oder Ehrennamen - wie würden Sie John Ronald Reuel Tolkien in eine solche Struktur einfügen ?
Und so haben wir jemanden, der zwei zweite Vornamen hat, die eine Anweisung haben. Dies sollte deutlich machen, dass nein, ein Attribut hierfür nicht die beste Wahl ist.
Ich kann es derzeit nicht finden, aber in dem oben verlinkten Dokument gibt es eine Aussage, dass Namen Dinge sind, die ein wenig Nachdenken erfordern. Wenn jemand einen Hinweis dazu hat, hinterlasse bitte einen Kommentar oder bearbeite ihn an dieser Stelle.
Andererseits hat das Alter eine ziemlich feste Struktur (ich würde eher den Geburtstag als eine ganze Zahl vorschlagen). Daher ist die Darstellung dieser Informationen in einem bekannten und verständlichen Format in einem Attribut sinnvoll. Eine Person hat nur einen Geburtstag und es gibt keine "Bestellung", die Sie beibehalten möchten.
Uche Ogbuji nennt drei Grundprinzipien für das korrekte Entwerfen eines XML-Formats. Das Folgende sind abgekürzte Zitate aus dem oben verlinkten Dokument.
Wenn die Information in strukturierter Form ausgedrückt wird, insbesondere wenn die Struktur erweiterbar sein kann, verwenden Sie Elemente. Auf der anderen Seite: Wenn die Informationen als atomares Token ausgedrückt werden, verwenden Sie Attribute
Wenn die Informationen von einer Person gelesen und verstanden werden sollen, verwenden Sie Elemente. Wenn die Informationen von einer Maschine am leichtesten verstanden und verarbeitet werden können, verwenden Sie Attribute.
Verwenden Sie ein Element, wenn der Wert durch ein anderes Attribut geändert werden soll
Und so sollten Namen Elemente sein - es handelt sich um strukturierte Daten, die kein atomares Token sind. Es ist wahrscheinlicher, dass sie von einem Menschen gelesen werden als von einem Computer, und sie können durch ein anderes Attribut im Namen selbst geändert werden.
Daten sollten Attribute sein - es handelt sich um Daten, die ein atomares Token sind. Es ist wahrscheinlicher, dass sie von einem Computer gelesen werden als von einem Menschen (und dann gegebenenfalls in das vom Menschen bevorzugte Format umgewandelt werden ), und letztendlich ist es unwahrscheinlich, dass sie von anderen geändert werden Attribute auf sie.
quelle
Eine weitere Überlegung von Beyong Rolfl ist die Anzahl der Felder.
Mehr als eine kleine Anzahl von Attributen wird zu einem Chaos und ist schwer zu lesen (vorausgesetzt, Sie möchten, dass Ihre XML von Menschen gelesen werden kann, aber als Programmierer möchten Sie dies zumindest zum Testen tun).
Wenn Sie erwarten, dass sich die Datenstruktur eines der Felder mit der Zeit ändert, machen Sie es nicht zu einem Attribut.
Zum Beispiel Ihr Namensfeld. Vielleicht würde das in Zukunft so werden
Wenn Sie damit rechnen, dass so etwas passieren wird, bedeutet dies, dass Sie später mehr Code umgestalten müssen.
quelle
Für das Personen-Tag ist es normal, dass mehr Personen-Tags vorhanden sind. Es ist sinnvoll, dass eine Liste von Personen Entitäten und keine Attribute enthält.
Die Geschichte ist für Person und seine Bestandteile unterschiedlich. Eine Person enthält keinen Namen, der Name ist ein Attribut der Person, daher bleibe ich bei Attributen anstelle von neuen Tags. Tags sind nützlich, wenn Sie sich wiederholende Dinge wie Adressen haben und dies nicht mit Attributen tun können.
Wenn wir im HTML-Kontext denken, haben Sie keine Eingabe mit einem Namensschild mit einem Wert, oder?
quelle