An XML Schema describes the structure of an XML document, just like a DTD.
An XML document with correct syntax is called “Well Formed”.
An XML document validated against an XML Schema is both “Well Formed” and “Valid”.
XML Schema
XML Schema is an XML-based alternative to DTD:<xs:element name=”note”>
<xs:complexType>
<xs:sequence>
<xs:element name=”to” type=”xs:string”/>
<xs:element name=”from” type=”xs:string”/>
<xs:element name=”heading” type=”xs:string”/>
<xs:element name=”body” type=”xs:string”/>
</xs:sequence>
</xs:complexType>
</xs:element>
The Schema above is interpreted like this:
- <xs:element name=”note”> defines the element called “note”
- <xs:complexType> the “note” element is a complex type
- <xs:sequence> the complex type is a sequence of elements
- <xs:element name=”to” type=”xs:string”> the element “to” is of type string (text)
- <xs:element name=”from” type=”xs:string”> the element “from” is of type string
- <xs:element name=”heading” type=”xs:string”> the element “heading” is of type string
- <xs:element name=”body” type=”xs:string”> the element “body” is of type string
XML Schemas are More Powerful than DTD
- XML Schemas are written in XML
- XML Schemas are extensible to additions
- XML Schemas support data types
- XML Schemas support namespaces
Why Use an XML Schema?
With XML Schema, your XML files can carry a description of its own format.
With XML Schema, independent groups of people can agree on a standard for interchanging data.
With XML Schema, you can verify data.
XML Schemas Support Data Types
One of the greatest strengths of XML Schemas is the support for data types:
- It is easier to describe document content
- It is easier to define restrictions on data
- It is easier to validate the correctness of data
- It is easier to convert data between different data types
XML Schemas use XML Syntax
Another great strength about XML Schemas is that they are written in XML:
- You don’t have to learn a new language
- You can use your XML editor to edit your Schema files
- You can use your XML parser to parse your Schema files
- You can manipulate your Schemas with the XML DOM
- You can transform your Schemas with XSLT
XML documents can have a reference to a DTD or to an XML Schema.
A Simple XML Document
Look at this simple XML document called “note.xml”:<?xml version=”1.0″?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don’t forget me this weekend!</body>
</note>
A DTD File
The following example is a DTD file called “note.dtd” that defines the elements of the XML document above (“note.xml”):<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
The first line defines the note element to have four child elements: “to, from, heading, body”.
Line 2-5 defines the to, from, heading, body elements to be of type “#PCDATA”.
An XML Schema
The following example is an XML Schema file called “note.xsd” that defines the elements of the XML document above (“note.xml”):<?xml version=”1.0″?>
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”
targetNamespace=”https://www.w3schools.com”
xmlns=”https://www.w3schools.com”
elementFormDefault=”qualified”>
<xs:element name=”note”>
<xs:complexType>
<xs:sequence>
<xs:element name=”to” type=”xs:string”/>
<xs:element name=”from” type=”xs:string”/>
<xs:element name=”heading” type=”xs:string”/>
<xs:element name=”body” type=”xs:string”/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
The note element is a complex type because it contains other elements. The other elements (to, from, heading, body) are simple types because they do not contain other elements. You will learn more about simple and complex types in the following chapters.
Defining elements
XML Schemas define the elements of your XML files.
A simple element is an XML element that contains only text. It cannot contain any other elements or attributes.
What is a Simple Element?
A simple element is an XML element that can contain only text. It cannot contain any other elements or attributes.
However, the “only text” restriction is quite misleading. The text can be of many different types. It can be one of the types included in the XML Schema definition (boolean, string, date, etc.), or it can be a custom type that you can define yourself.
You can also add restrictions (facets) to a data type in order to limit its content, or you can require the data to match a specific pattern.
Defining a Simple Element
The syntax for defining a simple element is:<xs:element name=”xxx” type=”yyy”/>
where xxx is the name of the element and yyy is the data type of the element.
XML Schema has a lot of built-in data types. The most common types are:
- xs:string
- xs:decimal
- xs:integer
- xs:boolean
- xs:date
- xs:time
Example
Here are some XML elements:<lastname>Refsnes</lastname>
<age>36</age>
<dateborn>1970-03-27</dateborn>
And here are the corresponding simple element definitions:<xs:element name=”lastname” type=”xs:string”/>
<xs:element name=”age” type=”xs:integer”/>
<xs:element name=”dateborn” type=”xs:date”/>
Default and Fixed Values for Simple Elements
Simple elements may have a default value OR a fixed value specified.
A default value is automatically assigned to the element when no other value is specified.
In the following example the default value is “red”:<xs:element name=”color” type=”xs:string” default=”red”/>
A fixed value is also automatically assigned to the element, and you cannot specify another value.
In the following example the fixed value is “red”:<xs:element name=”color” type=”xs:string” fixed=”red”/>