Convenções de caso sobre nomes de elementos?

120

Existem recomendações formais sobre o revestimento de elementos em XML?

Eu sei que o XHTML usa nomes de elementos em minúsculas (em oposição ao HTML que canonicamente usa maiúsculas, mas não diferencia maiúsculas de minúsculas).

Mas estou falando de XML para conteúdo genérico.

minúsculas:

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

MAIÚSCULAS:

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

Nota: estou procurando diretrizes citadas em vez de opiniões. Mas a opinião com mais votos positivos pode ser considerada uma diretriz.

Ian Boyd
fonte

Respostas:

88

A maioria dos padrões XML originários do W3C tendem a usar letras minúsculas com hífens.

Há uma distinção filosófica entre ver o XML como um formato para documentos neutros à plataforma, que os padrões W3C tentam incentivar, e linguagens como XAML, que vêem o XML como uma serialização de um gráfico de objeto específico da plataforma.

Se você não estiver usando XML como um formato de documento neutro de plataforma, mas como uma serialização específica de aplicativo, poupe um pouco de tempo e tenha uma correspondência 1: 1 entre os nomes XML e os nomes específicos da plataforma. Mas quase qualquer outro formato de gráfico de objeto é melhor que XML para esse propósito.

Se estiver, convém se encaixar com XHTML, XSLT, SVG, XProc, RelaxNG e o restante.

Pete Kirkham
fonte
7
então isso significa que letras minúsculas com hífens são recomendadas ou não?
WarFox 20/07/11
9
@ WarFox Acho que ninguém fez uma recomendação oficial. IME, os formatos que vêm do w3c para interoperabilidade tendem a estar no estilo hífen; os formatos provenientes da Microsoft e de alguns outros tendem a ser fortemente acoplados a uma implementação e à convenção para nomes de objetos no idioma usado para a implementação. Se você estiver usando XML para desacoplar sistemas, não acoplá-lo ao estilo de linguagem de um componente desse sistema pode forçá-lo a pensar em termos de mensagens em vez de objetos, por isso recomendo o estilo minúsculo e hífen.
Pete Kirkham
5
Observe que 'minúsculas com hífens' tem alguns problemas no XSLT. Especificamente, é fácil confundir um nó chamado, digamos, 'year-de-idade' com uma fórmula 'ano - idade' (por exemplo, subtrair a idade de ano)
Richard Kennard
3
@RichardKennard Essa confusão só é possível no nível humano? Para xslt, os espaços necessários (?) Ao redor do operador fornecem uma distinção clara e inequívoca, correto?
Karl Kieninger 18/09/2013
1
@KarlKieninger isso é verdade, mas a confusão no nível humano é uma preocupação significativa, IMHO. Veja minha resposta expandida abaixo.
Richard Kennard
64

Não que isso importe, mas sempre fui parte do PascalCase for Elements e do camelCase pelos atributos:

<Root>
  <ParentElement attributeId="1">
    <ChildElement attributeName="foo" />
  </ParentElement>
</Root>
Metro Smurf
fonte
31

Não há recomendação formal.

Como o XML foi projetado com o objetivo duplo de manter documentos e trocar informações entre sistemas diferentes , ele foi projetado para poder corresponder aos aplicativos que o utilizam.

Portanto, o .net XML tende a usar o ProperCasing (testemunha XAML), enquanto outro XML usa camelCasing, python_conventions, dot.naming e até COBOL-CONVENTIONS. O W3C parece gostar bastante de letras minúsculas com traços (por exemplo, XSLT) ou apenas de palavras-chave mais baixas (por exemplo, MathML).

Gosto de todas as letras minúsculas e sem sublinhados, pois isso significa menos uso da tecla [Shift], e meus dedos estão um pouco preguiçosos. :)

lavinio
fonte
2
Parece que, se tivesse o objetivo de "trocar informações", um padrão para convenções de nomes seria absolutamente desejado. Isso também se aplicaria a quaisquer documentos usados ​​por mais de uma implementação específica (por exemplo, que não fossem serializações pontuais).
25

Para adicionar à resposta do Metro Smurf.

O Modelo Nacional de Intercâmbio de Informações (NIEM: http://en.wikipedia.org/wiki/National_Information_Exchange_Model ) diz para usar:

  • CamelCase superior (PascalCase) para elementos.
  • camelCase (inferior) para atributos.

O NIEM é uma boa opção quando você procura se adequar a algum padrão.

Koert van Kleef
fonte
1
Aqui está o documento do NIEM, onde eles descrevem as convenções de nomenclatura para atributos e elementos: niem.gov/documentsdb/Documents/Technical/NIEM-NDR-1-3.pdf
e1i45
Eu sei que é antigo, mas o link acima está quebrado, mas esse link parece ter detalhes atualizados sobre a convenção NIEM para elementos / atributos: reference.niem.gov/niem/specification/naming-and-design-rules/…
CajunCoding
13

Para expandir meu comentário acima : o uso de 'lowercase with hyphens' tem alguns problemas no XSLT. Especificamente, é fácil confundir um nó chamado, digamos, 'ano a partir da idade' com a fórmula 'ano - idade' (por exemplo, subtrair a idade do ano).

Como o @KarlKieninger aponta, esse é apenas um problema no nível humano e não para o analisador XSLT. No entanto, como isso geralmente não produz um erro , usar 'minúsculas com hífens' como padrão está causando problemas, IMHO.

Alguns exemplos pertinentes:

<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

No código acima, você deve colocar pelo menos um espaço antes de um operador de subtração, mas não há esse requisito para um operador de adição.

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

Mas observe como é confuso o que foi dito acima!

<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

A presença de um único espaço altera a saída acima, mas nenhuma das variantes é um erro.

Richard Kennard
fonte
3
Vendido. Além disso, a ferramenta de geração de código do MS .NET (xsd.exe) simplesmente remove os hífens quando cria classes de desserialização. Então, se propriedades como "alfa-beta", você obtém "alphabeta". Portanto, os nomes não são traduzidos exatamente, são mais difíceis de ler. E se você precisa criar xml com hífens do MS SQL, também é um problema. O material específico da MS não deve ditar um padrão, mas é amplamente utilizado que eu acho que pode ser considerado como uma consideração. E isso me direciona para letras minúsculas ou mistas delimitadas por sublinhado.
precisa saber é o seguinte
1
Parece que o XSD.exe agora adiciona um XmlElementAttribute à maioria das propriedades e, se houver um hífen, ele explicitamente adiciona a string ElementName como o primeiro parâmetro, para que seja esclarecido. O problema que encontrei é que, dependendo das suas bibliotecas .NET, isso pode não importar - o elemento ainda não será desserializado em alguns sistemas. Ele funciona no VS2012 no Win7, mas não está sendo executado como um EXE em um servidor 2008.
David Storfer
13

Consulte a Especificação Técnica das Regras de Designação e Nomeação XML UN / CEFACT, versão 3.0 na página 23 para obter alguns exemplos de regras usadas em vários padrões.

Detalhes (da página 23 da versão 3.0 de 17 de dezembro de 2009):

  • LowerCamelCase (LCC) DEVE ser usado para nomear atributos.
  • UpperCamelCase (UCC) DEVE ser usado para nomear elementos e tipos.
  • Os nomes dos elementos, atributos e tipos devem estar na forma singular, a menos que o próprio conceito seja plural.

( outro link, site sueco )

oluies
fonte
2
-1: seu link está quebrado - talvez seja um URL interno? Corrija-o e removerei o voto negativo.
John Saunders
3
Embora certamente interessante, o documento citado nesta seção / página específica estabelece regras para esquemas XML , não os documentos analisadores / xml que aderem a esse esquema. Estas são duas coisas diferentes.
MrCC 17/01/16
Para quem quer saber qual é a diferença entre LowerCamelCase e UpperCamelCase: mySettingName é um exemplo de LowerCamelCase (que pode ter sido mais inteligente para chamar lowerCamelCase) e MySettingName é um exemplo de UpperCamelCase.
30619 Jinlye
12

O guia de estilo do Google recomenda (talvez até mandatos) o camelCase para todos os nomes de elementos, bem como nomes de atributos.

kencordero
fonte
4

A intenção original para o revestimento XML era minúscula com hífens. É sensível a maiúsculas e minúsculas e não requer que você siga essa convenção - para que você possa fazer o que quiser. Não tenho citações, desculpe.

Adam Luter
fonte
1

Eu não diria que o HTML "canonicamente" usa letras maiúsculas. Acho que originalmente em maiúsculas foi usado para separar visualmente o HTML do conteúdo mais facilmente. Atualmente, com o destaque da sintaxe, isso simplesmente não é necessário.

Viro para minúsculas, com traços, se necessário (mais rápido para digitar também). Misturar maiúsculas e minúsculas em XML parece errado para mim.

DisgruntledGoat
fonte
HTML é independente de maiúsculas e minúsculas. Este não é o mesmo XML / XHTML.
-2

O caso Camel recebe meu voto.

Quanto aos exemplos citados, talvez essa questão possa estar no link que as pessoas citam.

AnthonyWJones
fonte