En los layouts de las activities de nuestras aplicaciones, por ejemplo, veremos que se define xmlns:android.
Esto es el Namespace que define la librería de donde se cogen los tags xml que se usan en el documento xml. Si no se cualifica el nombre de un tag o un atributo, se localizará en alguno de los namespaces definidos, pero para evitar colisiones se suelen especificar.
xmlns:android
Define el Namespace Android. Este atributo debe estar asignado siempre a “http://schemas.android.com/apk/res/android”.
Los Namespace identifican de manera única código/librerías. Si escribo un API que usa los mismos nombres que se usa en otra librería o API, la única forma de diferenciarlos es cualificando el nombre del tag o atributo con su namespace.
Los Namespaces se usan para no tener colisiones entre los nobmres de los elmentos.
Por ejemplo si creo un schema XML que define el elmento <persona> y un amigo define un XML schema distinto que también incluye un elemento <persona>, no podré usar ambos elementos, que se suponen diferentes, en el mismo fichero xml sin definir los namespaces. miNamespace:persona es el mio y amigoNamespace:persona es el de mi amigo. Incluyendo ambos Namespaces en la declaracion de mi xml podré usarlos siempre que los cualifique.
El estandar para definir un namespace es usar una URI.