Fallkonventionen für Elementnamen?


120

Gibt es formelle Empfehlungen zum Elementgehäuse in XML?

Ich weiß, dass XHTML Elementnamen in Kleinbuchstaben verwendet (im Gegensatz zu HTML, das kanonisch Großbuchstaben verwendet, jedoch die Groß- und Kleinschreibung nicht berücksichtigt).

Aber ich spreche von XML für generische Inhalte.

Kleinbuchstaben:

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

Großbuchstaben:

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

Hinweis: Ich suche eher nach zitierten Richtlinien als nach Meinungen. Die Meinung mit den meisten Stimmen kann jedoch als Richtlinie angesehen werden.


Antworten:


88

Die meisten aus dem W3C stammenden XML-Standards verwenden in der Regel Kleinbuchstaben mit Bindestrichen.

Es gibt eine philosophische Unterscheidung zwischen der Betrachtung von XML als Format für plattformneutrale Dokumente, die durch W3C-Standards gefördert werden sollen, und Sprachen wie XAML, die XML als Serialisierung eines plattformspezifischen Objektgraphen betrachten.

Wenn Sie XML nicht als plattformneutrales Dokumentformat, sondern als anwendungsspezifische Serialisierung verwenden, können Sie sich auch die Mühe sparen und eine 1: 1-Entsprechung zwischen den XML-Namen und den plattformspezifischen Namen herstellen. Zu diesem Zweck ist jedoch fast jedes andere Objektdiagrammformat besser als XML.

Wenn ja, möchten Sie vielleicht zu XHTML, XSLT, SVG, XProc, RelaxNG und den anderen passen.


7
Bedeutet das also, dass Kleinbuchstaben mit Bindestrichen empfohlen oder nicht empfohlen werden?
WarFox

9
@ WarFox Ich glaube nicht, dass jemand eine offizielle Empfehlung abgegeben hat. IME, die Formate, die aus Gründen der Interoperabilität von w3c stammen, sind in der Regel im Bindestrichstil. Formate, die von Microsoft und einigen anderen stammen, sind in der Regel eng an eine Implementierung und die Konvention für Namen von Objekten in der für die Implementierung verwendeten Sprache gekoppelt. Wenn Sie XML zum Entkoppeln von Systemen verwenden, kann das Nichtkoppeln Ihres XML an den Sprachstil einer Komponente dieses Systems dazu führen, dass Sie eher in Nachrichten als in Objekten denken. Daher würde ich den Stil von Kleinbuchstaben und Bindestrichen empfehlen.
Pete Kirkham

5
Beachten Sie, dass 'Kleinbuchstaben mit Bindestrichen' in XSLT einige Probleme hat. Insbesondere ist es leicht, einen Knoten namens "Jahr vom Alter" mit einer Formel "Jahr - Alter" zu verwechseln (z. B. Alter vom Jahr abziehen)
Richard Kennard

3
@RichardKennard Ist diese Verwirrung nur möglicherweise auf menschlicher Ebene möglich? Für xslt bieten die erforderlichen Leerzeichen (?) Um den Operator eine klare und eindeutige Unterscheidung, richtig?
Karl Kieninger

1
@KarlKieninger das stimmt, aber Verwirrung auf menschlicher Ebene ist meiner Meinung nach ein wichtiges Anliegen. Siehe meine erweiterte Antwort unten.
Richard Kennard

64

Nicht, dass es wichtig wäre, aber ich war schon immer an PascalCase für Elemente und camelCase für Attribute interessiert:

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

31

Es gibt keine formelle Empfehlung.

Da XML mit den Zwillings Zwecke entworfen wurde Dokumente halten und den Austausch von Informationen zwischen unterschiedlichen Systemen wurde entwickelt , um der Lage sein , entsprechen , die Anwendungen es verwenden.

Daher verwendet .Net XML in der Regel ProperCasing (Zeuge XAML), während andere XML-Dateien camelCasing, python_conventions, dot.naming und sogar COBOL-CONVENTIONS verwenden. Das W3C scheint Kleinbuchstaben mit Bindestrichen (z. B. XSLT) oder nur niedrigere Wörter zu mögen (z. B. MathML).

Ich mag alle Kleinbuchstaben und keine Unterstriche, da dies weniger Verwendung der [Umschalt] -Taste bedeutet und meine Finger etwas faul sind. :) :)


2
Es scheint, dass, wenn es den Zweck des "Informationsaustauschs" hätte, ein Standard für Namenskonventionen absolut erwünscht wäre. Dies würde auch für alle Dokumente gelten, die von mehr als einer bestimmten Implementierung verwendet werden (z. B. keine einmaligen Serialisierungen).

25

Zur Antwort von Metro Smurf hinzufügen.

Das National Information Exchange Model (NIEM: http://en.wikipedia.org/wiki/National_Information_Exchange_Model ) sagt Folgendes :

  • Oberes CamelCase (PascalCase) für Elemente.
  • (unterer) camelCase für Attribute.

Das NIEM ist eine gute Option, wenn Sie einem Standard entsprechen möchten.


1
Hier ist das NIEM-Dokument, in dem die Namenskonventionen für Attribute und Elemente beschrieben werden: Nobody.gov/documentsdb/Documents/Technical/NIEM-NDR-1-3.pdf
e1i45

Ich weiß, dass es alt ist, aber der obige Link ist defekt, aber dieser Link scheint aktualisierte Details zur NIEM-Konvention für Elemente / Attribute zu haben: reference.niem.gov/niem/specification/naming-and-design-rules/…
CajunCoding

13

Um meinen obigen Kommentar zu erweitern : Die Verwendung von 'Kleinbuchstaben mit Bindestrichen' hat einige Probleme in XSLT. Insbesondere ist es leicht, einen Knoten, der beispielsweise "Jahr vom Alter" genannt wird, mit einer Formel "Jahr - Alter" zu verwechseln (z. B. Alter vom Jahr abziehen).

Wie @KarlKieninger betont, ist dies nur ein Problem auf menschlicher Ebene und nicht für den XSLT-Parser. Da dies jedoch häufig keinen Fehler verursacht , ist die Verwendung von "Kleinbuchstaben mit Bindestrichen" als Standard ein Problem, IMHO.

Einige einschlägige Beispiele:

<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

Im obigen Code müssen Sie mindestens ein Leerzeichen vor einen Subtraktionsoperator setzen, es gibt jedoch keine solche Anforderung für einen Additionsoperator.

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

Beachten Sie jedoch, wie verwirrend das Lesen ist!

<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

Das Vorhandensein eines einzelnen Leerzeichens ändert die Ausgabe oben, aber keine der beiden Varianten ist ein Fehler.


3
Verkauft. Zusätzlich löscht das MS .NET-Codegenerierungstool (xsd.exe) beim Erstellen von Deserialisierungsklassen einfach die Bindestriche. Wenn Sie also Eigenschaften wie "Alpha-Beta" verwenden, erhalten Sie "Alphabet". Die Namen lassen sich also nicht nur nicht exakt übersetzen, sie sind auch schwerer zu lesen. Und wenn Sie XML mit MS SQL-Bindestrichen erstellen müssen, ist dies ebenfalls ein Problem. MS-spezifisches Material sollte keinen Standard vorschreiben, aber es ist weit genug verbreitet, dass ich denke, dass es als Überlegung gezählt werden kann. Und es lenkt mich in Richtung unterstrichener Klein- oder Mischbuchstaben.
Karl Kieninger

1
Es sieht so aus, als würde XSD.exe den meisten Eigenschaften jetzt ein XmlElementAttribute hinzufügen. Wenn ein Bindestrich vorhanden ist, wird die ElementName-Zeichenfolge explizit als erster Parameter hinzugefügt, damit dies klargestellt wird. Das Problem, das ich gefunden habe, ist, dass dies abhängig von Ihren .NET-Bibliotheken möglicherweise keine Rolle spielt - das Element wird auf einigen Systemen immer noch nicht deserialisiert. Es funktioniert in VS2012 unter Win7, wird jedoch nicht als EXE-Datei auf einem 2008-Server ausgeführt.
David Storfer

13

In den technischen Spezifikationen für UN / CEFACT-XML-Namen und -Designregeln, Version 3.0, Seite 23 finden Sie einige Beispielregeln, die in verschiedenen Standards verwendet werden.

Besonderheiten (ab Seite 23 der Version 3.0 vom 17. Dezember 2009):

  • LowerCamelCase (LCC) MUSS zum Benennen von Attributen verwendet werden.
  • UpperCamelCase (UCC) MUSS zum Benennen von Elementen und Typen verwendet werden.
  • Element-, Attribut- und Typnamen MÜSSEN in Singularform vorliegen, es sei denn, das Konzept selbst ist Plural.

( anderer Link, schwedische Seite )


2
-1: Ihr Link ist defekt - vielleicht ist es eine interne URL? Bitte beheben Sie das Problem, und ich werde die Ablehnung entfernen.
John Saunders

3
Das zitierte Dokument in diesem speziellen Abschnitt / auf dieser Seite ist zwar sicherlich interessant, legt jedoch Regeln für XML- Schemas fest , nicht für die Parser / XML-Dokumente, die diesem Schema entsprechen. Dies sind zwei verschiedene Dinge.
MrCC

Für alle, die sich fragen, was der Unterschied zwischen LowerCamelCase und UpperCamelCase ist: mySettingName ist ein Beispiel für LowerCamelCase (was möglicherweise klüger war, um lowerCamelCase zu nennen), und MySettingName ist ein Beispiel für UpperCamelCase.
Jinlye


4

Die ursprüngliche Absicht für XML-Casing war Kleinbuchstaben mit Bindestrichen. Es unterscheidet zwischen Groß- und Kleinschreibung und erfordert nicht, dass Sie diese Konvention befolgen - damit Sie tun können, was Sie wollen. Ich habe keine Zitate, sorry.


1

Ich würde nicht sagen, dass HTML "kanonisch" Großbuchstaben verwendet. Ich denke, ursprünglich wurde Großbuchstaben verwendet, um HTML visuell leichter vom Inhalt zu trennen. Bei der heutigen Syntaxhervorhebung ist dies einfach nicht erforderlich.

Ich wechsle in Kleinbuchstaben, wenn nötig mit Bindestrichen (auch schneller zu tippen). Das Mischen von Groß- und Kleinschreibung in XML fühlt sich für mich einfach falsch an.


HTML ist fallunabhängig. Dies ist nicht dasselbe XML / XHTML.

-2

Kamel Fall bekommt meine Stimme.

In Bezug auf angeführte Beispiele kann diese Frage vielleicht der Link sein, den die Leute zitieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.