2008-10-28 5 views

Antwort

69

Es gibt elementzentrisches und attributzentrisches XML, in Ihrem Beispiel ist das erste elementzentriert, das zweite ist attributzentrisch.

In den meisten Fällen sind diese beiden Muster gleichwertig, es gibt jedoch einige Ausnahmen.

Attribut zentrierte

  • kleinere Größe als Element zentrisch.
  • Nicht sehr interoperabel, da die meisten XML-Parser denken, dass die Benutzerdaten durch das Element dargestellt werden, Attribute werden verwendet, um das Element zu beschreiben.
  • Es gibt keine Möglichkeit, für einen bestimmten Datentyp Nullwert anzuzeigen. z.B. nullable int
  • Kann komplexen Typ nicht ausdrücken.

Element zentrische

  • Komplexer Typ nur als Element Knoten dargestellt werden kann.
  • Sehr interoperabel
  • Größere Größe als Attribut zentrisch. (Kompression kann verwendet werden, um die Größe erheblich eliminiert)
  • Nullable-Daten können mit dem Attribut xsi ausgedrückt werden: nil = „true“
  • schneller zu analysieren, da der Parser sucht nur nach Elementen für Benutzerdaten.

Praktische

Wenn Sie über die Größe der XML wirklich interessieren, verwendet Attribut, wenn Sie können, wenn es angebracht ist, lassen Sie die NULL-Werte zulassen, komplexe Art und Knoten, die als Elemente großen Textwert halten gehend, Wenn Ihnen die Größe von XML egal ist oder Sie die Komprimierung während des Transports aktiviert haben, bleiben Sie bei den Elementen. Es ist erweiterbar.

Hintergrund

In DOT NET, XmlSerializer Eigenschaften von Objekten in entweder Attribute oder Elemente serialisiert werden können. Im kürzlich WCF-Framework, DataContract Serializer kann nur Eigenschaften in Elemente serialisieren und es ist schneller als XmlSerializer, der Grund ist offensichtlich, es muss nur nach Benutzerdaten von Elementen beim Deserialisieren suchen.

hier ein Artikel erklärt es auch Element vs attribute

+1

Attribut-zentriertes XML hat einen großen Interoperabilitätsvorteil mit JSON. Alles, was Sie brauchen, sind ein paar Hinweise, was Sie in ein Array eingeben und was Sie als Zahl oder boolesche Zahlen behandeln können, und Sie können perfekte automatische Konvertierungen durchführen. – PstScrpt

4

In meiner Firma, würden wir favorisieren den 2. Ansatz.

Die Art, wie wir darüber denken, ist, dass „Vorname“ und „Nachname“ sind Attribute der „Person“ Knoten, anstatt Unterfelder der „Person“ Knoten. Es ist ein subtiler Unterschied.

Meiner Meinung nach ist der zweite Ansatz prägnanter, und Lesbarkeit/Wartbarkeit ist deutlich verbessert, was sehr wichtig ist.

Natürlich hängt es von Ihrer Anwendung ab. Ich glaube nicht, dass es eine Pauschalregel gibt, die alle Szenarien abdeckt.

+1

Der zweite Ansatz ist besser lesbar für einen Menschen, aber der erste Ansatz ist besser lesbar von den meisten Parser. Der erste Ansatz ist auch erweiterbarer. Sie sollten den Artikel lesen, auf den von ** @ codemeit ** verwiesen wird (http://www.ibm.com/developerworks/xml/library/x-eleatt.html). – awe

2

Attribute sind nicht auftragsabhängig. Dies kann je nach Situation ein Vorteil oder ein Nachteil sein.

Attribute können nicht dupliziert werden. Wenn "Joe" zwei Vornamen hat, sind Knoten die einzige Möglichkeit.

5

Irgendwann in der Zukunft, wenn Sie eine <address>-Eigenschaft hinzufügen, werden Sie es nicht zu einem XML-Attribut machen wollen. Dies ist weil ein <address> ein komplexeres Element aus Straße Adresse, Stadt, Land usw. sein könnte.

Aus diesem Grund möchten Sie vielleicht das erste Unterelement Formular auswählen, wenn Sie wirklich sicher sind, dass das Attribut gewonnen Ich muss viel tiefer gehen. Die erste Form ermöglicht eine größere Erweiterbarkeit in der Zukunft.

Wenn Sie sich über Speicherplatz Gedanken machen, komprimieren Sie Ihre XML.

+0

Nur neugierig, aber konntest du nicht eine Mischung aus beidem haben. Sagen Sie Vor- und Nachname als Attribute und adressieren Sie dann als Knoten. Was ich versuche zu sagen ist, dass Sie nicht nur eins auswählen müssen. Richtig? –

+2

Sie haben Recht, aber aus Gründen der Konsistenz beim Darstellen von Eigenschaften einer einzelnen Entität ("Person" im ursprünglichen Beispiel) möchten Sie wahrscheinlich die eine oder andere auswählen. Auf diese Weise müssen Sie sich nicht merken, was auf welche Weise gespeichert ist. –

+0

' ' ich kann Finde nicht heraus, wie man es richtig formatiert, aber der Punkt ist, dass du die Erweiterbarkeit nicht einschränkst.Es sind keine untergeordneten Elemente, die Sie mit attributorientiertem XML vermeiden, sondern Textknoten. – PstScrpt

3

Sie auch die Antworten auf this Frage sehen möchten, kann ich eine Weile zurück gestellt. Ich fand die Antworten nützlich.

1

ich mit der Verwendung von Attributen folgenden Informationen sehr hilfreich bei der Erklärung der Wahl von Attributen vs Elemente in einer kurzen Art und Weise

Einige der Probleme zu finden sind:

Attribute nicht mehrere Werte (Elemente können)
enthalten Attribute können keine Baumstrukturen enthalten (Elemente können)
Attribute sind nicht einfach erweiterbar (für zukünftige Änderungen)

Attribute sind schwer zu lesen d halten. Verwenden Sie Elemente für Daten. Verwenden Sie Attribute für Informationen, die für die Daten nicht relevant sind.

Quelle: http://www.w3schools.com/xml/xml_attributes.asp