XML Атрибуты. XML атрибуты для метаданных

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

Синтаксис

Атрибут XML имеет следующий синтаксис:

....content.. < /element-name>

где attribute1 и attribute2 имеют следующее сформировать:

Name = "value"

значение должно находиться в двойном ("") или определиться ("") цитаты. Здесь, attribute1 и attribute2 уникально ярлыки атрибута.

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

]>

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

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

Вы можете также наблюдать что мы объявляли этот атрибут в начале XML.

Типы атрибута

Следовать таблица перечисляет тип атрибутов:

Тип атрибута Описание
StringType

Оно принимает любую буквальную строку как значение. CDATA StringType. CDATA данные по характера. Эт середины, любая строка характеров non-повышения цены законная часть атрибута.

TokenizedType

Это больше ограниченный тип. Ограничения по ценности замеченные в грамматике прикладной после того как атрибут со значением normalized. Атрибуты TokenizedType даются как:

    Удостоверение личности: Оно использован для того чтобы определить элемент как уникально.

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

    IDREFS: Оно использован для того чтобы снабдить ссылками все IDs элемента.

    ENTITY: Она показывает что атрибут представит внешнюю реальность в документе.

    ENTITIES: Она показывает что атрибут представит внешние реальности в документе.

    NMTOKEN:

    NMTOKENS: Оно подобен к CDATA с ограничениями на какие данные могут быть частью атрибута.

ПеречисленныйTип

Это имеет список предопределенных значений в своем объявлении. из что, оно должно задать одно значение. 2 типа перечисленного атрибута:

    Тип примечания: Оно объявляет что элемент будет снабжен ссылками к НОТАЦИИ объявленной где-то еще в документе XML.

    Обозначение: Обозначение позволяет вам определить специфический список значений которым атрибут со значением должен соответствовать.

Правила атрибута элемента

Следование правила которым нужно быть следовать для атрибутов:

    Имя атрибута не должно появляться больше чем раз в такую же бирку старт-бирки или пуст-элемента.

    Атрибут необходимо объявить в определении типа документа (DTD) используя объявление Атрибут-Списка.

    Атрибуты со значением не должны содержать сразу или косвенные справки реальности к внешним реальностям.

    Текст замены любой реальности сослался к сразу или косвенно в атрибуте со значением содержать также чем знак <

Элементы или атрибуты?

Вопросы проектирования XML-форматов

Необычность XML заключается в том, что этот язык предлагает два почти эквивалентных, хотя и не совсем, способа написания фразы: "это данные". Первый способ указания значения данных - поместить его во вложенный элемент, второй - присвоить значению атрибута. Поскольку очевидный ответ на вопрос, когда какой из этих двух подходов является наиболее походящим, как правило, отсутствует, XML не является полностью ортогональным (в теории программирования под этим термином понимается следующее: "каждая конструкция выполняет одну вещь, и никакая другая конструкция не делает то же самое"). В этой статье приводятся рекомендации о том, когда использовать вложенные элементы, а когда атрибуты.

Единственно, когда не требуется решать, каким образом данные передаются - это в случае, если вам вручили спецификацию XML-диалекта, которой необходимо придерживаться - заданную как DTD или W3C XML-схема, или же описанную неформально или с помощью примера. Поэтому, если вам не нужно выбирать, оставьте без внимания рекомендации, приведенные в этой статье. Однако, разработчикам часто приходится разрабатывать точный XML-диалект для использования при обработке. Если это ваш случай, эта статья - для вас.

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

Важен ли порядок следования данных

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

Рассмотрим, например, список контактов (контактной информации), каждый из которых должен включать имя, возраст и номер телефона. Разумеется, с точки зрения логики, данные о возрасте не должны обязательно предшествовать номеру телефона. Поэтому, атрибуты и неупорядочены, и потому являются более интуитивным выбором. Сравните два небольших XML-документа, приведенные в Листингах 1 и 2:

Листинг 1. Использование атрибутов для передачи контактной информации Листинг 2. Использование вложенных элементов для передачи контактной информации Jane Doe 74 555-3412 Chieu Win 555-8888 44

Теперь представим, какой DTD может быть задан для каждого из этих XML-форматов. Для Листинга 1, демонстрирующего использование атрибутов, это мог бы быть следующий DTD:

Листинг 3. DTD для документа с использованием атрибутов

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

Листинг 4. DTD для документа с использованием вложенных элементов

Очевидный недостаток DTD, приведенного в Листинге 4, состоит в том, что этот простой пример (Листинг 2) является недопустимым согласно этому DTD. Дело в том, что порядок вложенных элементов нарушен. В таблице показано, как можно использовать неупорядоченные вложенные элементы с DTD, хотя, если не имеется иных непреодолимых причин, лучший выбор - воспользоваться заданием атрибутов для передачи неупорядоченных данных.

Возможность нахождения многочисленных данных на одном уровне

Если одни и те же данные неоднократно повторяются в пределах объекта, вложенные элементы несомненно предпочтительней. Например, в рассмотренном выше примере объект contacts содержит множество объектов contact . Понятно, что в этом случае каждый контакт должен быть описан в элементе-потомке элемента contacts .

Однако, в реальной жизни при внесении изменений разработчики часто уходят от этого принципа проектирования. Рассмотрим, как это может происходить: сначала вы определяете, что у каждого Flazbar имеется прикрепленный к нему flizbam (а flizbam описывается одной величиной). Кажется вполне разумным сберечь дополнительное наполнение вложенных элементов и создать атрибут flizbam для тега Flazbar . Однако, затем - после того, как вы уже написали великолепный рабочий код для обработки несколькими Flazbar - вы узнаете, что в некоторых случаях у Flazbar могут быть два flizbam. Но это не проблема: вы вносите незначительные изменения в установленный код и просто переписываете DTD:

После исправления кода ваши старые XML-документы по-прежнему допустимы, и новые работоспособны. Немного погодя вы обнаруживаете, что у Flazbar может быть третий flizbam...

Трудно не соблазниться этим коварным принципом проектирования. Однако, данные и объекты развиваются, и единичные предметы часто становятся двойными или многочисленными. По этой причине некоторые XML-программисты сторонятся атрибутов, но мне кажется, это уже слишком. Мой совет - тщательно продумайте на этапе проектирования, не появится ли позднее у единичной величины элементы одного уровня. Если есть все причины полагать, что в будущем появится множество элементов одного уровня, используйте вложенные элементы с самого начала. Если же вы уверены, что объект данных будет оставаться уникальным, придерживайтесь атрибутов.

Моделирование неупорядоченных вложенных элементов

Для того, чтобы XML-документ, представленный в Листинге 2, был допустимым, в DTD следует добавить следующее определение:

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

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

Обязательность сохранения свободного места

После выполнения нормализации атрибутов можно рассчитывать, что каждый атрибут отделен от своих соседей пробелом. Но это - все, на что можно рассчитывать. Для удобства чтения можно, не опасаясь осложнений, добавить вертикальное или горизонтальное свободное место к длинным значениям атрибутов (на самом деле это необходимо делать). Но если эти удобочитаемые атрибуты пойдут через XML-парсер, компоновка атрибутов, вероятно, будет несколько отличной от первоначальной, находящейся в исходном XML.

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

Важность удобочитаемости

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

Лично мне гораздо легче читать и писать атрибуто-ориентированные XML-форматы, а не ориентированные на вложенные элементы. Чтобы пояснить сказанное, вернемся к Листингам 1 и 2. Ни один из них не так уж сложно читать, но Листинг 2 , который демонстрирует подход, основанный на использовании атрибутов - проще, его также легче писать, поскольку не нужно озадачиваться проблемой непостоянства порядка следования вложенных элементов.

Заключение

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

Ресурсы

  • Все, что действительно необходимо знать о XML, это Рекомендация W3C "Расширяемый язык разметки (XML) 1.0" (Extensible Markup Language (XML) 1.0). Разумеется, чтобы понять, какое она имеет значение, требуется немного проницательности.
  • В рубрике XML Cover Pages приводятся рекомендации по "Использованию элементов и атрибутов" (Using elements and attributes). На этой странице также можно найти ссылки на ряд статей, в которых предлагаются взаимопротиворечащие рассуждения о том, что выбрать атрибуты или элементы. Именно по этой причине мы, программисты, и "получаем наш длинный доллар"!
  • Еще один способ понять различие между атрибутами и элементами - это изучить материалы "Форматы, основанные на документах, или форматы, основанные на данных" (" ").
  • Познакомьтесь с другими статьями колонки "Советы о XML" (XML tips), публикуемыми в разделе developerWorks XML.

Об авторе

Дэвид Мертц использует абсолютно неструктурированный интеллект, чтобы писать о форматах структурированных документов. Дэвид доступен по адресу: [email protected] , а жизнь его описана на http://gnosis.cx/publish/ .


По всей видимости, это опечатка (в оригинале стоит Listing 2): и вместо Листинга 2 должен быть Листинг 1 (прим. пер.)

Элементы и атрибуты в XML Схеме

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

– Простое содержимое. Элемент содержит только текст (хотя, как говорилось в предыдущем параграфе, текст можно ограничить данными отдельного типа, такими как дата или числовое значение). Содержимое этого типа определяет­ся при помощи элемента simpleContent.

– Толькоэлементы. Элемент содержит только вложенные элементы. Содержи­мое этого типа определяется при помощи элемента complexType.

– Смешанноесодержимое. Элемент может содержать и текстовое содержимое, и вложенные элементы. XML Schema требует, чтобы последовательность элементов и текстового со­дер­жимого была строго определена, и допустимые документы должны соот­ветствовать этой последовательности.

– Пустоесодержимое. Элемент содержит только атрибуты, и никакого тексто­вого содержимого. XML Schema интерпретирует такие элементы как особый случай содержимого типа «только элементы» без объявленных элементов.

– Любоесодержимое. Элемент может быть пустым, содержать вложенные эле­менты и/или текст. Содержимое этого типа определяется при помощи эле­мента anyТуре.

Эти базовые типы элементов могут задаваться в объявлениях элементов схемы. Кроме того, можно указать, что элемент может встречаться в документе несколько раз, и задать минимальное и максимальное количество вхождений. Подобно SQL, XML Schema поддерживает значение элементов NULL, указывающее, что содержи­мое элемента неизвестно. В терминологии XML это значение называется nil, но смысл его тот же самый. Поддержка этого значения упрощает перенос данных ме­жду XML и столбцами баз данных, которые могут содержать значения NULL.

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

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

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

Атрибуты предоставляют дополнительную информацию об элементе.

XML атрибуты

В HTML атрибуты предоставляют некоторую дополнительную информацию об элементе:

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

computer.gif

XML атрибуты должны заключаться в кавычки

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

либо так:

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

либо использовать символы сущностей:

XML элементы или атрибуты

Посмотрите на следующие примеры:

Пример №1

Anna Smith

Пример №2

female Anna Smith

В первом примере пол указан в атрибуте. Во втором, пол записан, как элемент. Оба примера предоставляют одну и ту же информацию.

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

Что лучше?

Следующие три XML документа содержат совершенно одинаковую информацию:

Дата записана, как атрибут :

Tove Jani Напоминание

Дата записана, как элемент :

10/01/2008 Tove Jani Напоминание Не забудь обо мне в эти выходные!

Дата записана, как расширенный элемент (На мой взгляд наилучший вариант):

10 01 2008 Tove Jani Напоминание Не забудь обо мне в эти выходные!

Избегать XML атрибуты?

При использовании атрибутов возникают некоторые проблемы:

  • атрибуты не могут содержать множественные значения (элементы могут)
  • атрибуты не могут содержать древовидные структуры (элементы могут)
  • атрибуты сложно расширять (для будущих изменений)

Никогда не используйте следующие конструкции:

XML атрибуты для метаданных

Иногда элементам присваивают идентификаторы. Эти идентификаторы используются для идентификации XML элементов в точности также, как идентификационные атрибуты в HTML. Следующий пример демонстрирует это:

Tove Jani Напоминание Не забудь обо мне в эти выходные! Jani Tove Re: Напоминание Не забуду

В приведенном примере атрибут id используется для идентификации разных заметок. Эта информация не является частью самой заметки.

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

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

Образец, с которым я столкнулся, по существу выглядит примерно так:

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

something something something something something

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

После долгого объяснения (извините), как вы определяете, что такое метаданные, и при разработке структуры документа XML, как вы должны решить, когда использовать атрибут или элемент?

20 ответов

Я использую это правило:

  • Атрибут - это то, что является самодостаточным, т.е. цвет, идентификатор, имя.
  • Элемент - это то, что делает или может иметь собственные атрибуты или содержать другие элементы.

Итак, ваш близок. Я бы сделал что-то вроде:

EDIT : обновлен исходный пример, основанный на обратной связи ниже.

something XYX YYZ

Некоторые из проблем с атрибутами:

  • атрибуты не могут содержать несколько значений (дочерние элементы могут)
  • атрибуты не просто расширяемы (для будущих изменений)
  • атрибуты не могут описывать структуры (дочерние элементы могут)
  • атрибуты сложнее манипулировать программным кодом Значения атрибутов
  • нелегко протестировать против DTD

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

Не заканчивайте так (это не то, как следует использовать XML):

"XML" означает "расширяемый язык разметки". Язык разметки подразумевает, что данные представляют собой текст, помеченный метаданными о структуре или форматировании.

XHTML - пример XML, используемый так, как он был предназначен:

El Jefe insists that you MUST complete your project by Friday.

Здесь различается различие между элементами и атрибутами. Текстовые элементы отображаются в браузере, а атрибуты - инструкции о том, как их отображать (хотя есть несколько тегов, которые не работают таким образом).

Путаница возникает, когда XML используется не как язык разметки, а как язык сериализации данных, в котором различие между "данными" и "метаданными" более неопределенно. Таким образом, выбор между элементами и атрибутами более или менее произволен, за исключением вещей, которые не могут быть представлены атрибутами (см. Ответ feenster).

XML - это соглашение. Сначала отложите все существующие схемы XML или установленные соглашения в рамках вашего сообщества или отрасли.

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

Content Hierarchical

  1. order
Can reference to re-use For humans Extreme use leads to document bloat Unique or non-unique names SAX parse: read later DTD: no default value

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

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

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

XYX YYZ

Теперь мы хотим отправить элемент ITEM на устройство для печати штрих-кода, однако есть выбор типов кодирования. Как мы представляем требуемый тип кодирования? Неожиданно мы несколько с опозданием понимаем, что штрих-код не является одним автоматическим значением, а скорее может быть квалифицирован с кодировкой, требуемой при печати. ​​

something XYX YYZ

Дело в том, что если вы не строите какой-либо XSD или DTD вместе с пространством имен, чтобы исправить структуру в камне, вам может быть лучше всего оставить свои варианты открытыми.

IMO XML наиболее полезен, когда его можно сгибать, не нарушая при этом существующий код.

Предпочтение атрибутов заключается в следующем:

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

Я добавил, когда технически возможно, потому что бывают случаи, когда использование атрибутов невозможно. Например, выбор набора атрибутов. Например использование (startDate и endDate) xor (startTS и endTS) невозможно с текущим языком схемы

Если XML Schema начинает разрешать ограниченную или расширенную модель контента "все", я бы, вероятно, сбросил ее

Нет универсального ответа на этот вопрос (я активно участвовал в создании спецификации W3C). XML может использоваться для многих целей - текстовые документы, данные и декларативный код являются тремя наиболее распространенными. Я также использую его как модель данных. Существуют аспекты этих приложений, где атрибуты более распространены и другие, где дочерние элементы более естественны. Существуют также функции различных инструментов, которые упрощают или упрощают их использование.

XHTML - это одна область, где атрибуты имеют естественное использование (например, в class= "foo"). Атрибуты не имеют порядка, и это может облегчить для некоторых людей разработку инструментов. Атрибуты OTOH сложнее вводить без схемы. Я также нахожу атрибуты с именами (foo: bar = "zork"), которые зачастую сложнее управлять в различных наборах инструментов. Но посмотрите на некоторые из языков W3C, чтобы увидеть смесь, которая является общей. SVG, XSLT, XSD, MathML - некоторые примеры хорошо известных языков, и все они имеют богатый запас атрибутов и элементов. Некоторые языки даже допускают больше, чем один способ, например,

;

bar; ;

Обратите внимание, что они НЕ эквивалентны синтаксически и требуют явной поддержки в инструментах обработки)

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

Наконец, убедитесь, что вы различаете пространства имен из атрибутов. Некоторые XML-системы (например, Linq) представляют пространства имен в качестве атрибутов API. ИМО это уродливое и потенциально запутанное.

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

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

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

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

Еще один момент, чтобы укрепить вашу позицию, заключается в том, что в то время как другая команда спорит о стиле (в том, что большинство инструментов XML будут обрабатывать полностью атрибутный документ так же просто, как и документ all-# PCDATA), вы утверждаете практичность. Хотя стиль не может быть полностью проигнорирован, технические достоинства должны нести больше веса.

Использовать элементы для данных и атрибутов для метаданных (данные о данных элемента).

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

Помните, что XML должен быть машиносчитываемым, не читаемым человеком, а для больших документов XML сжимается очень хорошо.

Как насчет того, чтобы использовать нашу интуицию, ориентированную на твердую заработную плату? Обычно я считаю, что прямо думать о том, что является объектом и является атрибутом объекта или объекта, на который он ссылается.

Каким бы интуитивно не было смысла, поскольку объекты должны вписываться в элементы. Его атрибуты (или свойства) будут атрибутами для этих элементов в xml или дочернем элементе с атрибутом.

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

вопрос в миллион долларов!

Вначале не беспокойтесь о производительности. вы будете удивлены тому, как быстро оптимизированный синтаксический анализатор xml будет копировать ваш XML файл. что более важно, каков ваш дизайн на будущее: по мере развития XML, как вы будете поддерживать свободную связь и функциональную совместимость?

более конкретно, вы можете сделать контентную модель элемента более сложной, но сложнее расширить атрибут.

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

Например, я предпочитаю.....

Вместо....

Rory Becker 30 Travis Illig 32 Scott Hanselman 34

Однако, если у меня есть данные, которые не могут легко отображаться внутри, например, 20-30 символов или содержат много кавычек или других символов, которые нужно экранировать, я бы сказал, что это время, чтобы разбить элементы... возможно, с блоками CData.

A programmer whose interested in all sorts of misc stuff. His Blog can be found at http://rorybecker.blogspot.com and he on twitter as @RoryBecker A cool guy for who has helped me out with all sorts of SVn information Scott works for MS and has a great podcast available at http://www.hanselminutes.com

Статьи по теме: