XML Schema is an XML-based alternative to DTD.
An XML Schema:
- XML Schemas are extensible to future additions
- XML Schemas are richer and more powerful than DTDs
- XML Schemas are written in XML
- XML Schemas support data types
- XML Schemas support namespaces
XML:
DTD:
XMLSchema:
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.
Reference to a DTD:
Reference to an XML Schema:
XSD - <schema> element
The <schema> element is the root element of every XML Schema.Simple elements
A simple element is an XML element that can contain only text. It cannot contain any other elements or attributes.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.
Example:
XML
XSD
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
default
<xs:element name="color" type="xs:string" default="red"/>
fixed
You cannot specify another value.
<xs:element name="color" type="xs:string" fixed="red"/>
XSD Attributes
- All attributes are declared as simple types.
- Simple elements cannot have attributes.
Example:
<xs:attribute name="lang" type="xs:string"/>
default
<xs:attribute name="lang" type="xs:string" default="EN"/>
fixed
<xs:attribute name="lang" type="xs:string" fixed="EN"/>
optional
<xs:attribute name="lang" type="xs:string" use="required"/>
XSD Restrictions / Facets
Restrictions are used to define acceptable values for XML elements or attributes.Restrictions
Constraint | Description |
enumeration | Defines a list of acceptable values |
fractionDigits | Specifies the maximum number of decimal places allowed. Must be equal to or greater than zero |
length | Specifies the exact number of characters or list items allowed. Must be equal to or greater than zero |
maxExclusive | Specifies the upper bounds for numeric values (the value must be less than this value) |
maxInclusive | Specifies the upper bounds for numeric values (the value must be less than or equal to this value) |
maxLength | Specifies the maximum number of characters or list items allowed. Must be equal to or greater than zero |
minExclusive | Specifies the lower bounds for numeric values (the value must be greater than this value) |
minInclusive | Specifies the lower bounds for numeric values (the value must be greater than or equal to this value) |
minLength | Specifies the minimum number of characters or list items allowed. Must be equal to or greater than zero |
pattern | Defines the exact sequence of characters that are acceptable |
totalDigits | Specifies the exact number of digits allowed. Must be greater than zero |
whiteSpace | Specifies how white space (line feeds, tabs, spaces, and carriage returns) is handled |
Examples:
Restrictions on Values
Restrictions on a Set of Values
Restriction as pattern
Restrictions on whitespace characters
The whiteSpace constraint is set to "replace", which means that the XML processor WILL REPLACE all white space characters (line feeds, tabs, spaces, and carriage returns) with spaces:
Complex element
- empty elements
- elements that contain only other elements
- elements that contain only text
- elements that contain both other elements and text
A complex XML element, "product", which is empty:
<product pid="1345"/>
A complex XML element, "employee", which contains only other elements:
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
A complex XML element, "food", which contains only text:
<food type="dessert">Ice cream</food>
A complex XML element, "description", which contains both elements and text:
<description>
It happened on <date lang="norwegian">03.03.99</date> ....
</description>
Define a Complex element
The "employee" element can have a type attribute that refers to the name of the complex type to use:
If you use the method described above, several elements can refer to the same complex type, like this:
You can also base a complex element on an existing complex element and add some elements, like this:
Complex Empty Elements
An empty XML element:
<product prodid="1345" />
To define a type with no content, we must define a type that allows elements in its content, but we do not actually declare any elements, like this:
However, it is possible to declare the "product" element more compactly.
Complex Elements Only
An XML element, "person", that contains only other elements:
<person>
<firstname>John</firstname>
<lastname>Smith</lastname>
</person>
You can give the complexType element a name, and let the "person" element have a type attribute that refers to the name of the complexType (if you use this method, several elements can refer to the same complex type):
Notice the <xs:sequence> tag. It means that the elements defined ("firstname" and "lastname") must appear in that order inside a "person" element.
Text-Only Elements
Here is an example of an XML element, "shoesize", that contains text-only:
<shoesize country="france">35</shoesize>
This type contains only simple content (text and attributes), therefore we add a simpleContent element around the content. When using simple content, you must define an extension OR a restriction within the simpleContent element, like this:
Mixed Content
A mixed complex type element can contain attributes, elements, and text.xml:
declaration:
Note: To enable character data to appear between the child-elements of "letter", the mixed attribute must be set to "true". The <xs:sequence> tag means that the elements defined (name, orderid and shipdate) must appear in that order inside a "letter" element.
Indicators
Order indicators:- All
- Choice
- Sequence
Occurrence indicators:
- maxOccurs
- minOccurs
Group indicators:
- Group name
- attributeGroup name
All indicator
The <all> indicator specifies that the child elements can appear in any order, and that each child element must occur only once:
Choice indicator
The <choice> indicator specifies that either one child element or another can occur:
Sequence indicator
The <sequence> indicator specifies that the child elements must appear in a specific order:
Occurrence indicators
Group indicators
Group indicators are used to define related sets of elements.
- Element groups
- Attribute groups
Declare Element groups:
Declare Attribute groups:
The <any> element
The <any> element enables us to extend the XML document with elements not specified by the schema.The following example is a fragment from an XML schema called "family.xsd". It shows a declaration for the "person" element. By using the <any> element we can extend (after <lastname>) the content of "person" with any element:
Schema file called “children.xsd”
The XML file below (called "Myfamily.xml"), uses components from two different schemas; "family.xsd" and "children.xsd":
The <anyAttribute> element
The <anyAttribute> element enables us to extend the XML document with attributes not specified by the schema.The following example is a fragment from an XML schema called "family.xsd". It shows a declaration for the "person" element. By using the <anyAttribute> element we can add any number of attributes to the "person" element:
Schema file, called "attribute.xsd"
The XML file below (called "Myfamily.xml"), uses components from two different schemas; "family.xsd" and "attribute.xsd"
Element substitution
There are way define alias for element called substitutionGroup.
now you can use:
<kunde>
<navn>tom</navn>
</kunde>
Basic data types
- String
- Date
- Numeric
- Misc
String types
String data type
The XML processor will not modify the value if you use the string data type.
<xs:element name="customer" type="xs:string"/>
NormalizedString data type
The XML processor will remove line feeds, carriage returns, and tab characters.
<xs:element name="customer" type="xs:normalizedString"/>
Token data type
The XML processor will remove line feeds, carriage returns, tabs, leading and trailing spaces, and multiple spaces.
<xs:element name="customer" type="xs:token"/>
Note: There are more String types. The other derived from String types.
Date and time types
Date type
The date is specified in the following form "YYYY-MM-DD".
<xs:element name="start" type="xs:date"/>
example:
<start>2002-09-24</start>
Time type
The time is specified in the following form "hh:mm:ss".
<xs:element name="start" type="xs:time"/>
example:
<start>09:00:00</start>
DateTime type
The dateTime is specified in the following form "YYYY-MM-DDThh:mm:ss". All components are required!
<xs:element name="startdate" type="xs:dateTime"/>
example:
<startdate>2002-05-30T09:00:00</startdate>
Duration type
The time interval is specified in the following form "PnYnMnDTnHnMnS".
- P indicates the period (required)
- nY indicates the number of years
- nM indicates the number of months
- nD indicates the number of days
- T indicates the start of a time section (required if you are going to specify hours, minutes, or seconds)
- nH indicates the number of hours
- nM indicates the number of minutes
- nS indicates the number of seconds
example:
<period>P5Y</period> <!--five years ->
Note: There are more Date and time types. The other derived from Date and time types.
Numeric data types
Decimal data type
The decimal data type is used to specify a numeric value.
<xs:element name="prize" type="xs:decimal"/>
example:
<prize>999.50</prize>
Integer data type
The integer data type is used to specify a numeric value without a fractional component.
<xs:element name="prize" type="xs:integer"/>
Note: There are more numeric types. The other derived from Decimal data type. (long, short, unsigned,...)
Miscellaneous data type
Boolean data type
Legal values for boolean are true, false, 1 (which indicates true), and 0 (which indicates false).
<xs:attribute name="disabled" type="xs:boolean"/>
example:
<prize disabled="true">999</prize>
Binary data type
We have two binary data types:
- base64Binary (Base64-encoded binary data)
- hexBinary (hexadecimal-encoded binary data)
AnyURI data type
The anyURI data type is used to specify a URI.
<xs:attribute name="src" type="xs:anyURI"/>
example:
<pic src="http://www.w3schools.com/images/smiley.gif" />
Great reading your bllog
ReplyDelete