Atributos XML vs Elementos

¿Cuándo debe usar atributos XML y cuándo debe usar elementos XML?

p.ej

     

o

    foo bar    

Hay un artículo titulado ” Principios del diseño XML: cuándo usar elementos versus atributos ” en el sitio web de IBM.

Aunque no parece haber muchas reglas duras y rápidas, hay algunas buenas pautas mencionadas en la publicación. Por ejemplo, una de las recomendaciones es usar elementos cuando sus datos no se deben normalizar para el espacio en blanco, ya que los procesadores XML pueden normalizar los datos dentro de un atributo, modificando así el texto sin formato.

Me encuentro refiriéndome a este artículo de vez en cuando a medida que desarrollo varias estructuras XML. Espero que esto sea útil también para otros.

editar – Desde el sitio:

Principio de contenido central

Si considera que la información en cuestión es parte del material esencial que se está expresando o comunicando en el XML, colóquelo en un elemento. Para documentos legibles por personas, esto generalmente significa el contenido central que se está comunicando al lector. Para los formatos de registros orientados a la máquina, esto generalmente significa los datos que provienen directamente del dominio del problema. Si considera que la información es periférica o incidental a la comunicación principal, o puramente para ayudar a las aplicaciones a procesar la comunicación principal, use atributos. Esto evita saturar el contenido del núcleo con material auxiliar. Para los formatos de registros orientados a la máquina, esto generalmente significa notaciones específicas de la aplicación en los datos principales del dominio del problema.

Como ejemplo, he visto muchos formatos XML, por lo general de fabricación local en las empresas, donde los títulos de los documentos se colocaron en un atributo. Creo que un título es una parte tan fundamental de la comunicación de un documento que siempre debe estar en el contenido del elemento. Por otro lado, a menudo he visto casos en que los identificadores internos del producto se arrojaron como elementos en los registros descriptivos del producto. En algunos de estos casos, los atributos eran más apropiados porque el código de producto interno específico no sería de interés primario para la mayoría de los lectores o procesadores del documento, especialmente cuando el ID era de un formato muy largo o inescrutable.

Es posible que haya escuchado que los datos principales van en los elementos, los metadatos en los atributos. Los dos párrafos anteriores realmente expresan el mismo principio, pero en un lenguaje más deliberado y menos confuso.

Principio de información estructurada

Si la información se expresa en una forma estructurada, especialmente si la estructura puede ser extensible, use elementos. Por otro lado: si la información se expresa como un token atómico, use atributos. Los elementos son el motor extensible para express la estructura en XML. Casi todas las herramientas de procesamiento XML están diseñadas en torno a este hecho, y si descompone adecuadamente la información estructurada en elementos, descubrirá que sus herramientas de procesamiento complementan su diseño y que, por lo tanto, obtendrá productividad y capacidad de mantenimiento. Los atributos están diseñados para express propiedades simples de la información representada en un elemento. Si trabajas en contra de la architecture básica de XML ajustando la información estructurada en atributos, puedes obtener cierta concisión y conveniencia, pero probablemente pagues los costos de mantenimiento.

Las fechas son un buen ejemplo: una fecha tiene una estructura fija y, en general, actúa como un único token, por lo que tiene sentido como un atributo (preferiblemente expresado en ISO-8601). Representar nombres personales, por otro lado, es un caso en el que he visto a este principio sorprender a los diseñadores. Veo mucho los nombres en los atributos, pero siempre he sostenido que los nombres personales deben estar en el contenido del elemento. Un nombre personal tiene una estructura sorprendentemente variable (en algunas culturas puede causar confusión u ofensa al omitir honoríficos o asumir un orden de partes de nombres). Un nombre personal raramente es un token atómico. Como ejemplo, a veces es posible que desee buscar u ordenar por un nombre de stack y, a veces, por un apellido. Debo señalar que es tan problemático calzar un nombre completo en el contenido de un solo elemento como ponerlo en un atributo.

Uno de los mejores elementos contra los argumentos de los elementos contra los atributos proviene de las directrices de GovTalk del Reino Unido . Esto define las técnicas de modelado utilizadas para los intercambios XML relacionados con el gobierno, pero se basa en sus propios méritos y vale la pena considerarlo.

Los esquemas DEBEN estar diseñados para que los elementos sean los principales poseedores de contenido de información en las instancias XML. Los atributos son más adecuados para contener metadatos auxiliares: elementos simples que proporcionan más información sobre el contenido del elemento. Los atributos NO DEBEN ser utilizados para calificar otros atributos donde esto podría causar ambigüedad.

A diferencia de los elementos, los atributos no pueden contener datos estructurados. Por esta razón, se prefieren los elementos como los principales titulares de contenido de información. Sin embargo, permitir el uso de atributos para mantener metadatos sobre el contenido de un elemento (por ejemplo, el formato de una fecha, una unidad de medida o la identificación de un conjunto de valores) puede hacer que un documento de instancia sea más simple y fácil de entender.

Una fecha de nacimiento puede estar representada en un mensaje como:

  1975-06-03 

Sin embargo, es posible que se requiera más información, por ejemplo, cómo se ha verificado esa fecha de nacimiento. Esto podría definirse como un atributo, haciendo que el elemento en un mensaje se vea como:

 1975-06-03 

Lo siguiente sería inapropiado:

 1975-06-03 

Aquí no está claro si el Código califica el atributo VerifiedBy o ValueSet. Una versión más apropiada sería:

   View of Birth Certificate 1975-06-03  
Intereting Posts