XSD required strings
setting up an XML Schema(XSD) document is pretty simple. here's an example that has all required fields:
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="form"> <xs:complexType> <xs:all> <xs:element name="firstname" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="lastname" type="xs:string" minOccurs="1" maxOccurs="1"/> </xs:all> </xs:complexType> </xs:element> </xs:schema>
you might think the following XML document would fail validation, but it does not:
<form> <firstname></firstname> <lastname></lastname> </form>
that's because an empty element will be interpreted as an empty string. it's a string!
so you need a bit more in the schema to make it all work, you need to set up a required length restriction on the string elements. i do it like this:
<?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="form"> <xs:complexType> <xs:all> <xs:element name="firstname" type="requiredStringType" minOccurs="1" maxOccurs="1"/> <xs:element name="lastname" type="requiredStringType" minOccurs="1" maxOccurs="1"/> </xs:all> </xs:complexType> </xs:element> <!-- required string --> <xs:simpleType name="requiredStringType"> <xs:restriction base="xs:string"> <xs:minLength value="1"/> </xs:restriction> </xs:simpleType> </xs:schema>
now the previous XML document will fail with the following message:
The 'firstname' element is invalid - The value '' is invalid according to its datatype 'requiredStringType' - The actual length is less than the MinLength value.
ain't XSD grand?