Есть статья под названием «Принципы XML-дизайна: когда использовать элементы по сравнению с атрибуты "на веб-сайте IBM.
Хотя кажется, что не так много жестких правил, но есть несколько хороших рекомендаций, упомянутых в публикации. Например, одна из рекомендаций - использовать элементы, когда ваши данные не должны быть нормализованы для пробелов, поскольку процессоры XML могут нормализовать данные в атрибуте, тем самым изменяя необработанный текст.
Я время от времени обращаюсь к этой статье, когда разрабатываю различные структуры XML. Надеюсь, это будет полезно и другим.
редактировать - С сайта:
Принцип основного содержания
Если вы считаете, что рассматриваемая информация является частью существенного материала, который выражается или передается в XML, поместите ее в элемент. Для удобочитаемых документов это обычно означает основной контент, который передается читателю. Для машинно-ориентированных форматов записей это обычно означает данные, поступающие непосредственно из проблемной области. Если вы считаете, что информация является второстепенной или второстепенной по отношению к основному обмену данными или предназначена исключительно для помощи приложениям в обработке основного обмена данными, используйте атрибуты. Это позволяет избежать загромождения основного содержимого вспомогательным материалом. Для машинно-ориентированных форматов записей это обычно означает специфические для приложения обозначения основных данных из проблемной области.
В качестве примера я видел много XML-форматов, обычно созданных на собственном предприятии, где заголовки документов помещались в атрибут. Я думаю, что заголовок является такой фундаментальной частью сообщения документа, что он всегда должен быть в содержании элемента. С другой стороны, я часто видел случаи, когда внутренние идентификаторы продукта добавлялись как элементы в описательные записи продукта. В некоторых из этих случаев атрибуты были более подходящими, поскольку конкретный внутренний код продукта не представлял бы особого интереса для большинства читателей или обработчиков документа, особенно когда идентификатор имел очень длинный или непонятный формат.
Возможно, вы слышали, что основные данные хранятся в элементах, а метаданные - в атрибутах. Приведенные выше два абзаца действительно выражают один и тот же принцип, но более осознанным и менее расплывчатым языком.
Принцип структурирования информации
Если информация выражена в структурированной форме, особенно если структура может быть расширяемой, используйте элементы. С другой стороны: если информация выражена в виде атомарного токена, используйте атрибуты. Элементы - это расширяемый механизм для выражения структуры в XML. Почти все инструменты обработки XML созданы с учетом этого факта, и если вы правильно разбите структурированную информацию на элементы, вы обнаружите, что ваши инструменты обработки дополняют ваш дизайн, и тем самым вы повысите производительность и удобство обслуживания. Атрибуты предназначены для выражения простых свойств информации, представленной в элементе. Если вы работаете против базовой архитектуры XML, объединяя структурированную информацию в атрибуты, вы можете получить некоторую кажущуюся лаконичность и удобство, но вы, вероятно, заплатите за обслуживание.
Хорошим примером являются даты: дата имеет фиксированную структуру и обычно действует как отдельный токен, поэтому имеет смысл в качестве атрибута (предпочтительно выраженного в ISO-8601). С другой стороны, представление личных имен - это тот случай, когда я видел, как этот принцип удивляет дизайнеров. Я часто вижу имена в атрибутах, но я всегда утверждал, что личные имена должны быть в содержании элемента. Личное имя имеет удивительно изменчивую структуру (в некоторых культурах вы можете вызвать путаницу или оскорбление, опуская почетные знаки или предполагая порядок частей имен). Личное имя также редко бывает атомным токеном. Например, иногда вам может потребоваться поиск или сортировка по имени, а иногда и по фамилии. Я должен отметить, что втиснуть полное имя в содержание отдельного элемента так же проблематично, как и поместить его в атрибут.
person
Ryan Taylor
schedule
05.10.2008