Pregunta

Esto es algo que siempre me resulta un poco difícil de explicar a los demás: ¿Por qué existen los espacios de nombres XML? ¿Cuándo debemos usarlos y cuándo no? ¿Cuáles son las fallas comunes cuando se trabaja con espacios de nombres en XML?

Además, ¿cómo se relacionan con los esquemas XML? ¿Los esquemas XSD siempre deben estar asociados con un espacio de nombres?

¿Fue útil?

Solución

Son para permitir que se combinen múltiples lenguajes de marcado, sin tener que preocuparse por conflictos de nombres de elementos y atributos.

Por ejemplo, observe cualquier fragmento de código XSLT y luego piense qué pasaría si no usara espacios de nombres y estuviera tratando de escribir un XSLT donde la salida debe contener " plantilla " ;, " para-cada " ;, etc, elementos. Errores de sintaxis, es lo que.

Dejaré los consejos y las trampas a otros con más experiencia que yo.

Otros consejos

¿Por qué existen espacios de nombres XML?

Porque, en 1997, algunas personas muy influyentes en el W3C los querían, y no aceptaban un no por respuesta. Incluso cuando se demostró, me atrevo a decir de manera concluyente, que había mejores maneras de resolver el "problema" pensaron que lo habían hecho, aún ejercían su influencia para que sus deseos se incluyeran en una Recomendación del W3C.

El mayor obstáculo en la extensa mitología que rodea a los espacios de nombres XML es que existe un mérito técnico. (Este es el efecto descendente de una recomendación que simplemente existe y, por lo tanto, ocupa espacio mental: "vaya, tiene que haber una (buena) razón!", En oposición a una nota al pie en algún lugar).

Mucho dolor, ninguna ganancia .

¿Cuándo debemos usarlos y cuándo no?

Nunca debes usarlos si puedes evitarlo. Desafortunadamente, la implacable promoción de este dispositivo BAD [*] por parte de las partes interesadas ha fomentado un clusterf * ck de especificaciones hoy en día que hace prácticamente imposible no tener que lidiar con espacios de nombres XML en algún momento u otro. Por lo tanto, incluso si usted mismo evita los espacios de nombres XML, encontrará un conjunto de herramientas incrustadas en el espacio de nombres que le llegará desde todas las direcciones o, lo que es peor, conjuntos de herramientas que simplemente se niegan a trabajar a menos que usted las alimente.

¿Cuáles son las fallas comunes cuando se trabaja con espacios de nombres en XML?

Un error muy común es el uso de expresiones Xpath con documentos en los que un espacio de nombres se ha "predeterminado": el espacio de nombres tendrá que ser explícito en las expresiones. Otro problema es usarlos " correctamente " al construir documentos: crean problemas de la nada .

Además, ¿cómo se relacionan con los esquemas XML? ¿Los esquemas XSD siempre deben asociarse con un espacio de nombres?

No hay una relación necesaria, excepto que la especificación del esquema XSD se desarrolló en un momento en el que casi todos los miembros del comité tenían el bit de espacios de nombres XML en sus dientes. Así que trabajaron tan profundamente como pudieron. Sin embargo, es posible usar esquemas XSD sin espacios de nombres, pero es un empinado cuesta arriba, ya que casi todos los conjuntos de herramientas que admiten los esquemas XSD asumen que usted querrá " querer " para utilizar espacios de nombres.

[*] MALO = Roto como fue diseñado

ACTUALIZACIÓN: Un ensayo antiguo sobre esta no solución a un problema no .

Es casi lo mismo que preguntar " ¿por qué usamos paquetes para Java / C #? " ;:

  • reutilización : puede reutilizar un conjunto de etiquetas / atributos que defina en diferentes tipos de documentos xml.
  • modularidad : si necesitas agregar algún aspecto " " a su XML; agregar un espacio de nombres a su documento XML es más sencillo que cambiar la definición de esquema XML completo.
  • Evite contaminar el " main " espacio de nombres : no obliga a su analizador a trabajar con una definición de esquema enorme, solo use el espacio de nombres que necesita.

El mayor escollo de la IMHO son los documentos de interpretación de interacción humana, por ejemplo, para desarrollar código para procesar un documento XML. Es demasiado fácil concentrarse en la expresión literal del documento en lugar del resultado infoset del análisis del documento.

por ejemplo los siguientes nodos

<a xmlns="uri:foo"/>
<foo:a xmlns:foo="uri:foo"/>
<bar:a xmlns:bar="uri:foo"/>

son todos semánticamente idénticos, pero muy diferentes al ojo ingenuo.

El primer ejemplo produce un error muy común en el desarrollo de XPaths: falta el hecho de que " a " está en un espacio de nombres, por lo tanto, // a no produce coincidencias. (o, peor aún, los nodos coinciden en un espacio de nombres diferente!)

El tercer ejemplo abre otra falla en la comprensión: el texto del prefijo es semánticamente significativo. Al analizar documentos con XPATH puedo declarar cualquier prefijo que me guste para hacer coincidir, siempre y cuando su uri coincida con la del documento.

Piense en ellos como apellidos para los tipos de elementos. Si tienes dos amigos, ambos llamados Bob, y estás hablando de uno de ellos, alguien podría preguntar de qué Bob estás hablando. Simplemente diciendo " Bob " no es de mucha ayuda, por lo que dices "Bob Smith" o "Bob Jones".

Es lo mismo con los tipos de elementos. A veces, un nombre corto no es suficiente, porque diferentes personas pueden elegir el mismo nombre. Así que incluye un URI como " apellido " ;, para distinguir entre los diferentes Bobs que hay por ahí.

XML es un súper lenguaje, lo que significa que es la base de cualquier lenguaje basado en XML (tiene sentido, ¿verdad?). Piense en XML como un bolígrafo que puede escribir cualquier oración, en cualquier idioma. Todo depende del escritor, y preferiblemente el idioma debe ser conocido por el lector.

Un XML espacio de nombres es básicamente el nombre del idioma, muy parecido a " Inglés " o " ????? " ;. Ayuda al destinatario del documento XML a analizarlo y extraer la información que contiene.

Digamos que tengo una fábrica de muebles y usted tiene una tienda de muebles. su aplicación de almacenamiento y mi aplicación de suministro no están relacionadas, pero cuando se comunican a través de mensajes XML, los mensajes deben ser comprensibles y fáciles de analizar por ambas partes

Por lo tanto, ambos sistemas necesitan conocer el Esquema , que define la sintaxis del idioma y las restricciones acordadas. Piense en el esquema como el diccionario y el libro de texto de gramática. El esquema es el documento que ambos sistemas deben saber, que quienquiera que escriba el código de análisis en cada sistema debe saberlo, y eso incluye la declaración del espacio de nombres.

Cada espacio de nombres se denomina URI, que en la mayoría de los casos es la ubicación del documento de esquema que lo define.

Por supuesto, no todos los documentos XML necesitan un espacio de nombres, especialmente cuando no se utiliza para transmitir información a un sistema remoto. Por ejemplo, cuando serializa objetos en XML para persistir en su base de datos.

Usamos espacios de nombres porque la gente quiere usar las mismas palabras para significar diferentes cosas en su propio Idaho privado. Por lo general, puede determinar a partir del contexto lo que una persona quiere decir. En una base de datos de personal, el XML es registros de personal. En una base de datos de registro de vehículos, el XML son registros de registro de vehículos.

Ambos mantienen una etiqueta llamada "ubicación", pero la etiqueta significa cosas diferentes para cada uno y contiene campos diferentes.

Ahora, está bien: pero ¿qué sucede si necesita o desea almacenar XML de ambos en la misma base de datos? O, lo que es más interesante, qué sucede si ambas bases de datos desean almacenar fragmentos XML de alguna otra base de datos común (por ejemplo, una base de datos de Cuentas).

Los espacios de nombres XML asocian con cada etiqueta XML un URI, de modo que el nombre de la etiqueta en sí tiene una url delante, eso es parte del nombre de la etiqueta (por supuesto, los documentos XML reales usan una abreviatura para hacerlo). Al elegir cuidadosamente el URI, es fácil confiar en que los nombres de las etiquetas no coincidirán, es como si las dos etiquetas de ubicación fueran nombradas de manera completamente diferente, por lo que no hay confusión. Como beneficio adicional, las dos etiquetas de ubicación completamente diferentes pueden incluir elementos de la base de datos de cuentas y declarar explícitamente que están hablando de lo mismo.

Lo que hace que todo esto sea útil es XPATH.

Con lo anterior, puedes comenzar a escribir expresiones XPATH que digan cosas como: encuéntrame cualquier sección de cuentas: cuentas vencidas en cualquier lugar de este xml. O: búscame cualquier elemento de cuentas: mensaje de advertencia en cualquier parte de este trozo particular de XML, donde el mensaje de advertencia sea un nodo secundario (aunque sea profundo) de cualquiera de los personal: pago nodo o un nodo vehicle: status .

Esa expresión XPATH podría usarse en algún lugar de un documento XSLT, cuyo trabajo es convertir el XML en XHTML o XPDF, para su visualización.

¿Cuál es la recompensa? ¿Por que hacerlo? Debido a que puede buscar en el archivo de registro XML, saque todos los mensajes atrasados ??donde aparezcan, sin confundirlos con " mensaje " Las etiquetas producidas por otros sistemas , las convierten en xhtml y las muestran en negrita a través de una etiqueta css: todas sin escribir un fragmento de código de procedimiento .

Por ejemplo: Espacios de nombres XML por ejemplo

En mis palabras: si debe usar algún formato XML para una compañía externa (por ejemplo) y necesita proporcionar en el documento XML alguna información que tenga el mismo nombre, necesita un espacio de nombres. Ejemplo:

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="Blue"/>
      </items>
   </header>
</sampleDoc>

y desea combinar algunos datos en este documento, que tiene el mismo nombre, pero en otro sentido (por lo tanto, valor), debe usar un espacio de nombres:

<sampleDoc>
   <header title="Hello world!">
      <items>
         <item name="Volvo" color="White" my_unique_namespace:color="#FFFFFF"/>
      </items>
   </header>
</sampleDoc>

Por supuesto, puede cambiar el nombre de un atributo. Por ejemplo, a " my_unique_color " ;. Bud en otro documento, puede haber atributo con el mismo nombre de nuevo. Por lo tanto, si tiene un espacio de nombres único (nuestro dominio web, por ejemplo), siempre puede usar los mismos nombres de elementos y / o atributos sin ningún problema.

De la recomendación W3 ...

  

Los espacios de nombres XML proporcionan un método simple para calificar los nombres de elementos y atributos utilizados en los documentos de Lenguaje de marcado extensible al asociarlos con los espacios de nombres identificados por referencias URI.

Los espacios de nombre se usan para desambiguar los nombres que usa dentro del documento. También le brinda la posibilidad de vincular un nombre corto a un espacio de nombre que luego se puede usar para referirse a un elemento o atributo remoto. El espacio de nombres en sí se refiere a la ubicación que define los elementos y atributos que usa en el documento. Hay mucho más que saber, pero ese es el corazón de esto. Hay mucha más información aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top