vacios uso son sintaxis que predefinidas minusculas mayusculas los etiquetas estructura entre entidades elementos distingue cuales basicas xml

uso - Mejores prácticas: atributo XML vs elemento XML: ¿cuándo debo usar elementos y cuándo debo usar atributos?



xml distingue entre mayusculas y minusculas (10)

No suele haber respuestas correctas o incorrectas para este tipo de cosas. En general, depende de cómo necesite acceder a sus datos.

Una cosa buena de la primera es que fácilmente, quizás más tarde, admite varias páginas en una sección y múltiples secciones en una categoría. En el segundo, esa información se extiende por páginas.

Esta pregunta ya tiene una respuesta aquí:

¿Cuál sería el formato correcto para estos datos XML, son equivalentes o hay intercambios entre los dos?

1.

<sitemap> <category name="Animals"> <section title="Dogs"> <page url="/pics/greatdane.jpg" title="Great Dane"/> </section> </category> </sitemap>

2.

<sitemap> <page> <category>Animals</category> <section>Dogs</section> <title>Great Dane</title> <url>/pics/greatdane.jpg</url> </page> </sitemap>

Implementé el primer ejemplo con mi hoja de estilos y parece funcionar bien, pero no estoy seguro de cuál debería ser la forma correcta.


XML es un formato de archivo horrible y termina en guerras religiosas. Haga lo que considere mejor en ese momento, siempre que pueda justificarlo. Sin embargo, sus ejemplos particulares son significativamente diferentes:

En 1, el mapa del sitio encapsula una categoría que encapsula una sección que encapsula la página.

En 2, el mapa del sitio encapsula una página que encapsula tres elementos: categoría, sección, título y URL. Ninguno de estos tres elementos contiene ningún otro, son hermanos, todos comúnmente dentro de la página.

Como dos estructuras diferentes, depende de lo que pretendías.

Una pregunta diferente sería la preferencia por los atributos frente a las etiquetas de primer nivel. Pero como digo, ¡esa es una pregunta diferente !


Yo prefiero el segundo Los elementos se deben usar para describir los datos (que es principalmente lo que estás haciendo). Los atributos se utilizan para valores no relevantes para los datos, como el tamaño máximo para un elemento, por ejemplo.


Creo que la respuesta es bastante obvia cuando piensas en cómo quieres agregar más perros:

<sitemap> <category name="Animals"> <section title="Dogs"> <page url="/pics/greatdane.jpg" title="Great Dane"/> <page url="/pics/wienerdog.jpg" title="Wiener Dog"/> </section> </category> </sitemap>

o

<sitemap> <page> <category>Animals</category> <section>Dogs</section> <title>Great Dane</title> <url>/pics/greatdane.jpg</url> </page> <page> <category>Animals</category> <section>Dogs</section> <title>Wiener Dog</title> <url>/pics/wienerdog.jpg</url> </page> </sitemap>



La primera alternativa escalas un poco mejor. Supongamos que necesita agregar otro atributo de una sección de animal, como el estado de la sección. Sugiero que esta representación:

<sitemap> <category name="Animals"> <section title="Dogs" status="draft"> ... </section> </category> </sitemap>

hace un mejor trabajo al transmitir los siguientes hechos:

  1. nombre es una propiedad de la categoría
  2. una categoría podría tener múltiples secciones
  3. el estado es una propiedad de una sección; no todas las secciones de la categoría deben tener el mismo estado.

En resumen, aclara la estructura jerárquica y muestra qué atributos se aplican en cada nivel de la jerarquía.


Uso elementos para datos y atributos para metadatos


Una simple regla general: si puede implementar una estructura de datos como un mapa desordenado de pares de nombre / valor, puede usar los atributos de un elemento para representarlo. Si no puede (si, por ejemplo, tendrá múltiples nombres, o un nombre tendrá múltiples valores asociados, o el orden de los pares nombre / valor es significativo), entonces un elemento con atributos es la representación incorrecta .

Otras dos cosas que pueden hacer que esta sea la representación incorrecta:

  • Los valores contienen marcado. Esto se puede representar en valores de atributo, pero es incómodo, porque todos los caracteres de marcado deben escaparse en entidades. Además, el marcado no será analizado.
  • Está utilizando la validación del esquema XML, y hay más de un conjunto permitido de pares de nombre / valor. XML Schema solo puede definir un conjunto de atributos permitidos para un elemento, mientras que puede definir múltiples conjuntos mutuamente exclusivos de elementos secundarios permitidos.

El beneficio obvio al uso de atributos es que dan como resultado terser XML. También son (muy) más rápidos de analizar que los elementos.


La cuestión de los atributos frente a los elementos ha existido durante la mayor parte de una década y no hay una respuesta correcta. En lugar de eso, considere las diferencias y, a partir de eso, debería poder decidir qué usar:

  • Solo puede haber una instancia de un atributo, aunque puede aplicar esto con elementos usando DTD o XML Schema;
  • Los atributos están desordenados. Los elementos no son;
  • Los atributos conducen a una sintaxis más concisa si no hay hijos. Comparar:

    <page name = "Sitemap" />

a:

<page> <name>Sitemap</name> </page>

Sé cuál prefiero;

  • Ahora no es realmente relevante ya que las DTD no se usan mucho (si es que se usan) sobre el Esquema XML, pero lo agregaré de todos modos: las DTD permiten valores predeterminados (implícitos) para los atributos pero ningún mecanismo para los elementos; y
  • Los elementos, siendo elementos, pueden tener hijos y atributos propios. Los atributos obviamente no pueden.

Entonces, a partir de su ejemplo, su elemento <page> más interno tiene un atributo URL (aunque es una imagen por alguna razón, tal vez un ícono de vista previa? De ser así, el nombre del atributo es engañoso). Una página web solo tiene una URL (generalmente), por lo que sería un buen ejemplo de algo que podría ser un atributo.

Si, por otro lado, quisiera enumerar las imágenes en la página, obviamente podría haber más de una, por lo que necesitaría elementos para eso.

Pero, al final, la mayoría de las veces no hay una respuesta correcta o incorrecta y en gran medida es una cuestión de estilo.


Los dos ejemplos no son equivalentes, ya que forman diferentes jerarquías. ¿Es un mapa del sitio una lista de categorías, como el primer ejemplo? ¿O es una lista de páginas como el segundo ejemplo?

La respuesta a eso es ortogonal a la pregunta elemento vs atributo.

En la pregunta Elemento frente a atributo: Aquí está su segundo ejemplo transformado en un enfoque de atributo:

<sitemap> <page category=''Animals'' section=''Dogs'' title=''Great Dane'' url=''/pics/greatdane.jpg'' /> </sitemap>

El anterior y su segundo caso son equivalentes. Una consideración para elegir uno frente a otro se basa en si puede modificar el esquema en el futuro. Agregar un atributo al elemento url como en el siguiente ejemplo probablemente sea un cambio comparativo hacia atrás. La misma modificación semánticamente sería imposible en el enfoque de atributo, ya que no se puede adjuntar un atributo a un atributo.

<sitemap> <page> <category>Animals</category> <section>Dogs</section> <title>Great Dane</title> <url nofollow="true">/pics/greatdane.jpg</url> </page> </sitemap>