its class names; a database is a namespace for the names of its tables; and a data- base table is a namespace for the names of its fields. The ability to partition the names in your program or database into different namespaces is essential for preventing name conflicts. The initial XML 1.0 specification has no provisions for partitioning element names within a document into different namespaces. This could potentially result in name conflicts when two different vocabularies are merged in a single document. The danger is real for XML languagessuch as XSLT, SVG, XML Schema, or JSPthat are designed for use with a great many other languages. It would be reckless to leave the vocabularies of such languages unprotected. XML Namespaces (1998) was primarily developed to protect the vocabularies of such widely used XML languages. Namespaces and Prefixes A common way to create a globally unique name is by forming a pair that con- sists of a namespace prefix and a local name. The namespace prefix uniquely identifies the namespace, the local name must be unique within that namespace, and the combination of the two creates a globally unique name. This is how Java classes and packages operate: the name of a package is globally unique (or at least has a good chance of being so), class names are unique within a package, and a fully qualified class name consists of the package name as a prefix, fol- lowed by a period and the class name. Reversed URLs are often used as package names: a good deal of Suns software is in the com.sun package or its subpack- ages, for instance: com.sun.xml.parser.Resolver res = new com.sun.xml.parser.Resolver(); Here, Resolver is a local name, com.sun.xml.parser is both the name of the package and a unique namespace prefix, and the combination of the two is a fully qualified, globally unique name of Suns Resolver class. The designers of XML Namespaces had a well-known source of globally unique names ready at hand: the URL, or its generalization, the URI. It was a nat- ural decision to make it a source of unique namespace prefixes, so that a unique element name would consist of a URI prefix to identify the namespace and a local name that is unique within that namespace. Conceptually, if our company URL is, and we want to put our Address element in a protected namespace, we would say that its fully qualified globally unique name is something like {}Address. The problem is that this name, as written, is not a legal XML name, and its also extremely long. The solution of XML Namespaces is to use a two-step proce- dure for establishing a namespace. In the first step, a unique namespace URI is 53 Well-Formed Documents and Namespaces