targetNamespace is used in XML Schemas and WSDL to identify and select the namespace into which new elements that your are defining are created in. Once you have defined a new element you still need a namespace declaration to be able to reference the new element or type.
Example:
The targetNamespace is "http://www.Monson-Haefel.com/jwsbook".
Types created:
{http://www.Monson-Haefel.com/jwsbook}USAddress {http://www.Monson-Haefel.com/jwsbook}Book {http://www.Monson-Haefel.com/jwsbook}PurchaseOrder Elements created:
{http://www.Monson-Haefel.com/jwsbook}purchaseOrder {http://www.Monson-Haefel.com/jwsbook}address Note however that there is also a namespace declaration xmlns:mh="http://www.Monson-Haefel.com/jwsbook". So when you reference anything that exists in the "http://www.Monson-Haefel.com/jwsbook" namespace you simply use the prefix "mh" within the scope of that element (in this case schema). This is used in the PurchaseOrder type definition where {http://www.Monson-Haefel.com/jwsbook}USAddress is referenced as mh:USAddress and {http://www.Monson-Haefel.com/jwsbook}Book is referenced as mh:Book.
Ronald Bourret's XML Namespaces FAQ James Clark: XML Namespaces