Having both an attribute and a restriction on an element in xml schema

xsd

Solution

You cannot merge both a restriction and an extension into one block of XSD. The solution that you have with the "ReviewDate" simple type is the best solution I know of.

Problem

I'm trying to write a xml schema that will validate this piece of xml: ``` <date isodate="2007-03-14">14 march 2007</date> ``` The attribute isodate should have it's type set to xs:date and the content should be max 50 characters long. I wonder if it's possible to write the xml schema definition in one block, something like this maybe: ``` <xs:element name="date" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:simpleContent> <xs:restriction base="xs:string"> <xs:minLength value="0"/> <xs:maxLength value="50"/> </xs:restriction> <xs:attribute name="isodate" type="xs:date" use="required"/> </xs:simpleContent> </xs:complexType> </xs:element> ``` The code above doesn't work, and I can't really figure out why. Only workaround I have found is to break out the restriction part into a separate type, and link that like this: ``` <xs:simpleType name="reviewDate"> <xs:restriction base="xs:string"> <xs:minLength value="0"/> <xs:maxLength value="50"/> </xs:restriction> </xs:simpleType> <xs:element name="date" minOccurs="0" maxOccurs="1"> <xs:complexType> <xs:simpleContent> <xs:extension base="reviewDate"> <xs:attribute name="isodate" type="xs:date" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> ``` The question I have is how to write the definition in one block so that the schema is a bit more readable, and doesn't reference types in other parts of the schema.

Original source

Related problems