¿Por qué necesitamos URI para espacios de nombres XML?

23

Estoy tratando de entender por qué necesitamos URI para espacios de nombres XML y no puedo encontrar un propósito para eso. ¿Alguien puede alegrarme un poco mostrando su uso en un ejemplo concreto?

EDITAR:

Ok, por ejemplo: tengo esto de w3schools

<root
xmlns:h="http://www.w3.org/TR/html4/"
 xmlns:f="http://www.w3schools.com/furniture">

 <h:table>
   <h:tr>
     <h:td>Apples</h:td>
     <h:td>Bananas</h:td>
   </h:tr>
 </h:table>

 <f:table>
   <f:name>African Coffee Table</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
 </f:table>

 </root>

Entonces, ¿qué debería http://www.w3schools.com/furniturecontener?

Patryk
fuente
77
Comentario obligatorio de w3fools .
Yannis
Entonces, ¿los espacios de nombres XML tienen que estar en formato URI? ¿O puedo usar cualquier cadena como 'My.Namespace.Foo'?
Mas

Respuestas:

20

Un espacio de nombres es una forma de decir "Este tipo de Foo" es diferente de "Ese tipo de Foo", a pesar de que se escriben de la misma manera. O, si prefieres " MY kind of Foo" es diferente de " Everybody elses kind of Foo".

La forma técnica de decir esto es "El URI de mi espacio de nombres para Foo" es diferente del URI de todos los demás para su espacio de nombres para Foo. En otras palabras, los URI son solo cadenas que le permiten decirlo.

El truco consiste en decir: "Hey, las URL son URI válidas", y luego usar un URI correspondiente a una URL bajo su control. Si todo el mundo hace eso, entonces evita las colisiones accidentales de espacio de nombres. También podría haber dicho el espacio de nombres "A" y el espacio de nombres "B", pero se arriesga a que otra persona use el mismo espacio de nombres también, y entonces su tipo de Foo ya no es diferente de su Foo, que es exactamente lo que desea evitar .

Luego puede agregar una convención adicional a las URL utilizadas como URI, por ejemplo, que la URL debe corresponder a una página que contenga documentación o XSD o similar, pero esto no es necesario. Es solo conveniente.


fuente
Ok, pero ¿cuál es la diferencia entre el espacio de nombres A y el espacio de nombres w3.org/1999/xhtml ? los usuarios pueden usar ambos sin que sepan que han usado los mismos espacios de nombres.
Patryk
1
@Patryk, es por eso que usas una URL sobre la que tienes control. La URL del espacio de nombres xhtml está bajo el control de W3C, quien definió la especificación XHTML.
2
@Patryk, también tenga en cuenta que son los que definen el espacio de nombres el que elige la URL. Entonces todos los demás pueden usarlos .
1
¿Entonces el espacio de nombres asería totalmente válido? ¿Estúpido, pero válido? ¿O tiene que ser un URI?
Rudie
55
¿No habría sido increíble si las primeras personas en usar esa convención hace años también hubieran puesto documentación muy concisa de sus esquemas en esas URL para que eso se convirtiera en algo? Los espacios de nombres OpenXML de Microsoft schemas.openxmlformats.org/drawingml/2006/chart apuntan a nada.
prototipo del
16

En términos generales, cualquier identificador único serviría para un espacio de nombres; pero como se supone que es único a nivel mundial , el estándar tendría que exigir alguna autoridad de arbitraje o utilizar otro recurso que sea al mismo tiempo único a nivel mundial pero fácil de conseguir y demostrar que es suyo.

¡Oh mira! si tienes un dominio, obviamente es solo tuyo, ¡y es fácil demostrar que es tuyo!

Por ejemplo, querían evitar la situación en la que dos librerías diferentes comienzan a usar "libros" como un espacio de nombres, con definiciones internas totalmente diferentes. Si bien lo usan internamente, no hay problema; pero tan pronto como uno de ellos quiere publicar sus especificaciones, se desata el infierno.

En cambio, si se le anima a usar su dominio, cualquiera (bueno, cualquiera que tenga un dominio) puede definir su propio espacio de nombres privado con la confianza de que nadie más usará el mismo identificador.

Como beneficio adicional, opcionalmente puede almacenar la definición de su espacio de nombres en el URI, lo que hace que se auto documente.

Me parece una gran idea.

Javier
fuente
Gracias por la respuesta, pero necesitaría algo más concreto para entender esto. Agregué un código ejemplar en el que puede basarse, eche un vistazo.
Patryk
1
@patryk, nada, no es una dirección, es solo un token único con el que está seguro de que nadie más puede mezclar archivos xml. Todo lo que dice es que los nombres <table> etc. no se utilizarán con ningún significado diferente en ningún archivo xml que tenga el nombre www.w3.org en la parte superior
Martin Beckett
Ok, pero cuando wikipedia dice algo que los usuarios pueden usar, por ejemplo, w3.org/1999/xhtml como un espacio de nombres, mucha gente tendría el mismo espacio de nombres. Estoy en lo cierto?
Patryk
@Patryk, solo si desea usarlo para el mismo uso. Si desea definir un nuevo espacio de nombres, le recomendamos que use su propio dominio
Javier
@Javier ¿Qué quieres decir con 'el mismo uso'?
Patryk
1

El Nivel 2 del DOM se publicó a fines de 2000. Introdujo la función "getElementById", así como un modelo de eventos y soporte para espacios de nombres XML y CSS.

¿Qué especifica xmlIns?
Como nodos de atributo llamados "xmlns" o "xmlns: xxx", exactamente como los espacios de nombres están escritos en el documento XML de origen. Este es el modelo presentado por DOM.

¿Qué contiene el URI?
Un espacio de nombres XML se declara utilizando el pseudoatributo XML reservado xmlns o xmlns: prefijo, cuyo valor debe ser un nombre de espacio de nombres válido.

Por ejemplo, la siguiente declaración asigna el prefijo "xhtml:" al espacio de nombres XHTML:

xmlns: xhtml = "http://www.w3.org/1999/xhtml"

Como he descubierto después de leer el artículo en Wikipedia. El URI contiene las especificaciones con formato XML del espacio de nombres que proporcionan un método para evitar conflictos de nombres de elementos.

Es posible que sepa que el documento xml utiliza XML Schemala estructura de elementos / tablas / clases de elementos del documento XML.

¿Qué debe tener http://www.w3schools.com/furniture ?

La respuesta está en su página donde aprendió sobre el espacio de nombres XML. Consulte la Namespaces in Real Usesección sobre este artículo de W3Schools .

Verifique el siguiente enlace de stackoverflow que demuestra lo que lleva este URI:

¿Cómo crear y usar el espacio de nombres XML?

Niranjan Singh
fuente
-1

URI = nombre o identificador globalmente único del espacio de nombres

Considere crear una base de datos o documento sobre la gestión financiera de la logística de la industria petrolera. Eso necesitaría usar vocabularios específicos (es decir, términos controlados) para cada uno de los temas: base de datos, documento, gestión, finanzas, logística, petróleo e industria.

Si ninguno de los términos se superpone a estos siete vocabularios, solo se necesita un URI. Pero para cada término que se superponga con otros términos en estos vocabularios, necesitaría un vocabulario adicional específico del tema identificado en un URI o IRI. Una forma de evitar esto es crear una taxonomía fusionada, con términos generales más amplios y términos más específicos para temas específicos.

Esto podría expandirse a un diccionario de sinónimos que también muestre los sinónimos de la jerga de un término y permita la especificación de un término preferido entre esos sinónimos de la jerga.

Roy Roebuck
fuente
2
esta publicación es bastante difícil de leer (muro de texto). ¿Te importaría editarlo en una mejor forma?
mosquito