¿Convenciones de casos sobre nombres de elementos?

120

¿Existen recomendaciones formales sobre la carcasa de elementos en XML?

Sé que XHTML usa nombres de elementos en minúsculas (a diferencia de HTML que canónicamente usa mayúsculas pero no distingue entre mayúsculas y minúsculas).

Pero estoy hablando de XML para contenido genérico.

minúscula:

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

el caso de Carmel:

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

PascalCase:

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

MAYÚSCULAS:

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

Nota: estoy buscando pautas citadas en lugar de opiniones. Pero la opinión con más votos a favor puede considerarse una guía.

Ian Boyd
fuente

Respuestas:

88

La mayoría de los estándares XML que se originan en el W3C tienden a usar minúsculas con guiones.

Existe una distinción filosófica entre ver XML como un formato para documentos neutrales de plataforma, que los estándares W3C intentan fomentar, y lenguajes como XAML, que ven XML como una serialización de un gráfico de objeto específico de la plataforma.

Si no está utilizando XML como un formato de documento neutral de la plataforma, sino como una serialización específica de la aplicación, entonces también podría ahorrarse algunas molestias y tener una correspondencia 1: 1 entre los nombres XML y los nombres específicos de la plataforma. Pero casi cualquier otro formato de gráfico de objetos es mejor que XML para ese propósito.

Si es así, es posible que desee encajar con XHTML, XSLT, SVG, XProc, RelaxNG y el resto.

Pete Kirkham
fuente
7
Entonces, ¿eso significa que se recomiendan o no se recomiendan minúsculas con guiones?
WarFox
9
@WarFox No creo que nadie haya hecho una recomendación oficial. IME, los formatos que provienen de w3c para la interoperabilidad tienden a estar en estilo guión; Los formatos que provienen de Microsoft y algunos otros tienden a estar estrechamente acoplados a una implementación y la convención para los nombres de los objetos en el lenguaje utilizado para la implementación. Si está utilizando XML para desacoplar sistemas, entonces no acoplar su XML al estilo de lenguaje de un componente de ese sistema puede obligarlo a pensar en términos de mensajes en lugar de objetos, por lo que recomendaría minúsculas y guiones.
Pete Kirkham
5
Tenga en cuenta que las 'minúsculas con guiones' tienen algunos problemas en XSLT. Específicamente, es fácil confundir un nodo llamado, digamos, 'año a partir de la edad' con una fórmula 'año - edad' (por ejemplo, restar la edad del año)
Richard Kennard
3
@RichardKennard ¿Es posible esa confusión solo a nivel humano? Para xslt, los espacios requeridos (?) Alrededor del operador proporcionan una distinción clara e inequívoca, ¿correcto?
Karl Kieninger
1
@KarlKieninger eso es cierto, pero la confusión a nivel humano es una preocupación importante, en mi humilde opinión. Vea mi respuesta ampliada a continuación.
Richard Kennard
64

No es que importe, pero siempre he sido parcial con PascalCase for Elements y camelCase en cuanto a atributos:

<Root>
  <ParentElement attributeId="1">
    <ChildElement attributeName="foo" />
  </ParentElement>
</Root>
Pitufo Metro
fuente
31

No hay ninguna recomendación formal.

Dado que XML se diseñó con el doble propósito de almacenar documentos e intercambiar información entre sistemas dispares , se diseñó para poder coincidir con las aplicaciones que lo utilizan.

Entonces .Net XML tiende a usar ProperCasing (testigo XAML), mientras que otros XML usarán camelCasing, python_conventions, dot.naming e incluso COBOL-CONVENTIONS. Al W3C parece gustarle las minúsculas con guiones bastante (por ejemplo, XSLT) o simplemente las palabras en minúscula mezcladas (por ejemplo, MathML).

Me gusta todo en minúsculas y sin guiones bajos, ya que eso significa menos uso de la tecla [Shift] y mis dedos son un poco perezosos. :)

lavinio
fuente
2
Parece que si tuviera el propósito de "intercambiar información", entonces sería absolutamente deseable un estándar para las convenciones de nombres. Esto también se aplicaría a cualquier documento utilizado por más de una implementación específica (por ejemplo, que no sean serializaciones únicas).
25

Para agregar a la respuesta de Metro Smurf.

El modelo de intercambio de información nacional (NIEM: http://en.wikipedia.org/wiki/National_Information_Exchange_Model ) dice que se use:

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

El NIEM es una buena opción cuando busca cumplir con algún estándar.

Koert van Kleef
fuente
1
Aquí está el documento NIEM donde describen las convenciones de nomenclatura para atributos y elementos: niem.gov/documentsdb/Documents/Technical/NIEM-NDR-1-3.pdf
e1i45
Sé que es antiguo, pero el enlace anterior está roto, pero este enlace parece tener detalles actualizados sobre la convención NIEM para Elements / Attrubutes: reference.niem.gov/niem/specification/naming-and-design-rules/…
CajunCoding
13

Para ampliar mi comentario anterior : el uso de 'minúsculas con guiones' tiene algunos problemas en XSLT. Específicamente, es fácil confundir un nodo llamado, digamos, 'año a partir de la edad' con una fórmula 'año - edad' (por ejemplo, restar la edad del año).

Como señala @KarlKieninger, esto es solo un problema a nivel humano y no para el analizador XSLT. Sin embargo, dado que esto a menudo no producirá un error , usar 'minúsculas con guiones' como estándar está buscando problemas, en mi humilde opinión.

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

En el código anterior, debe poner al menos un espacio antes de un operador de resta, pero no existe tal requisito para un operador de suma.

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

¡Pero tenga en cuenta lo confuso que es leer lo anterior!

<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 presencia de un solo espacio cambia la salida anterior, pero ninguna variante es un error.

Richard Kennard
fuente
3
Vendido. Además, la herramienta de generación de código MS .NET (xsd.exe) simplemente eliminará los guiones cuando cree clases de deserialización. Entonces, en cambio, si propiedades como "alpha-beta" obtienes "alphabeta". Así que no solo los nombres no se traducen exactamente, sino que son más difíciles de leer. Y si necesita crear xml con MS SQL, los guiones también son un problema. Las cosas específicas de MS no deberían dictar un estándar, pero su uso es lo suficientemente amplio como para que creo que pueda contarse como una consideración. Y me lleva hacia el subrayado delimitado en minúsculas o en minúsculas.
Karl Kieninger
1
Parece que XSD.exe ahora agrega un XmlElementAttribute a la mayoría de las propiedades y, si hay un guión, agrega explícitamente la cadena ElementName como primer parámetro para que se aclare. El problema que encontré es que, dependiendo de sus bibliotecas .NET, esto puede no importar: el elemento aún no se deserializará en algunos sistemas. Funciona en VS2012 en Win7, pero no se ejecuta como un EXE en un servidor 2008.
David Storfer
13

Consulte la Especificación técnica de las reglas de diseño y nombres XML de UN / CEFACT, versión 3.0, página 23, para ver algunos ejemplos de reglas utilizadas en varios estándares.

Detalles (de la página 23 de la Versión 3.0 con fecha del 17 de diciembre de 2009):

  • Se DEBE utilizar LowerCamelCase (LCC) para nombrar atributos.
  • UpperCamelCase (UCC) DEBE usarse para nombrar elementos y tipos.
  • Los nombres de elementos, atributos y tipos DEBEN estar en singular, a menos que el concepto en sí sea plural.

( otro enlace, sitio sueco )

oluies
fuente
2
-1: su enlace está roto, ¿tal vez sea una URL interna? Por favor, corríjalo y eliminaré el voto negativo.
John Saunders
3
Si bien es ciertamente interesante, el documento citado en esta sección / página específica establece reglas para los esquemas XML , no los analizadores / documentos xml que se adhieren a este esquema. Estas son dos cosas diferentes.
MrCC
Para cualquiera que se pregunte cuál es la diferencia entre LowerCamelCase y UpperCamelCase: mySettingName es un ejemplo de LowerCamelCase (que podría haber sido más inteligente para llamar a lowerCamelCase), y MySettingName es un ejemplo de UpperCamelCase.
Jinlye
4

La intención original para el formato XML era minúscula con guiones. Es sensible a mayúsculas y minúsculas y no requiere que sigas esa convención, por lo que puedes hacer lo que quieras. No tengo citas, lo siento.

Adam Luter
fuente
1

Yo no diría que HTML "canónicamente" usa mayúsculas. Creo que originalmente se usaban mayúsculas para separar visualmente HTML del contenido más fácilmente. Con el resaltado de sintaxis hoy en día, eso simplemente no es necesario.

Me desvío hacia las minúsculas, con guiones si es necesario (también más rápido para escribir). Mezclar mayúsculas y minúsculas en XML me parece mal.

Cabra descontenta
fuente
HTML es independiente de mayúsculas y minúsculas. Este no es el mismo XML / XHTML.
-2

El caso Camel tiene mi voto.

En cuanto a los ejemplos citados, quizás esta pregunta pueda ser el vínculo que la gente cita.

AnthonyWJones
fuente