2009-08-26 5 views
23

Je suis en train d'écrire un schéma XML qui validera ce morceau de xml:Ayant à la fois un attribut et une restriction sur un élément dans le schéma xml

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

L'attribut ISODate doit avoir son type réglé sur xs : date et le contenu doit comporter au maximum 50 caractères.

Je me demande s'il est possible d'écrire la définition du schéma XML dans un bloc, quelque chose comme ça peut-être:

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

Le code ne fonctionne pas, et je ne peux pas vraiment comprendre pourquoi. Solution de contournement que j'ai trouvé est de sortir la partie de restriction dans un type distinct, et le lien qui comme ceci:

<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 question que j'ai est de savoir comment écrire la définition dans un bloc de telle sorte que le schéma est un peu plus lisible, et ne référence pas les types dans d'autres parties du schéma.

+0

@Alexander: afin de formater correctement vos sections XML, mettez en évidence le XML et cliquez sur le bouton "code" (101 010) dans la barre d'outils. Cela vous permet d'obtenir de bons résultats - l'utilisation du backtick ne vous aide que pour un seul mot ou une phrase courte - ne couvre pas bien plusieurs lignes. –

Répondre

15

Vous ne pouvez pas fusionner à la fois une restriction et une extension dans un bloc de XSD. La solution que vous avez avec le type simple "ReviewDate" est la meilleure solution que je connaisse.

Marc

Questions connexes