Подтвердить что ты не робот

Рекомендации: атрибут XML и элемент XML - Когда следует использовать элементы и когда следует использовать атрибуты?

Какой будет правильный формат для этих XML-данных, эквивалентны они или есть компромиссы между этими двумя?

1.

<sitemap>
  <category name="Animals">
    <section title="Dogs">
      <page url="/pics/greatdane.jpg" title="Great Dane"/>
    </section>
  </category>
</sitemap>

2.

<sitemap>
  <page>
    <category>Animals</category>
    <section>Dogs</section>
    <title>Great Dane</title>
    <url>/pics/greatdane.jpg</url>    
  </page>
</sitemap>

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

4b9b3361

Ответ 1

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

  • Может быть только один экземпляр атрибута, хотя вы можете обеспечить его соблюдение с помощью элементов с использованием DTD или XML Schema;
  • Атрибуты неупорядочены. Элементов нет:
  • Атрибуты приводят к более сжатому синтаксису, если нет детей. Для сравнения:

    < page name= "Карта сайта" /" >

в

<page>
  <name>Sitemap</name>
</page>

Я знаю, какой из них я предпочитаю;

  • Теперь не так важно, поскольку DTD не используются (по крайней мере) по сравнению с XML-схемой, но я все равно добавлю: DTD разрешают значения по умолчанию (подразумеваемые) для атрибутов, но нет такого механизма для элементов; и
  • Элементы, являющиеся элементами, могут иметь детей и атрибуты. Атрибуты, очевидно, не могут.

Итак, из вашего примера, ваш самый внутренний элемент <page> имеет атрибут URL (хотя по какой-то причине изображение - возможно, значок предварительного просмотра? Если это так, имя атрибута вводит в заблуждение). Веб-страница имеет только один URL-адрес (обычно), чтобы быть хорошим примером того, что может быть атрибутом.

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

Но, в конце концов, большую часть времени там нет правильного или неправильного ответа, и это в значительной степени вопрос стиля.

Ответ 2

Два примера не эквивалентны, потому что они образуют разные иерархии. Является ли карта сайта списком категорий, например, первым примером? Или это список страниц, например, второй пример?

Ответ на это ортогонален элементу vs вопрос атрибута.

В вопросе Элемент против Атрибута: Вот ваш второй пример, преобразованный в подход атрибута:

<sitemap>
 <page    
  category='Animals'
  section='Dogs'
  title='Great Dane'
  url='/pics/greatdane.jpg'
  /> 
</sitemap>

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

<sitemap>
 <page>    
  <category>Animals</category>
  <section>Dogs</section>    
  <title>Great Dane</title>    
  <url nofollow="true">/pics/greatdane.jpg</url>
 </page> 
</sitemap>

Ответ 3

Я думаю, что ответ совершенно очевиден, когда вы думаете о том, как вы хотите добавить больше собак:

<sitemap>
  <category name="Animals">
    <section title="Dogs">
      <page url="/pics/greatdane.jpg" title="Great Dane"/>
      <page url="/pics/wienerdog.jpg" title="Wiener Dog"/>
    </section>
  </category>
</sitemap>

или

<sitemap>
  <page>
    <category>Animals</category>
    <section>Dogs</section>
    <title>Great Dane</title>
    <url>/pics/greatdane.jpg</url>    
  </page>
  <page>
    <category>Animals</category>
    <section>Dogs</section>
    <title>Wiener Dog</title>
    <url>/pics/wienerdog.jpg</url>
  </page>
</sitemap>

Ответ 4

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

Одна хорошая вещь о первом заключается в том, что он легко, возможно, позже поддерживает несколько страниц в разделе и нескольких разделах в категории. Во втором случае информация распространяется по страницам.

Ответ 5

XML - это ужасный формат файла и заканчивается религиозными войнами. Делайте то, что вы считаете лучшим в то время, если вы можете это оправдать. Однако ваши конкретные примеры существенно различаются:

В 1 карта сайта инкапсулирует категорию, инкапсулирующую раздел, который инкапсулирует страницу.

В 2 карта сайта инкапсулирует страницу, которая инкапсулирует три элемента: категорию, раздел, заголовок и URL. Ни один из этих трех элементов не содержит других, они являются братьями и сестрами, которые обычно содержатся на странице.

Как две разные структуры, это зависит от того, что вы намеревались.

Другой вопрос заключается в предпочтении атрибутов по сравнению с тегами первого уровня. Но, как я уже сказал, это другой вопрос!

Ответ 6

Я использую элементы для данных и атрибутов для Metadata

Ответ 7

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

Ответ 8

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

Ответ 9

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

<sitemap>
  <category name="Animals">
    <section title="Dogs" status="draft">
      ...
    </section>
  </category>
</sitemap>

делает лучшую работу по передаче следующих фактов:

  • name является свойством категории
  • категория может иметь несколько разделов
  • статус - это свойство раздела; не все разделы в категории должны иметь одинаковый статус.

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

Ответ 10

Простое эмпирическое правило: если вы можете реализовать структуру данных как неупорядоченную карту пар имя/значение, вы можете использовать атрибуты элемента для ее представления. Если вы не можете (если, например, у вас будет несколько имен или заданное имя будет иметь несколько связанных значений, или упорядочение пар имя/значение значительны), то элемент с атрибутами является неправильным представлением.

Две другие вещи, которые могут сделать это неправильным представлением:

  • Значения содержат разметку. Это может быть представлено в значениях атрибутов, но это неудобно, потому что все символы разметки должны быть экранированы в сущности. Кроме того, разметка не будет анализироваться.
  • Вы используете проверку схемы XML, и существует более одного допустимого набора пар имя/значение. XML-схема может определять только один набор допустимых атрибутов для элемента, тогда как он может определять несколько взаимоисключающих наборов допустимых дочерних элементов.

Очевидным преимуществом использования атрибутов является то, что они приводят к XML-интерфейсу. Они (очень) немного быстрее, чтобы анализировать, чем элементы.