Рекомендации по XML: атрибуты против дополнительных элементов [дубликат]


этот вопрос уже есть ответ здесь:

в чем разница между ними и когда я должен использовать каждый:

<person>
     <firstname>Joe</firstname>
     <lastname>Plumber</lastname>
</person>

и

<person firstname="Joe" lastname="Plumber" />

спасибо

6 76
xml

6 ответов:

есть элемент ориентированных и атрибутов XML с использованием, в вашем примере, первый элемент ориентированной, второй атрибут центрический.

большую часть времени, эти две схемы эквивалентны, однако есть некоторые исключения.

атрибут centric

  • меньший размер, чем элемент центральный.
  • не очень совместимый, так как большинство синтаксических анализаторов XML будут думать, что пользовательские данные представлены элементом, атрибуты используется для описания элемента.
  • нет никакого способа, чтобы представить значение, допускающее значение null для некоторого типа данных. например, nullable int
  • не может выразить сложный тип.

центрический элемент

  • сложный тип может быть представлен только как узел элемента.
  • очень совместимых
  • больший размер, чем атрибут centric. (сжатие может быть использовано для устранения размера значительно)
  • Nullable данные можно выразить с помощью атрибута xsi:nil= "true"
  • быстрее разбирать, так как парсер ищет только элементы для пользовательских данных.

практические

Если вы действительно заботитесь о размере XML, используйте атрибут всякий раз, когда это возможно, если это уместно, оставьте nullable, сложный тип и узел, который будет содержать большое текстовое значение в качестве элементов, Если вам не нужен размер XML или у вас есть сжатие во время транспортировки, придерживайтесь элементов. Она более расширяема.

фон

в DOT NET XmlSerializer может сериализовать свойства объектов в атрибуты или элементы. В недавно созданной структуре WCF сериализатор DataContract может только сериализовать свойства в элементы, и это быстрее, чем XmlSerializer, причина очевидна, ему просто нужно искать пользовательские данные из элементов при десериализации.

Здесь статья объясняет также элемент против атрибут

когда-нибудь в будущем, когда вы добавляете <address> свойство, вы не хотите, чтобы сделать его атрибутом XML. Это потому что <address> может быть более сложным элементом, состоящим из адреса улицы, города, страны и т. д.

Если вы вообще беспокоитесь о пространстве, сжатие XML.

в моей компании мы бы предпочли 2-й подход.

Как мы думаем об этом, что "имя" и "фамилия" являются атрибуты узла "персона", а не поля "человек" узел. Это тонкая разница.

на мой взгляд, второй подход более лаконичен, а читаемость/ремонтопригодность значительно улучшена, что очень важно.

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

вы также можете увидеть ответы этой вопрос я задал некоторое время назад. Я нашел ответы полезными.

атрибуты не чувствительны к порядку. Это может быть преимуществом или недостатком в зависимости от ситуации.

атрибуты не могут быть продублированы. Если у " Джо " есть два имени, то узлы-единственный способ пойти.

Я нашел следующую информацию очень полезной в объяснении выбора атрибутов против элементов в короткой моде

некоторые проблемы с использованием атрибутов:

атрибуты не могут содержать несколько значений (элементов)
атрибуты не могут содержать древовидные структуры (элементы могут)
атрибуты не легко расширяются (для будущих изменений)

атрибуты трудно читать и поддерживать. Используйте элементы для данных. Использовать атрибуты для информации, которая не имеет отношения к данным.

источник:http://www.w3schools.com/xml/xml_attributes.asp