Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/11/2014, 13:24
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Duda xml: Espacio de nombre.

Hola,

Cita:
Iniciado por jamani18 Ver Mensaje
Buenas a todos tengo una duda y es que no se cuando se deben utilizar realmente los espacio de nombre, la teoria la tengo clara, pero no se si en ocasiones en mejor ponerlo en Atributos o en Espacios de nombre.
...
¿Cual estaría mejor formada de las dos?, Espero sus respuestas gracias :)
Antes de comenzar a explicarte detalladamente una historia que cuente una analogía de los espacios de nombre, las diferentes opciones y que, pensando, tu llegues a tus propias conclusiones, aunque al final te explique el por qué, mejor lo simplificamos, posiblemente no te interesa todo el detalle.

Los dos ejemplos que mostraste no son lo mismo, en el primer caso estarías definiendo con un attribute el rango del usuario como capitán, aunque aún así no significa que sea un capitán, hasta que tu le des ese significado con ese attribute en tus aplicaciones.

Al contrario que le des un significado semántico, por ejemplo:

<capitan nombre="Juan" apellido="Perez"/>

Adicionalmente, capitán podría heredar su definición de <usuario>.

Mientras que en el segundo caso estarías definiendo que el nombre está definido en el espacio de nombres de capitán, estás diciendo simplemente donde encontrar la definición de nombre.

Pero puede ser que el 'nombre' en un namespace esté definido como xs:string y en otro como xs:NCName, que seguramente no es lo que deseas en ese caso, inclusive podría ser que 'nombre' no tengan la misma definición, en uno sea simple y en el otro complejo, por lo que no podrías usarlo de esa forma.

<usuario capitan:nombre="Juan" sargento:apellido="Perez"/>
<usuario sargento:nombre="Pablo" capitan:apellido="Picazo"/>

En ese caso los dos usuario no tiene definido su nombre en el mismo lugar, por lo que el nombre no es 'compatible' entre Juan y Pablo, no son lo mismo porque están definidos en diferente lugar. Aunque al final eso lo puedes definir con el documento XSD, definir exactamente que es lo que se acepta en la definición de usuario.

Normalmente los namespaces sirven para diferenciar un conjunto específico, por ejemplo, todo lo reference a Microsoft podría tener el namespace com.microsoft; o todo lo referente a DocBook podría tener el namespace org.docbook. Por que 'nombre' para Microsoft podría ser una cosa y para DocBook otra.

Saludos,

ps:

Si conoces algún lenguaje de programación podrías hacer la analogía de los Packages en Java, los Namespaces en VB, C#, PHP. Otros no tiene namespaces como el caso de Javascript pero los puedes simular con una Class. En todos los casos te da un 'Scope' diferente de los nombres, las variables definidas a nivel global y su significado.