Search code examples
xmlxsdschemarestriction

Apply restriction to time attribute in XML Schema


I want to apply a specific restriction to an XML Schema (on which I have very little experience).

I have an attribute of xsd:time type:

<xsd:attribute name="hour" type="xsd:time" use="required"/>

What I want to to is apply a restriction so that the XML will be valid only on half-hour time intervals. For example, 10:00, 12:30, 15:30, 20:00 would be valid values for the hour attribute but 10:45, 11:12, 15:34 etc would not.

How can I achieve this? My search did not give out something useful.

Thank you in advance.


Solution

  • You could define your time in this way.

    <xsd:attribute name="hour" type="Time" use="required"/>
    
    <xsd:simpleType name="Time">
        <xsd:restriction base="xsd:time">
            <xsd:enumeration value="00:00:00"/>
            <xsd:enumeration value="00:30:00"/>
            <xsd:enumeration value="01:00:00"/>
            <xsd:enumeration value="01:30:00"/>
            <xsd:enumeration value="02:00:00"/>
            <xsd:enumeration value="02:30:00"/>
            <xsd:enumeration value="03:00:00"/>
            <xsd:enumeration value="03:30:00"/>
            <!-- etc etc -->
        </xsd:restriction>
    </xsd:simpleType>
    

    or

    <xsd:simpleType name="Time">
        <xsd:restriction base="xsd:time">
            <xsd:pattern value="((0[0-9]|1[0-9]|2[0-3]):[0|3][0]:[0][0])"/>
        </xsd:restriction>
    </xsd:simpleType>