Convenzioni case sui nomi degli elementi?


120

Esistono raccomandazioni formali sull'involucro degli elementi in XML?

So che XHTML utilizza nomi di elementi in minuscolo (al contrario dell'HTML che canonicamente usa le maiuscole ma non fa distinzione tra maiuscole e minuscole).

Ma sto parlando di XML per contenuti generici.

minuscolo:

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

MAIUSCOLO:

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

Nota: cerco linee guida citate piuttosto che opinioni. Ma l'opinione con il maggior numero di voti positivi può essere considerata una linea guida.


Risposte:


88

La maggior parte degli standard XML provenienti dal W3C tendono a utilizzare lettere minuscole con trattini.

Esiste una distinzione filosofica tra il vedere XML come un formato per documenti neutrali per la piattaforma, che gli standard W3C cercano di incoraggiare, e linguaggi come XAML che vedono XML come una serializzazione di un oggetto grafico specifico della piattaforma.

Se non stai utilizzando XML come formato di documento neutrale per la piattaforma, ma come serializzazione specifica dell'applicazione, potresti anche risparmiarti un po 'di fastidio e avere una corrispondenza 1: 1 tra i nomi XML ei nomi specifici della piattaforma. Ma quasi tutti gli altri formati di grafi a oggetti sono migliori dell'XML per questo scopo.

Se lo sei, allora potresti voler adattarsi a XHTML, XSLT, SVG, XProc, RelaxNG e il resto.


7
quindi significa che le lettere minuscole con trattini sono consigliate o sconsigliate?
WarFox

9
@ WarFox Non credo che nessuno abbia fatto una raccomandazione ufficiale. IME, i formati che provengono da w3c per l'interoperabilità tendono ad essere nello stile trattino; formati che provengono da Microsoft e alcuni altri tendono ad essere strettamente collegati a un'implementazione e alla convenzione per i nomi degli oggetti nel linguaggio utilizzato per l'implementazione. Se stai usando XML per disaccoppiare i sistemi, allora non accoppiare il tuo XML allo stile del linguaggio di un componente di quel sistema potrebbe costringerti a pensare in termini di messaggi piuttosto che di oggetti, quindi consiglierei lo stile delle lettere minuscole e dei trattini.
Pete Kirkham

5
Nota che "minuscolo con trattini" presenta alcuni problemi in XSLT. In particolare, è facile confondere un nodo chiamato, diciamo, "anno da età" con una formula "anno - età" (ad es. Sottrarre età dall'anno)
Richard Kennard

3
@RichardKennard Questa confusione è forse solo a livello umano? Per xslt gli spazi richiesti (?) Attorno all'operatore forniscono una distinzione chiara e univoca, corretto?
Karl Kieninger

1
@KarlKieninger è vero, ma la confusione a livello umano è una preoccupazione significativa, IMHO. Vedi la mia risposta estesa di seguito.
Richard Kennard,

64

Non che sia importante, ma sono sempre stato parziale a PascalCase per Elements e camelCase per gli attributi:

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

31

Non ci sono raccomandazioni formali.

Poiché XML è stato progettato con il duplice scopo di contenere documenti e scambiare informazioni tra sistemi disparati , è stato progettato in modo da essere in grado di abbinare le applicazioni che lo utilizzano.

Quindi .Net XML tende a utilizzare ProperCasing (testimone XAML), mentre altri XML utilizzeranno camelCasing, python_conventions, dot.naming e persino COBOL-CONVENTIONS. Il W3C sembra gradire le lettere minuscole con trattini abbastanza un po '(ad esempio XSLT) o solo parole minuscole smascherate insieme (ad esempio MathML).

Mi piacciono tutte le lettere minuscole e nessun trattino basso, poiché ciò significa meno uso del tasto [Maiusc] e le mie dita sono un po 'pigre. :)


2
Sembra che se avesse lo scopo di "scambiare informazioni", uno standard per le convenzioni di denominazione sarebbe assolutamente desiderato. Ciò si applicherebbe anche a tutti i documenti utilizzati da più di un'implementazione specifica (ad esempio, che non erano serializzazioni una tantum).

25

Da aggiungere alla risposta di Metro Smurf.

Il National Information Exchange Model (NIEM: http://en.wikipedia.org/wiki/National_Information_Exchange_Model ) dice di usare:

  • Upper CamelCase (PascalCase) per gli elementi.
  • (inferiore) camelCase per gli attributi.

Il NIEM rappresenta una buona opzione quando stai cercando di conformarti a uno standard.


1
Ecco il documento NIEM in cui descrivono le convenzioni di denominazione per attributi ed elementi: niem.gov/documentsdb/Documents/Technical/NIEM-NDR-1-3.pdf
e1i45

So che è vecchio, ma il collegamento sopra è rotto, ma questo collegamento sembra avere dettagli aggiornati sulla convenzione NIEM per Elements / Attrubutes: reference.niem.gov/niem/specification/naming-and-design-rules/…
CajunCoding

13

Per espandere il mio commento sopra : l'uso di "minuscolo con trattini" ha alcuni problemi in XSLT. In particolare, è facile confondere un nodo chiamato, diciamo, "anno da età" con una formula "anno - età" (ad es. Sottrarre età dall'anno).

Come sottolinea @KarlKieninger, questo è solo un problema a livello umano e non per il parser XSLT. Tuttavia, poiché questo spesso non produrrà un errore , l'utilizzo di "lettere minuscole con trattini" come standard è fonte di problemi, IMHO.

Alcuni esempi pertinenti:

<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

Nel codice precedente, è necessario inserire almeno uno spazio prima di un operatore di sottrazione, ma non esiste tale requisito per un operatore di addizione.

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

Ma nota quanto è complicato leggere quanto sopra!

<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

La presenza di un singolo spazio cambia l'output sopra, ma nessuna delle due varianti è un errore.


3
Venduto. Inoltre, lo strumento di generazione del codice MS .NET (xsd.exe) elimina semplicemente i trattini quando crea classi di deserializzazione. Quindi, se proprietà come "alpha-beta" ottieni "alphabeta". Quindi non solo i nomi non si traducono esattamente, sono più difficili da leggere. E se hai bisogno di creare xml con MS SQL, anche i trattini sono un problema. Le cose specifiche per MS non dovrebbero dettare uno standard, ma sono sufficientemente diffuse da poter essere considerate come una considerazione. E mi indirizza verso lettere minuscole o miste delimitate da trattini bassi.
Karl Kieninger

1
Sembra che XSD.exe ora aggiunga un XmlElementAttribute alla maggior parte delle proprietà e, se è presente un trattino, aggiunge esplicitamente la stringa ElementName come primo parametro, quindi è chiarito. Il problema che ho riscontrato è che, a seconda delle tue librerie .NET, questo potrebbe non avere importanza: l'elemento non verrà ancora deserializzato su alcuni sistemi. Funziona in VS2012 su Win7, ma non funziona come EXE su un server 2008.
David Storfer

13

Vedere la specifica tecnica UN / CEFACT XML Naming and Design Rules Versione 3.0 pagina 23 per alcune regole di esempio utilizzate in diversi standard.

Specifiche (da pagina 23 della versione 3.0 del 17 dicembre 2009):

  • LowerCamelCase (LCC) DEVE essere utilizzato per denominare gli attributi.
  • UpperCamelCase (UCC) DEVE essere utilizzato per denominare elementi e tipi.
  • I nomi di elementi, attributi e tipi DEVONO essere in forma singolare a meno che il concetto stesso non sia plurale.

( altro collegamento, sito svedese )


2
-1: il tuo link è rotto, forse è un URL interno? Per favore aggiustalo e rimuoverò il voto negativo.
John Saunders

3
Sebbene certamente interessante, il documento citato in questa specifica sezione / pagina stabilisce le regole per gli schemi XML , non i documenti parser / xml che aderiscono a questo schema. Queste sono due cose diverse.
MrCC

Per chiunque si chieda quale sia la differenza tra LowerCamelCase e UpperCamelCase: mySettingName è un esempio di LowerCamelCase (che avrebbe potuto essere più intelligente da chiamare lowerCamelCase) e MySettingName è un esempio di UpperCamelCase.
Jinlye


4

L'intento originale per il case XML era minuscolo con trattini. Fa distinzione tra maiuscole e minuscole e non richiede che tu segua quella convenzione, quindi puoi fare quello che vuoi. Non ho citazioni, mi dispiace.


1

Non direi che HTML usa "canonicamente" le maiuscole. Penso che originariamente le maiuscole fossero usate per separare visivamente l'HTML dal contenuto più facilmente. Con l'evidenziazione della sintassi al giorno d'oggi, non è necessario.

Viro verso le lettere minuscole, con trattini se necessario (anche più veloce da digitare). Mescolare maiuscole e minuscole in XML mi sembra sbagliato.


L'HTML è indipendente dalle maiuscole e dalle minuscole. Questo non è lo stesso XML / XHTML.

-2

Il caso del cammello ottiene il mio voto.

Quanto agli esempi citati, forse questa domanda può essere il collegamento citato dalle persone.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.