validator - xsd viewer




Avere sia un attributo sia una restrizione su un elemento nello schema xml (2)

Sto provando a scrivere uno schema xml che convalida questo pezzo di xml:

<date isodate="2007-03-14">14 march 2007</date>

L'attributo isodate dovrebbe avere il tipo impostato su xs: date e il contenuto deve essere lungo al massimo 50 caratteri.

Mi chiedo se è possibile scrivere la definizione dello schema xml in un blocco, qualcosa di simile forse:

<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>

Il codice sopra non funziona, e non riesco davvero a capire perché. Solo una soluzione alternativa che ho trovato è di scomporre la parte di restrizione in un tipo distinto e collegarla in questo modo:

<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>

La domanda che ho è come scrivere la definizione in un blocco in modo che lo schema sia un po 'più leggibile e non faccia riferimento a tipi in altre parti dello schema.


Non è possibile unire sia una restrizione che un'estensione in un blocco di XSD. La soluzione che hai con il tipo "ReviewDate" è la soluzione migliore che io conosca.

Marc