tags:

views:

165

answers:

1

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.

A: 

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.

Marc

marc_s