Target Namespaces
Associating a schema with a particular XML namespace is
extremely simple: add a targetNamespace
attribute to the root xs:schema
element, like so:
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema" targetNamespace="http://namespaces.oreilly.com/xmlnut/address">
Tip
It is important to remember that many XML 1.0 documents are
not associated with namespaces at all. To validate these
documents, it is necessary to use a schema that doesn’t have a
targetNamespace
attribute. When
developing schemas that are not associated with a target
namespace, you should always explicitly qualify schema elements
(like xs:element
) to keep them
from being confused with global declarations for your
application.
However, making that simple change impacts numerous other
parts of the example application. Trying to validate the addressdoc.xml document as it stands
(with the xsi:noNamespaceSchemaLocation
attribute) causes the Xerces schema processor to
report this validity error:
General Schema Error: Schema in address-schema.xsd has a different target namespace from the one specified in the instance document :.
To rectify this, it is necessary to change the instance
document to reference the new, namespace-enabled schema properly.
This is done using the xsi:schemaLocation
attribute, like so:
<fullName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://namespaces.oreilly.com/xmlnut/address address-schema.xsd" language="en">Scott Means</fullName>
Notice that ...
Get XML in a Nutshell, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.