Умовні випадки щодо назв елементів?


120

Чи існують офіційні рекомендації щодо корпусу елементів у XML?

Я знаю, що XHTML використовує маленькі назви елементів (на відміну від HTML, який канонічно використовує великі регістри, але нечутливі до регістру.)

Але я кажу про XML для загального вмісту.

малі літери:

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

camelCase:

<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>

Примітка: я шукаю цитовані вказівки, а не думки. Але думка з найбільшою кількістю голосів може вважатися орієнтиром.


Відповіді:


88

Більшість стандартів XML, що походять від W3C, як правило, використовують малі регістри з дефісами.

Існує філософська відмінність бачити XML як формат для нейтральних документів на платформі, який стандарти W3C намагаються заохотити, та такі мови, як XAML, які розглядають XML як серіалізацію конкретного графічного об'єктного графіка.

Якщо ви не використовуєте XML як нейтральний для платформи формат документа, але як серіалізацію, що залежить від програми, ви можете також заощадити себе і мати відповідність 1: 1 між іменами XML та конкретними іменами платформи. Але майже будь-який інший формат графічного об'єкта для цієї мети кращий, ніж XML.

Якщо ви є, то, можливо, вам захочеться вписатись у XHTML, XSLT, SVG, XProc, RelaxNG та інші.


7
значить, це означає, що нижній регістр із дефісами рекомендується чи не рекомендується?
WarFox

9
@WarFox Я не думаю, що хтось зробив офіційну рекомендацію. IME, формати, які надходять від w3c для сумісності, як правило, в стилі дефісів; формати, що надходять від Microsoft та деяких інших, як правило, тісно пов'язані з реалізацією та умовами для назв об'єктів на мові, що використовується для реалізації. Якщо ви використовуєте XML для роз'єднання систем, то не з'єднання вашого XML з мовним стилем одного компонента цієї системи може змусити вас думати про повідомлення, а не про предмети, і тому я рекомендую стилі нижнього регістру та дефісу.
Піт Кіркхем

5
Зауважте, що "малі з дефісами" мають деякі проблеми в XSLT. Зокрема, легко сплутати вузол, який називається, скажімо, "рік від віку", з формулою "рік - вік" (наприклад, відняти вік від року)
Річард Кеннард

3
@ RichardKennard Це плутанина можлива лише на людському рівні? Для xslt потрібні проміжки (?) Навколо оператора забезпечують чітке та однозначне розмежування, правильно?
Карл Кієнінгер

1
@KarlKieninger це правда, але плутанина на людському рівні викликає серйозне занепокоєння, ІМХО. Дивіться мою розгорнуту відповідь нижче.
Річард Кеннард

64

Це не важливо, але я завжди був частковим до PascalCase для елементів та camelCase за атрибутами:

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

31

Офіційної рекомендації немає.

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

Отже .Net XML прагне використовувати ProperCasing (свідок XAML), тоді як інші XML використовуватимуть camelCasing, python_conventions, dot.naming та навіть COBOL-CONVENTIONS. Здається, що W3C подобається з малих букв із тиреми (зовсім X-LL) (наприклад, XSLT) або просто маленьких слів, розбитих разом (наприклад, MathML).

Мені подобаються всі малі регістри і відсутність підкреслень, оскільки це означає менше використання клавіші [Shift], а мої пальці трохи ледачі. :)


2
Здається, що якби у нього була мета "обміну інформацією", то стандарт іменування конвенцій був би абсолютно бажаним. Це також стосується будь-яких документів, що використовуються більш ніж однією конкретною реалізацією (наприклад, це не були разові серіалізації).

25

Щоб додати відповідь Метро Смурфа.

Національна модель обміну інформацією (NIEM: http://en.wikipedia.org/wiki/National_Information_Exchange_Model ) говорить про використання:

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

NIEM робить хороший варіант, коли ви хочете відповідати якомусь стандарту.


1
Ось документ NIEM, де вони описують умови іменування атрибутів та елементів: niem.gov/documentsdb/Documents/Technical/NIEM-NDR-1-3.pdf
e1i45

Я знаю, що це старе, але вищезазначене посилання розірвано, але, схоже, у цьому посиланні є оновлені подробиці щодо конвенції NIEM для елементів / порушень: reference.niem.gov/niem/specification/naming-and-design-rules/…
CajunCoding

13

Щоб розширити свій коментар вище : використання "малих літер з дефісами" має деякі проблеми в XSLT. Зокрема, легко сплутати вузол, який називається, скажімо, "рік від віку", з формулою "рік - вік" (наприклад, відняти вік від року).

Як зазначає @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

Наявність єдиного простору змінює вихідний результат вище, але жоден варіант не є помилкою.


3
Продається. Додатково інструмент генерації коду MS .NET (xsd.exe) просто відкине дефіс, коли він створює класи десеріалізації. Тому замість таких властивостей, як "альфа-бета" ви отримуєте "alphabeta". Тож імена не лише точно перекладаються, їх важче читати. І якщо вам потрібно створити xml за допомогою дефісів MS SQL, це також біль. Матеріали, специфічні для MS, не повинні диктувати стандарт, але я вважаю, що це достатньо широке використання, я думаю, що це можна вважати врахуванням. І це спрямовує мене на підкреслення нижнього або змішаного регістру.
Карл Кієнінгер

1
Схоже, що XSD.exe тепер додає XmlElementAttribute до більшості властивостей, а якщо є дефіс, він явно додає рядок ElementName як перший параметр, щоб він з'ясувався. Проблема, яку я знайшов, полягає в тому, що залежно від ваших .NET-бібліотек це може не мати значення - елемент все одно не десеріалізується в деяких системах. Він працює у VS2012 на Win7, але не працює як EXE на сервері 2008 року.
Девід Сторфер

13

Див. Правила іменування та проектування XML UN / CEFACT Технічна специфікація Версія 3.0, сторінка 23 для деяких прикладів правил, які використовуються в кількох стандартах.

Особливості (зі сторінки 23 Версії 3.0 від 17 грудня 2009 року):

  • LowerCamelCase (LCC) ОБОВ'ЯЗКОВО використовуватись для іменування атрибутів.
  • UpperCamelCase (UCC) ОБОВ'ЯЗКОВО використовуватись для іменування елементів та типів.
  • Назви елементів, атрибутів та типів ОБОВ'ЯЗКОВО мають бути в однині, якщо само поняття не є множиною.

( інше посилання, шведський сайт )


2
-1: ваше посилання порушено - можливо, це внутрішня URL-адреса? Будь ласка, виправте це, і я зніму протокол.
Джон Сондерс

3
Хоча це, безумовно, цікаво, але цитований документ на цьому конкретному розділі / сторінці встановлює правила для XML- схем , а не парсери / XML-документи, які дотримуються цієї схеми. Це дві різні речі.
MrCC

Для всіх, хто цікавиться, в чому різниця між LowerCamelCase і UpperCamelCase: mySettingName є прикладом LowerCamelCase (який, можливо, було б розумніше називати LowerCamelCase), а MySettingName є прикладом UpperCamelCase.
Jinlye


4

Первісний намір для корпусу XML був нижчим регістром із дефісами. Це залежно від регістру і не вимагає дотримуватися цієї конвенції - тому ви можете робити все, що завгодно. У мене немає цитат, вибачте.


1

Я б не сказав, що HTML "канонічно" використовує великі регістри. Я думаю, що спочатку великі регістри використовувались для візуального відділення HTML від вмісту простіше. Сьогодні підкреслення синтаксису просто не обов’язково.

Я поглядаю на малі літери, якщо потрібно, тире (також швидше вводити). Змішування корпусу в XML мені просто не так.


HTML є реєстровим. Це не той самий XML / XHTML.

-2

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

Що стосується наведених прикладів, можливо, це питання може стати посиланням, яке цитують люди.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.