2009-01-15 11 views
7

In XML, wie sollte eine Liste dargestellt werden?Wie sollte eine Liste in XML dargestellt werden?

Mit einer einschließenden Liste Einheit:

<person> 
    <firstname>Joe</firstname> 
    <lastname>Bloggs</lastname> 

    <children> 
     <child .../> 
     <child .../> 
     <child .../> 
     <child .../> 
     <child .../> 
    </children> 
</person> 

oder ohne:

<person> 
    <firstname>Joe</firstname> 
    <lastname>Bloggs</lastname> 

    <child .../> 
    <child .../> 
    <child .../> 
    <child .../> 
    <child .../> 
</person> 

Antwort

7

Für Erweiterbarkeit würde ich die erste Lösung (die mit den Kinder Knoten) verwenden. Wenn Sie jemals Daten über alle untergeordneten Elemente speichern möchten, verfügen Sie über einen praktischen Knoten, auf dem Attribute platziert werden können.

+0

Guter Punkt. Ich kann mir ein Attribut für Kinder vorstellen ... Ehegatte ... also wenn das Kind aus einer anderen Ehe wäre. – dacracot

7

Ich würde es in einer Einheit umschließen sie von den anderen Elementen zu unterscheiden.

+0

Einverstanden aus dem von Jason Jackson unten aufgeführten Grund. – dacracot

+0

Sie können auch und .... haben, damit Sie Listen mit verschiedenen Arten von Kindern erstellen können, wenn Sie die umschließende Entität verwenden. – Eddie

0

IMHO, hängt es von der Domäne ab.

Für das Beispiel, das Sie gaben, würde ich die Entität verwenden, um die Kinder einzuschließen, weil die Kinder selbst nicht notwendigerweise Eigenschaften der Person sind, aber die Liste der Kinder ist.

Außerdem hilft die Verwendung eines Gehäuses, wenn Sie jemals serialisieren/deserialisieren müssen.

1

Die erste würde ziemlich gut für einfache Listen funktionieren, aber was ist, wenn die Liste selbst eine verschachtelte Liste enthält ?! Was wäre, wenn ein Element ein paar verschiedene Listen hätte? Um die Dinge konsistent zu halten, bevorzuge ich ein Element für die Liste und verwende einen Tag <item> oder etwas für Kinddaten. Dies hilft bei der Verwendung einer generischen Funktion zum Parsen aller Listen.

2

Es macht keinen großen Unterschied, ob die Namen der Elemente in der Liste immer gleich sind, denn wenn Sie sie mit XPath oder Linq-to-XML oder was auch immer verarbeiten, dann wird die Abfrage einfach funktionieren habe einen weiteren Selektor, wenn es einen Wrapper-Knoten gibt, aber ansonsten identisch sein wird.

Wenn sich andererseits die Elementnamen in der Liste unterscheiden, kann die Verarbeitung der Liste vereinfacht werden, wenn ein Wrapperelement vorhanden ist, da Sie einfach '*' als Selektor unterhalb des Listenelements verwenden können Sie müssen alle Elemente nach denen mit einer bestimmten Gruppe von Namen filtern.

Also ist es wahrscheinlich nicht sehr wichtig, aber ich bevorzuge ein Wrapper-Element, nur weil es die Elemente in der Sammlung visuell von Elementen abgrenzt, die es nicht sind.

2

Betrachten Sie es in Code, den Sie möchten, schreiben dagegen

Für mich .: ...

spouse.children = person.children... 

ist viel schöner als semantisch ...

for child in person: 
    spouse.addChild(person.child) 
1

Wenn wir eine universelle XML-Darstellung einer Liste benötigen, werden wir feststellen, dass eine Art der folgenden Darstellung verwendet werden muss:

<_listSomeName> 
    <_listItem>...</_listItem> 
    <_listItem>...</_listItem> 
    <_listItem>...</_listItem> 
    <_listItem>...</_listItem> 
    <_listItem>...</_listItem> 
</_listSomeName> 

Lassen Sie uns dies analysieren:

  1. Die <_listSomeName> Das Wrapper-Element wird benötigt, da wir zwei oder mehr Listen als untergeordnete Elemente eines Elements haben und in der Lage sein müssen, jede einzelne Liste eindeutig zu identifizieren. Der Teil "SomeName" dient dazu, den Namen einer Liste eindeutig zu machen.

  2. Das Element <_listItem> wird benötigt, um jedes einzelne Listenelement zu umbrechen. Es kann nicht weggelassen werden, da ein Listenelement eine komplexe Struktur haben kann (wie beispielsweise ein XML-Fragment selbst) und es schwierig wäre, es als Ganzes zu identifizieren.

1

Ich würde die erste Lösung verwenden. Die Liste hat eine semantische Relevanz: Sie ist die Sammlung ähnlicher Elemente und sollte daher als solche erkennbar sein. In der zweiten Lösung existiert die Liste nicht als ein Element.

Verwandte Themen