XML
Schemas are much more powerful than DTDs.
XML Schemas Support Data
Types
One
of the greatest strength of XML Schemas is the support for data types.
With
support for data types:
- It
is easier to describe allowable document content
- It
is easier to validate the correctness of data
- It
is easier to work with data from a database
- It
is easier to define data facets (restrictions on data)
- It
is easier to define data patterns (data formats)
- 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.
Some
benefits of that XML Schemas 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 Schema with the XML DOM
- You
can transform your Schema with XSLT
XML Schemas Secure Data
Communication
When
sending data from a sender to a receiver, it is essential that both parts have
the same "expectations" about the content.
With
XML Schemas, the sender can describe the data in a way that the receiver will
understand.
A
date like: "03-11-2004" will, in some countries, be interpreted as
3.November and in other countries as 11.March.
However,
an XML element with a data type like this:
<date
type="date">2004-03-11</date>
ensures
a mutual understanding of the content, because the XML data type
"date" requires the format "YYYY-MM-DD".
XML Schemas are
Extensible
XML
Schemas are extensible, because they are written in XML.
With
an extensible Schema definition you can:
- Reuse
your Schema in other Schemas
- Create
your own data types derived from the standard types
- Reference
multiple schemas in the same document
Well-Formed is not
Enough
A
well-formed XML document is a document that conforms to the XML syntax rules,
like:
- it
must begin with the XML declaration
- it
must have one unique root element
- start-tags
must have matching end-tags
- elements
are case sensitive
- all
elements must be closed
- all
elements must be properly nested
- all
attribute values must be quoted
- entities
must be used for special characters
Even
if documents are well-formed they can still contain errors, and those errors
can have serious consequences.
Think
of the following situation: you order 5 gross of laser printers, instead of 5
laser printers. With XML Schemas, most of these errors can be caught by your
validating software.
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="http://www.w3schools.com"
xmlns="http://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.
A Reference to a DTD
This
XML document has a reference to a DTD:
<?xml
version="1.0"?>
<!DOCTYPE note SYSTEM
"http://www.w3schools.com/dtd/note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
A Reference to an XML
Schema
This
XML document has a reference to an XML Schema:
<?xml
version="1.0"?>
<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>