In general, an XML namespace does not serve any purpose apart from uniquely identifying the elements that are associated with it.
In other words, the String "http://www.myNameSpace.com" as in:
<rootElement xmlns:myNameSpace="http://www.myNameSpace.com">
is purely arbitrary. It does not have to point anywhere. Also, the so-called prefix (in this case myNameSpace
, the part right after "xmlns:") is arbitrary and just a shorthand way of saying "http://www.myNameSpace.com".
Having said that, a few reservations:
1) Namespaces can help structure your XML data in large files, for example a Microsoft Word document in OpenXML format:
This is an excerpt of the namespaces present in typical OOXML:
xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
So, although there is no inherent reason to have separate namespaces, it helps dividing your XML vocabulary into meaningful categories.
2) There are a few constraints on arbitrarily defining namespaces, as you noticed:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
This identifies elements as belonging to the XSLT namespace. But also, beyond that, it means that elements thus marked are identified by an XSLT processor as not merely being XML code, but an XSLT instruction to be carried out.
The link "http://www.w3.org/1999/XSL/Transform" points to the XSLT specification, where the rules for transforming XML documents are laid down. Now, to answer your question: Declaring the namespace does not help the transformation. Rather, an XSLT processor does not recognize XSLT code if you omit it.
You can define the namespaces "namespaceA" and "namespaceB":
xmlns:nsA="namespaceA"
xmlns:nsB="namespaceB"
but you cannot use them to transform XML, unless you meant to just change the prefix:
xmlns:nsA="http://www.w3.org/1999/XSL/Transform"
which is considered bad practice.