Элементы XML по сравнению с атрибутами [дубликат]

10
задан Community 23 May 2017 в 12:25
поделиться

9 ответов

Атрибуты хороши, когда вы хотите присоединить информацию к другой информации, возможно, для описания того, как следует интерпретировать информацию. Например:

<speed unit="mph">65</speed>
12
ответ дан 3 December 2019 в 18:33
поделиться

Атрибуты - это просто это атрибуты элемента. Если вам нужно гнездить несколько элементов, вы используете элементы. В вашем дате пример я обычно просто использую атрибуты, потому что он меньше.

<date month="12" day="31" year="2009"/>

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

2
ответ дан 3 December 2019 в 18:33
поделиться

«Почему атрибуты даже существуют тогда?»

, чтобы обеспечить более краткий код XML, просто для сохранения текста. И, конечно же, любой XML-файл, содержащий атрибуты

<element attr1="val1" attr2="val2" ... attrN="valN">
   <nestedElement>
     ...
   </nestedElement>
</element>

, может быть легко преобразован в «аспиралью» один:

<element>
       <attributes>
         <attr1>val1</attr1>
         <attr2>val2</attr2>
         ...
         <attrN>valN</attrN>
       </attributes>
       <nestedElement>
         ...
       </nestedElement>
    </element>
0
ответ дан 3 December 2019 в 18:33
поделиться

Этот вопрос уже заставил меня почесать мою голову. Для меня это вопрос семантики. Мне кажется более естественным образом делать

<page size="a4">

, чем

<page>
  <size>a4</size>
</page>
0
ответ дан 3 December 2019 в 18:33
поделиться

Подумайте о блоке контактной информации ...

<!-- attribute version -->
<person name="Matt" age="27">
    <phone type="mobile" value="1234567890" />
    <phone type="work" value="1234560987" />
    <address type="home" 
             city="NoWhere" 
             state="OH" 
             street="123 Lost Ave." 
             zipcode="12345" />
</person>

<!-- element version -->
<person>
    <name>Matt</name>
    <age>27</age>
    <phone>
        <type>mobile</type>
        <value>1234567890</value>
    </phone>
    <phone>
        <type>work</type>
        <value>1234560987</value>
    </phone>
    <address>
        <type>home</type> 
        <city>NoWhere</city>
        <state>OH</state>
        <street>123 Lost Ave.</street>
        <zipcode>12345</zipcode>
    </address>
</person>

... Вы можете расширить их в элементы. Однако, если вы обрабатываете сотни, и, возможно, миллионы записей, дополнительный накладные расходы из конечных тегов могут раздувать файлы. Это может вызвать проблемы с ограниченными системами памяти / процессора и / или медленных данных. Мусор, что ваш XML с элементами может также сделать гораздо сложнее читать и понимать ваш XML визуально. Хотя визуальный опыт данных может не иметь значения для передачи и хранения, и может быть очень важно для настройки и обслуживания.

Другая проблема, которая может выйти из использования элементов из всего, заключается в том, когда вы пытаетесь использовать данные снаружи вашей кодовой базы; У вас есть гораздо более трудное время, зная, если элементы могут повторяться или если они должны содержать только простой часть информации. Да, вы можете ограничить это с помощью XSD и DTD, но это, как правило, более сложнее, чем просто сделать XML легко понять.

Что касается вашего бонусного вопроса ... Версификация XML Schemas будет зависеть от платформы, к которой вы развиваетесь, и насколько строгий код и платформа против схемы. XML (и двоичные файлы) могут быть очень гибкими ... это действительно, почему XML является расширяемым.

-121--3095734-

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

0
ответ дан 3 December 2019 в 18:33
поделиться

Точки, которые вы перечислите о элементах, являются правильными, и я бы добавил следующее:

  • элементы, как правило, делают более красивые (более читаемые) дифференцировки, когда вам нужно сравнить изменения файла

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

Рассмотрим этот пример (базовая гиперссылка):

<a href="http://www.htmlhelp.com/" title="Help Information" target="_top">Web Design Group</a>

Хотели бы вам, если бы вам пришлось писать или прочитать это таким образом?

<a>
    <href>http://www.htmlhelp.com/</href>
    <title>Help Information</title>
    <target>_top</target>
    <text>Web Design Group</text>
</a>

Мне, что выглядит как много шума.

2
ответ дан 3 December 2019 в 18:33
поделиться

Подумайте о блоке контактной информации ...

<!-- attribute version -->
<person name="Matt" age="27">
    <phone type="mobile" value="1234567890" />
    <phone type="work" value="1234560987" />
    <address type="home" 
             city="NoWhere" 
             state="OH" 
             street="123 Lost Ave." 
             zipcode="12345" />
</person>

<!-- element version -->
<person>
    <name>Matt</name>
    <age>27</age>
    <phone>
        <type>mobile</type>
        <value>1234567890</value>
    </phone>
    <phone>
        <type>work</type>
        <value>1234560987</value>
    </phone>
    <address>
        <type>home</type> 
        <city>NoWhere</city>
        <state>OH</state>
        <street>123 Lost Ave.</street>
        <zipcode>12345</zipcode>
    </address>
</person>

... Вы можете расширить их в элементы. Однако, если вы обрабатываете сотни, и, возможно, миллионы записей, дополнительный накладные расходы из конечных тегов могут раздувать файлы. Это может вызвать проблемы с ограниченными системами памяти / процессора и / или медленных данных. Мусор, что ваш XML с элементами может также сделать гораздо сложнее читать и понимать ваш XML визуально. Хотя визуальный опыт данных может не иметь значения для передачи и хранения, и может быть очень важно для настройки и обслуживания.

Другая проблема, которая может выйти из использования элементов из всего, заключается в том, когда вы пытаетесь использовать данные снаружи вашей кодовой базы; У вас есть гораздо более трудное время, зная, если элементы могут повторяться или если они должны содержать только простой часть информации. Да, вы можете ограничить это с помощью XSD и DTD, но это, как правило, более сложнее, чем просто сделать XML легко понять.

Что касается вашего бонусного вопроса ... Версификация XML Schemas будет зависеть от платформы, к которой вы развиваете, и насколько строгим ваш код и платформа против схемы. XML (и двоичные файлы) могут быть очень гибкими ... это действительно, почему XML является расширяемым.

2
ответ дан 3 December 2019 в 18:33
поделиться

Все эти точки от статьи W3Schools являются абсолютно действительными и правильными. Я согласен - я вряд ли когда-либо пользуюсь атрибутами в моих XML-документов.

Единственный раз, когда я бы использовал их, когда мне нужно определить сущность, например,

<Customer Id="123123">
 ....
</Customer>

Но даже здесь это бросается. Вы можете так же легко поместить этот идентификатор в 123123 элемент.

Кроме того, в моем случае, поскольку datacontrtrattseratserizer WCF не поддерживает атрибуты XML (по причинам эффективности), это еще одна причина не использовать их (много):

1
ответ дан 3 December 2019 в 18:33
поделиться

Не забывайте, что атрибуты анализируются как часть стартового тега. Это означает, что во время анализа, вы получаете эти значения сразу же, вам не нужно ждать близкого тега. Кроме того, Вы не вызываете все события синтаксического анализа (если Вы делаете потоковый синтаксический анализ) для всех тегов элементов.

Я предпочитаю использовать атрибуты для метаданных о содержащемся элементе. Например, я предпочитаю выражать даты как 20-Jan-2010. Если у вас есть однозначные элементы данных, то просто сделайте их атрибутами. <имя first="Tom" last="Jones"/> работает во многих случаях.

2
ответ дан 3 December 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: