Я должен использовать Элементы или Атрибуты в XML? [дубликат]

FogBugz свободен максимум для 2 пользователей между прочим. Поскольку далеко я знаю, что это - единственный инструмент, который делает EBS.

Посмотрите здесь http://www.workhappy.net/2008/06/get-fogbugz-for.html

70
задан Deduplicator 1 February 2015 в 14:19
поделиться

10 ответов

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

Например, если определенная сущность является ЧАСТЬ данных, то желательно сделать его элементом. Например, имя сотрудника является важной частью данных сотрудника.

Теперь, если вы хотите передать МЕТАДАННЫЕ о данных (что-то, что предоставляет дополнительную информацию о данных), но на самом деле не является частью данные, то лучше сделать это атрибутом. Например, допустим, что у каждого сотрудника есть GUID, необходимый для внутренней обработки, тогда лучше сделать его атрибутом. (GUID - это не то, что передает действительно полезную информацию кому-то, просматривающему xml, но может быть необходимо для других целей)

Нет правила как такового, которое гласит, что что-то должно быть атрибутом или элементом.

Необязательно ИЗБЕГАТЬ атрибутов любой ценой… Иногда их легче моделировать, чем элементы. Это действительно зависит от данных, которые вы пытаетесь представить.

56
ответ дан 24 November 2019 в 13:25
поделиться

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

attribute="1 2 3 7 20"

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

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

3
ответ дан 24 November 2019 в 13:25
поделиться

Все зависит от того, для чего используется XML. Когда это в основном взаимодействие между программным обеспечением и машинами - например, веб-сервисы, проще использовать все элементы, хотя бы ради согласованности (а также некоторые структуры предпочитают это так, например, WCF). Если он предназначен для потребления людьми - т.е. в первую очередь создается и / или читается людьми - тогда разумное использование атрибутов может значительно улучшить читаемость; XHTML является разумным примером этого, а также XSLT и XML-схема.

3
ответ дан 24 November 2019 в 13:25
поделиться

Не менее важно то, что размещение вещей в атрибутах делает XML менее подробным.

Сравнить

<person name="John" age="23" sex="m"/>

с

<person>
    <name>
        John
    </name>
    <age>
        <years>
            23
        </years>
    </age>
    <sex>
        m
    </sex>
</person>

Да, это было немного предвзято и преувеличено, но вы понимаете точка

21
ответ дан 24 November 2019 в 13:25
поделиться

Вы не можете поместить CDATA в атрибут. По моему опыту, рано или поздно вы захотите поместить одинарные кавычки, двойные кавычки и / или целые XML-документы в «член», и если это атрибут, вы будете проклинать человека, который вместо этого использовал атрибуты. элементов.

Примечание: мой опыт работы с XML в основном касался очистки файлов других людей. Эти люди, казалось, следовали старой пословице: «XML подобен насилию. Если его использование не решило вашу проблему, значит, вы использовали недостаточно»

.
4
ответ дан 24 November 2019 в 13:25
поделиться

Именно из-за такого рода мусора вам следует избегать w3schools. Во всяком случае, это даже хуже, чем ужасающие вещи, которые у них есть о JavaScript.

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

0
ответ дан 24 November 2019 в 13:25
поделиться

Вы, вероятно, могли бы увидеть проблему семантическим способом.

Если данные более тесно связаны с элементом, это будет атрибут.

то есть: идентификатор элемента, я бы поместил его как атрибут элемента.

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

Все зависит от вас, и как вы проектируете свою схему.

0
ответ дан 24 November 2019 в 13:25
поделиться

Вот еще кое-что, что нужно сохранить при выборе формата XML помните: если я правильно помню, значения атрибутов «id» не должны быть полностью числовыми, они должны соответствовать правилам для имен в XML. И, конечно, значения должны быть уникальными. У меня есть проект, который должен обрабатывать файлы, не соответствующие этим требованиям (хотя в остальном они являются чистым XML), что сделало обработку файлов более запутанной.

0
ответ дан 24 November 2019 в 13:25
поделиться

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

Выбор за вами.

1
ответ дан 24 November 2019 в 13:25
поделиться

Отображение модели атрибутов. Набор атрибутов элемента изоморфизируется непосредственно в карту имя / значение, в которой значениями являются текст или любой сериализуемый тип значения. В C #, например, любой объект Dictionary может быть представлен как список атрибутов XML, и наоборот.

Это категорически не относится к элементам. Хотя вы всегда можете преобразовать карту имя / значение в набор элементов, обратное не так, например:

<map>
   <key1>value</key1>
   <key1>another value</key1>
   <key2>a third value</key2>
</map>

Если вы преобразуете это в карту, вы потеряете две вещи: несколько значений, связанных с ] key1 и тот факт, что key1 появляется перед key2 .

Значение этого становится намного яснее, если вы посмотрите на код DOM, который используется для обновления информации в в таком формате. Например, это Записать это банально:

foreach (string key in map.Keys)
{
   mapElement.SetAttribute(key, map[key]);
}

Этот код краток и однозначен. Сравните это, скажем, с:

foreach (string key in map.Keys)
{
   keyElement = mapElement.SelectSingleNode(key);
   if (keyElement == null)
   {
      keyElement = mapElement.OwnerDocument.CreateElement(key);
      mapElement.AppendChild(keyElement);
   }
   keyElement.InnerText = value;
}
5
ответ дан 24 November 2019 в 13:25
поделиться
Другие вопросы по тегам:

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