Условные обозначения имен элементов?

99

Существуют ли какие-либо формальные рекомендации по обтеканию элементов в XML?

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

Но я говорю о XML для общего контента.

в нижнем регистре:

<customer> 
   <accountnumber>619</accountnumber>
   <name>Shelby Lake</name>
</customer>

верблюжий:

<customer> 
   <accountnumber>619</accountnumber>
   <name>Shelby Lake</name>
</customer>

PascalCase:

<customer> 
   <accountnumber>619</accountnumber>
   <name>Shelby Lake</name>
</customer>

ВЕРХНИЙ:

<customer> 
   <accountnumber>619</accountnumber>
   <name>Shelby Lake</name>
</customer>

Примечание. Я ищу ссылки, а не мнения. Но мнение с наибольшим количеством голосов можно считать ориентиром.

Теги:
case-sensitive

10 ответов

75
Лучший ответ

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

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

Если вы не используете XML в качестве формата нейтрального документа платформы, но как сериализацию, специфичную для приложения, тогда вы можете сэкономить себе некоторую озабоченность и иметь соответствие 1:1 между именами XML и именами, специфичными для платформы. Но почти любой другой формат графа объекта лучше, чем XML для этой цели.

Если да, то вы можете захотеть вписаться в XHTML, XSLT, SVG, XProc, RelaxNG и остальные.

  • 7
    так что это означает, что строчные буквы с дефисами рекомендуется или не рекомендуется?
  • 9
    @ WarFox Не думаю, что кто-то сделал официальную рекомендацию. IME, форматы, которые приходят от w3c для совместимости, как правило, в стиле дефиса; форматы от Microsoft и некоторых других, как правило, тесно связаны с реализацией и соглашением об именах объектов на языке, используемом для реализации. Если вы используете XML для разъединения систем, то отсутствие привязки вашего XML к стилю языка одного из компонентов этой системы может заставить вас думать в терминах сообщений, а не объектов, и поэтому я бы порекомендовал стиль в нижнем регистре и дефис.
Показать ещё 5 комментариев
54

Не важно, но я всегда был частичным для PascalCase для Elements и camelCase для атрибутов:

<Root>
  <ParentElement attributeId="1">
    <ChildElement attributeName="foo" />
  </ParentElement>
</Root>
27

Официальной рекомендации нет.

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

Итак. XML XML имеет тенденцию использовать ProperCasing (свидетельство XAML), в то время как другой XML будет использовать camelCasing, python_conventions, dot.naming и даже COBOL-CONVENTIONS. W3C, по-видимому, похож на нижний регистр с тире - довольно-разрядный (например, XSLT) или просто на несколько секунд (например, MathML).

Мне нравится весь нижний регистр и не подчеркивается, поскольку это означает меньшее использование клавиши [Shift], а мои пальцы немного ленивы.:)

  • 2
    Похоже, что если бы он имел целью «обмен информацией», то стандарт соглашений об именах был бы абсолютно желательным. Это также относится к любым документам, используемым более чем одной конкретной реализацией (например, которые не были одноразовыми сериализациями).
22

Чтобы добавить к ответам Metro Smurf.

Национальная модель обмена информацией (NIEM: http://en.wikipedia.org/wiki/National_Information_Exchange_Model) говорит:

  • Верхний элемент CamelCase (PascalCase) для элементов.
  • (ниже) camelCase для атрибутов.

NIEM делает хороший вариант, если вы хотите соответствовать стандарту.

12

Для некоторых примеров правил, используемых в нескольких стандартах, см. Техническая спецификация правил именования и проектирования XML Names and Design Rules Version 3.0 стр. 23. p >

Особенности (со страницы 23 версии 3.0 от 17 декабря 2009 года):

  • LowerCamelCase (LCC) ДОЛЖНА использоваться для обозначения атрибутов.
  • UpperCamelCase (UCC) ДОЛЖНА использоваться для обозначения элементов и типов.
  • Элементы, атрибуты и имена типов ДОЛЖНЫ быть в единственной форме, если само понятие не является множественным.

(другая ссылка, шведский сайт)

  • 2
    -1: ваша ссылка не работает - возможно, это внутренний URL? Пожалуйста, исправьте это, и я уберу понижающий голос.
  • 0
    ОК, изменил на другие ссылки
Показать ещё 1 комментарий
8

Чтобы расширить мой комментарий выше: использование "строчных букв с дефисами" имеет некоторые проблемы в XSLT. В частности, легко ввести в заблуждение node, называемый "год от года" с формулой "год - возраст" (например, вычесть возраст из года).

Как отмечает @KarlKieninger, это только проблема на человеческом уровне, а не для синтаксического анализа XSLT. Однако, поскольку это часто не вызывает ошибки, использование "нижнего регистра с дефисами" в качестве стандарта запрашивает проблемы, IMHO.

Некоторые подходящие примеры:

<a>1</a><b>1</b>
<xsl:value-of select="a+b"/>
outputs 2, as expected

<a>1</a><b>1</b>
<xsl:value-of select="a-b"/>
DOES NOT ERROR, BUT OUTPUTS NOTHING AT ALL

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

<a-b>1</a-b><c>1</c>
<xsl:value-of select="a-b -c"/>
outputs 0, as expected

Но обратите внимание на то, как сбивать с толку приведенное выше!

<a>1</a><a-b>3</a-b><b>2</b>
<xsl:value-of select="a-b"/>
outputs 3

<a>1</a><a-b>3</a-b><b>2</b>
<xsl:value-of select="a -b"/>
outputs -1

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

  • 2
    Продано. Кроме того, средство создания кода MS .NET (xsd.exe) просто удалит дефисы при создании классов десериализации. Поэтому вместо свойств типа «альфа-бета» вы получаете «альфа-бета». Так что не только имена точно не переводятся, их сложнее читать. И если вам нужно создать xml с MS SQL, то дефисы тоже являются проблемой. Специфичные для MS вещи не должны диктовать стандарт, но он достаточно широко используется, и я думаю, что его можно считать соображением. И это направляет меня к нижнему регистру или смешанному регистру с подчеркиванием.
  • 1
    Похоже, что XSD.exe теперь добавляет XmlElementAttribute к большинству свойств, и, если есть дефис, он явно добавляет строку ElementName в качестве первого параметра, поэтому он поясняется. Проблема, которую я обнаружил, заключается в том, что в зависимости от ваших библиотек .NET это может не иметь значения - этот элемент все еще не будет десериализован в некоторых системах. Он работает в VS2012 на Win7, но не работает как EXE на сервере 2008.
8

Руководство по стилю Google рекомендует (возможно, даже мандаты) camelCase для всех имен элементов, а также имена атрибутов.

4

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

  • 8
    -1: Адам, без цитат, это не очень хороший ответ.
1

Я бы не сказал, что HTML "канонически" использует прописные буквы. Я думаю, что изначально прописные буквы использовались для более простого визуального выделения HTML из контента. С подсветкой синтаксиса в настоящее время это просто не нужно.

Я поворачиваюсь в направлении нижнего регистра, при необходимости дешифруя (быстрее и тише). Смешивание в XML просто мне кажется неправильным.

  • 0
    HTML не зависит от регистра. Это не тот же XML / XHTML.
-2

Случай с верблюдом получает мой голос.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню