Схема XML: коллекция внутри определенных тегов или вдоль отдельных элементов? - PullRequest
1 голос
/ 26 июня 2011

При написании моей первой сложной XML-схемы я, возможно, все еще думаю о объектно-ориентированном подходе и не знаю, какие есть лучшие практики.Это в основном потому, что я не тратил много времени на чтение XML-файлов в коде.

Одна вещь, которую я склонен делать, - это помещать все коллекции в отдельный элемент.Давайте придумаем сценарий.Я делаю схему для типа человека, и я не хочу хранить информацию об автомобилях людей среди прочего.

Я всегда делаю это:

<xs:element name="Person">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Name" type="xs:string"/>
            <xs:element name="Address" type="xs:string"/>
            <xs:element name="Cars">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Car" type="CarType" maxOccurs="unbounded" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Но якобы этовозможно и, возможно, даже лучше:

<xs:element name="Person">
    <xs:complexType>
        <xs:sequence>
          <xs:element name="Name" type="xs:string"/>
          <xs:element name="Address" type="xs:string"/>
          <xs:element name="Cars" type="CarType" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Когда я читаю из файла XML с использованием C # и / или Linq-to-XML, какой метод лучше?

Я склонен делать свое дело, потому чтоЯ чувствую, что коллекция должна находиться внутри собственных тегов, а не вместе со свойствами, такими как имя и адрес, в единственном числе.

1 Ответ

1 голос
/ 26 июня 2011

При использовании LINQ to XML можно сказать, что лучше располагать элементы непосредственно под узлом Person. Сравнить

person.Elements("Car")

с

person.Element("Cars").Elements()

Но я бы лично предпочел специальный элемент коллекции, я думаю, он чище. Почему ты думаешь, что другой путь лучше? Кто это сказал?

...