Konwencje przypadków w nazwach elementów?

120

Czy są jakieś formalne zalecenia dotyczące wielkości liter w XML?

Wiem, że XHTML używa nazw elementów z małych liter (w przeciwieństwie do HTML, który kanonicznie używa wielkich liter, ale nie rozróżnia wielkości liter).

Ale mówię o XML dla ogólnej zawartości.

małe litery:

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

camel

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

PascalCase:

<Customer> 
   <AccountNumber>619</AccountNumber>
   <Name>Shelby Lake</Name>
</Customer>

DUŻE LITERY:

<CUSTOMER> 
   <ACCOUNTNUMBER>619</ACCOUNTNUMBER>
   <NAME>Shelby Lake</NAME>
</CUSTOMER>

Uwaga: szukam raczej cytowanych wskazówek niż opinii. Jednak opinię, która uzyskała najwięcej pozytywnych głosów, można uznać za wskazówkę.

Ian Boyd
źródło

Odpowiedzi:

88

Większość standardów XML pochodzących z W3C ma tendencję do używania małych liter z myślnikami.

Istnieje filozoficzna różnica między postrzeganiem XML jako formatu dokumentów neutralnych dla platformy, do czego starają się zachęcić standardy W3C, a językami takimi jak XAML, które postrzegają XML jako serializację grafu obiektów specyficznych dla platformy.

Jeśli nie używasz XML jako formatu dokumentu neutralnego dla platformy, ale jako serializacji specyficznej dla aplikacji, równie dobrze możesz zaoszczędzić sobie kłopotów i mieć zgodność 1: 1 między nazwami XML a nazwami specyficznymi dla platformy. Ale prawie każdy inny format wykresu obiektowego jest lepszy niż XML do tego celu.

Jeśli tak, możesz chcieć dopasować się do XHTML, XSLT, SVG, XProc, RelaxNG i całej reszty.

Pete Kirkham
źródło
7
czy to oznacza, że ​​małe litery z łącznikami są zalecane, czy nie?
WarFox,
9
@WarFox Myślę, że nikt nie wydał oficjalnej rekomendacji. IME, formaty, które pochodzą z w3c w celu zapewnienia interoperacyjności, są zwykle w stylu łącznika; formaty, które pochodzą od firmy Microsoft i kilka innych, są zwykle ściśle powiązane z implementacją i konwencją nazw obiektów w języku używanym do implementacji. Jeśli używasz XML do oddzielenia systemów, to niepowiązanie twojego XML ze stylem języka jednego z komponentów tego systemu może zmusić cię do myślenia w kategoriach komunikatów, a nie obiektów, dlatego zalecałbym małe litery i styl łącznika.
Pete Kirkham,
5
Zwróć uwagę, że „małe litery z myślnikami” mają pewne problemy w XSLT. W szczególności łatwo jest pomylić węzeł zwany, powiedzmy, „rok od wieku” ze wzorem „rok - wiek” (np. Odejmij wiek od roku)
Richard Kennard
3
@RichardKennard Czy to zamieszanie jest możliwe tylko na poziomie ludzkim? W przypadku xslt wymagane spacje (?) Wokół operatora zapewniają jasne i jednoznaczne rozróżnienie, prawda?
Karl Kieninger,
1
@KarlKieninger to prawda, ale zamieszanie na poziomie ludzkim jest poważnym problemem, IMHO. Zobacz moją rozszerzoną odpowiedź poniżej.
Richard Kennard
64

Nie żeby to miało znaczenie, ale zawsze byłem stronniczy w PascalCase for Elements i camelCase dla atrybutów:

<Root>
  <ParentElement attributeId="1">
    <ChildElement attributeName="foo" />
  </ParentElement>
</Root>
Metro Smurf
źródło
31

Nie ma formalnego zalecenia.

Ponieważ XML został zaprojektowany z podwójnym celem przechowywania dokumentów i wymiany informacji między różnymi systemami , został zaprojektowany tak, aby móc dopasować aplikacje, które go używają.

Zatem .Net XML ma tendencję do używania ProperCasing (świadek XAML), podczas gdy inne XML będą używać camelCasing, python_conventions, dot.naming, a nawet COBOL-CONVENTIONS. Wydaje się, że W3C lubi małe litery z myślnikami-całkiem-trochę (np. XSLT) lub tylko małe litery połączone razem (np. MathML).

Lubię wszystkie małe litery i bez podkreślenia, ponieważ oznacza to mniejsze użycie klawisza [Shift], a moje palce są trochę leniwe. :)

lavinio
źródło
2
Wydaje się, że gdyby miał on na celu „wymianę informacji”, to standard konwencji nazewnictwa byłby absolutnie pożądany. Odnosi się to również do wszelkich dokumentów używanych przez więcej niż jedną określoną implementację (np. Które nie były jednorazowymi serializacjami).
25

Aby dodać do odpowiedzi Metro Smurf.

National Information Exchange Model (NIEM: http://en.wikipedia.org/wiki/National_Information_Exchange_Model ) mówi, że ma używać:

  • Upper CamelCase (PascalCase) dla elementów.
  • (niższy) camelCase dla atrybutów.

NIEM to dobra opcja, gdy chcesz dostosować się do jakiegoś standardu.

Koert van Kleef
źródło
1
Oto dokument NIEM, w którym opisują konwencje nazewnictwa atrybutów i elementów: niem.gov/documentsdb/Documents/Technical/NIEM-NDR-1-3.pdf
e1i45
Wiem, że jest stary, ale powyższy link jest uszkodzony, ale wydaje się, że ten link zawiera zaktualizowane szczegóły dotyczące konwencji NIEM dla elementów / atrybutów: reference.niem.gov/niem/specification/naming-and-design-rules/ ...
CajunCoding
13

Aby rozwinąć mój komentarz powyżej : użycie „małych liter z myślnikami” powoduje pewne problemy w XSLT. W szczególności łatwo jest pomylić węzeł zwany, powiedzmy, „rok od wieku” ze wzorem „rok - wiek” (np. Odjąć wiek od roku).

Jak wskazuje @KarlKieninger, jest to problem tylko na poziomie ludzkim, a nie dla parsera XSLT. Jednak ponieważ będzie to często nie powoduje to błędów , używanie „małych liter z myślnikami” jako standardu jest problemem, IMHO.

Kilka istotnych przykładów:

<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

W powyższym kodzie musisz umieścić co najmniej jedną spację przed operatorem odejmowania, ale nie ma takiego wymogu dla operatora dodawania.

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

Ale zwróć uwagę, jak mylące jest powyższe czytanie!

<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

Obecność pojedynczej spacji zmienia wynik powyżej, ale żaden z wariantów nie jest błędem.

Richard Kennard
źródło
3
Sprzedany. Dodatkowo narzędzie do generowania kodu MS .NET (xsd.exe) po prostu usuwa myślniki podczas tworzenia klas deserializacji. Więc zamiast tego, jeśli właściwości takie jak „alfa-beta” są „alfabeta”. Dlatego nazwy nie tylko nie tłumaczą się dokładnie, ale są trudniejsze do odczytania. A jeśli potrzebujesz zbudować XML z myślnikami MS SQL, to również jest uciążliwe. Rzeczy specyficzne dla MS nie powinny narzucać standardu, ale są na tyle szeroko stosowane, że myślę, że można je zaliczyć do rozważenia. I kieruje mnie w stronę podkreślenia rozdzielanego małymi lub mieszanymi literami.
Karl Kieninger
1
Wygląda na to, że XSD.exe dodaje teraz XmlElementAttribute do większości właściwości, a jeśli istnieje łącznik, jawnie dodaje ciąg ElementName jako pierwszy parametr, aby został wyjaśniony. Problem, który znalazłem, polega na tym, że w zależności od bibliotek .NET może to nie mieć znaczenia - element nadal nie będzie deserializować w niektórych systemach. Działa w VS2012 na Win7, ale nie działa jako EXE na serwerze 2008.
David Storfer
13

Zobacz dokument UN / CEFACT XML Naming Rules and Design Rules Technical Specification Version 3.0, strona 23, aby zapoznać się z przykładowymi regułami stosowanymi w kilku normach.

Szczegółowe informacje (od strony 23 wersji 3.0 z dnia 17 grudnia 2009 r.):

  • Do nazewnictwa atrybutów MUSI być używany LowerCamelCase (LCC).
  • Do nazywania elementów i typów MUSI być używany UpperCamelCase (UCC).
  • Nazwy elementów, atrybutów i typów MUSZĄ być w liczbie pojedynczej, chyba że samo pojęcie jest w liczbie mnogiej.

( inny link, szwedzka strona )

oluies
źródło
2
-1: Twój link jest uszkodzony - może to wewnętrzny adres URL? Napraw to, a ja wycofam głos przeciw.
John Saunders
3
Chociaż z pewnością interesujący, cytowany dokument w tej konkretnej sekcji / stronie ustanawia zasady dotyczące schematów XML , a nie dokumentów parsers / xml, które są zgodne z tym schematem. To są dwie różne rzeczy.
MrCC,
Dla każdego, kto zastanawia się, jaka jest różnica między LowerCamelCase i UpperCamelCase: mySettingName jest przykładem LowerCamelCase (która mogłaby być mądrzejsza do wywołania lowerCamelCase), a MySettingName jest przykładem UpperCamelCase.
Jinlye
4

Pierwotnym zamiarem stosowania wielkości liter XML były małe litery z łącznikami. Uwzględnia wielkość liter i nie wymaga przestrzegania tej konwencji - dzięki czemu możesz robić, co chcesz. Nie mam żadnych cytatów, przepraszam.

Adam Luter
źródło
1

Nie powiedziałbym, że HTML „kanonicznie” używa wielkich liter. Myślę, że pierwotnie wielkie litery były używane do wizualnego oddzielenia HTML od treści. W dzisiejszych czasach podświetlanie składni po prostu nie jest konieczne.

Skręcam w stronę małych liter, z myślnikami, jeśli to konieczne (szybsze też wpisywanie). Mieszanie wielkości liter w XML po prostu wydaje mi się złe.

Niezadowolony Kozioł
źródło
HTML nie uwzględnia wielkości liter. To nie jest ten sam XML / XHTML.
-2

Sprawa wielbłąda zdobywa mój głos.

Jeśli chodzi o cytowane przykłady, być może to pytanie może być linkiem, który ludzie cytują.

AnthonyWJones
źródło