In this post, I'll try to explain how the XML Schema 1.1 <assertion> facet refines the XML Schema <enumeration> facet in useful ways, and also helps us build a useful domain vocabulary written in the XML Schema language.
Consider the following XML Schema 1.1 document:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="day" type="Day"/>
<xs:element name="workday" type="WorkDay"/>
<xs:element name="holiday" type="Holiday"/>
<xs:simpleType name="WorkDay">
<xs:restriction base="Day">
<xs:assertion test="$value != 'saturday' and $value != 'sunday'"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Holiday">
<xs:restriction base="Day">
<xs:assertion test="$value = 'saturday' or $value = 'sunday'"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Day">
<xs:restriction base="xs:string">
<xs:enumeration value="monday"/>
<xs:enumeration value="tuesday"/>
<xs:enumeration value="wednesday"/>
<xs:enumeration value="thursday"/>
<xs:enumeration value="friday"/>
<xs:enumeration value="saturday"/>
<xs:enumeration value="sunday"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
This is a very simple XSD document, and the XML documents validated by this XSD document will also be very simple.
The following is one invalid document for the given schema,
<holiday>wednesday</holiday>
To my opinion, this example has illustrated how the <assertion> facet refines the <enumeration> facet during simple type derivation, and also helps us clearly build a fine domain vocabulary. The types "WorkDay" and "Holiday" are verbally linked to the type "Day" in the XML Schema document as in this example.
No comments:
Post a Comment