Мы хотим экспортировать некоторые данные из нашей базы данных в виде XML. Например, Person
может быть age
, name
и некоторые другие свойства.
У нас есть два варианта определения формата XML.
Выбор № 1:
<Persons>
<Person>
<Age>16</Age>
<Name>Richard</Name>
</Person>
<Person>
<Age>34</Age>
<Name>Eric</Name>
</Person>
...
</Persons>
Выбор № 2:
<Persons>
<Person Age="16" Name="Richard"/>
<Person Age="34" Name="Eric"/>
...
</Persons>
Так в чем же разница между определением подузла или атрибута? И в чем выгода каждого выбора?
Ответы:
Для этого нет четкой документации / передовой практики, но рассмотрите альтернативы, как у вас есть:
Как текст элемента:
<name>
или<age>
для этой целиКак атрибуты:
age
атрибутов.Я потратил много времени на работу с XML, и, по моему мнению, для передачи данных в чистом виде атрибуты должны использоваться по возможности. Если XML, вероятно, будет использоваться для представления (XSLT, xhtml и т. Д.), Он может быть лучше в виде текстового содержимого (но не обязательно).
источник
Принципы разработки XML: когда использовать элементы против атрибутов от Uche Ogbuji из IBM, вероятно, является одним из лучших ресурсов по этому вопросу.
В основе решения лежит то, что атрибуты являются «выполненными» вещами. Вы не можете изменить их или изменить их или вложить их. Они не зависят от порядка и различны внутри элемента (вы не можете иметь две одинаковые вещи).
Если любое из этих ограничений может измениться, сделайте данные дочерним узлом XML.
В вашем примере у вас есть человек, у которого есть имя и возраст. У меня есть имя, отчество и фамилия ... и псевдоним. А у некоторых людей есть девичьи фамилии, несколько отчеств или почетные звания - как бы вы включили Джона Рональда Ройеля Толкина в такую структуру?
И поэтому у нас есть кто-то, кто имеет два отчества, которые имеют порядок для них. Это должно ясно показать, что нет, атрибут не лучший выбор для этого.
Я не могу найти его в настоящее время, но в вышеупомянутом связанном документе есть утверждение, что имена - это вещи, которые требуют некоторой размышления, что приводит к «Я надеюсь подробнее остановиться на обработке имен людей в разметке в будущей статье». Если у кого-то есть лидерство в этом, пожалуйста, оставьте комментарий или отредактируйте его в этом месте
С другой стороны, возраст - это то, что имеет довольно фиксированную структуру (я бы предложил день рождения, а не целое число). Таким образом, представление этой информации в хорошо известном и понятном формате имеет смысл в атрибуте. У человека есть один и только один день рождения, и нет «заказа» на него, который вы хотите сохранить.
Уче Огбуджи определяет три основных принципа правильной разработки формата xml. Ниже приведены сокращенные цитаты из вышеуказанного связанного документа.
Если информация выражена в структурированной форме, особенно если структура может быть расширяемой, используйте элементы. С другой стороны: если информация выражена как атомарный токен, используйте атрибуты
Если информация предназначена для чтения и понимания человеком, используйте элементы. Если информация легче всего понять и переварить на машине, используйте атрибуты.
Используйте элемент, если вам нужно изменить его значение другим атрибутом
И так, имена должны быть элементами - это структурированные данные, которые не являются атомарными токенами, они более вероятно будут прочитаны человеком, чем компьютером, и они могут быть изменены другим атрибутом самого имени.
Даты должны быть атрибутами - это данные, которые являются атомным токеном, они более вероятно читаются компьютером, а не человеком (и затем преобразовываются в предпочтительный формат человека, если это необходимо ), и, наконец, они вряд ли будут изменены другими атрибуты на них.
источник
Еще одно соображение, кроме числа Рольфля, - количество полей.
Более чем небольшое количество атрибутов становится беспорядком и трудным для чтения (это предполагает, что вы хотите, чтобы ваш xml был удобочитаемым для человека, но как программист вы захотите сделать это как минимум для тестирования).
Кроме того, если вы ожидаете, что структура данных одного из полей со временем изменится, не делайте это атрибутом.
Например, ваше имя поля. Может быть, в будущем это станет
Если вы ожидаете, что что-то подобное произойдет, то если сделать его атрибутом, это будет означать дальнейший рефакторинг кода.
источник
Для тега Persons обычно имеет больше тегов Person, это имеет смысл, в списке Person есть некоторые сущности, а не атрибуты.
История отличается от человека и его компонентов. Person не содержит имени, имя является атрибутом Person, поэтому я бы придерживался атрибутов вместо новых тегов. Теги полезны, когда у вас есть повторяющиеся вещи, такие как адреса, вы не можете сделать это с атрибутами.
Если мы думаем в контексте HTML, у вас нет ввода с тегом имени со значением, не так ли?
источник