Using Namespaces in Schemas
Schemas are a collection of rules (also referred to as a grammar or vocabulary) that consist of type definitions (simple and complex), as well as element and attribute declarations. Because XML documents can have several vocabularies to describe different elements and attributes, the use of namespaces and prefixes removes ambiguity for element and attribute declarations. Distinguishing between element and attribute names for each namespace is essential when you use schemas from more than one namespace.
A namespace is usually a string used to differentiate between the namespaces, such as "urn:www.microsoft.com"
, "https://www.microsoft.com"
, "http://www.w3.org/2001/XMLSchema"
, and "uuid:1234567890"
.
XML Schema Preamble
An XML schema consists of a preamble that is followed by declarations.
Example
The following syntax uses the schema element and references three commonly used XML vocabularies using the xmlns attribute.
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema-datatypes"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0">
</schema>
The schema element uses its attributes to identify any external namespaces that are to be used by the schema and all of its child elements.
The first xmlns attribute refers to the standard Worldwide Web Consortium (W3C) XML Schema Recommendation that is used by most XML schemas. The other xmlns attributes include references to the basic XML-Data Reduced (XDR) schema elements such as element, attribute, complexType, group, simpleType, and so forth.
Default namespaces
For an XML Schema definition language (XSD) schema, the schema has a top-level schema element. The schema element definition must include the following namespace.
http://www.w3.org/2001/XMLSchema
It is not necessary to use xs
or xsi
as the namespace identifiers. You can use any prefix that does not conflict with the W3C namespaces that identify the XML schema specifications, however, xs
and xsi
are the recommended conventions.
If you identify the W3C namespace as the default namespace, you do not need to include the prefix in every XML schema declaration and can use unqualified names such as <element>. For example, <xs:element> would be unnecessary if the default namespace is declared as http://www.w3.org/2001/XMLSchema
.
Example
The following syntax instructs the XML parser to use XML Schema, <xs:schema>
, to validate the structure and content of an element.
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msc="http://tempuri.org/myschema">
<xs:element name="Price" type="msc:mydecimal"/>
</xs:schema>
For XML-Data Reduced (XDR) schemas, the Schema element must include the following namespace. Note that Schema is initial capitalized for XDR schemas.
urn:schemas-microsoft-com:xml-data
To use XDR schema data types, the Schema element must include the following namespaces.
urn:schemas-microsoft-com:xml-data
urn:schemas-microsoft-com:datatypes
Example
The following syntax instructs the XML parser to use XDR schema, x-schema
, to validate the structure and content of an element.
<BOOK xmlns="x-schema:https://www.microsoft.com/BookInfo.xml">
<TITLE>Creepy Crawlies</TITLE>
<PRICE currency="US Dollar">22.95</PRICE>
</BOOK>
The x-schema
identifier at the start of the namespace URI instructs the XML parser to treat the reference as a valid reference to an XDR schema; it retrieves the schema from the URL and validates against it.
Specifying the Version
The version attribute is informational and represents the version number of the schema. You can use the version to ensure that the XML application is using a specific version of the schema to validate XML documents. You can use multiple schema versions: one for development, another for testing, another for production, and others for individual international markets or regional markets.
Example
The following syntax instructs the XML parser to use version "1.0" of the myschema
namespace to validate the structure and content of an element that uses the myschema
namespace.
<xs:schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema-datatypes"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:myschema="http://myschema.com/schema1"
version="1.0">
</xs:schema>