2010-04-21 1 views
0

Je me demande si je me manque quelque chose d'évident.Est-il possible d'alterner entre deux types dans un schéma XML

J'ai une liste de numéros, y compris éventuellement des plages (penser à l'option de la page d'impression d'une boîte de dialogue d'impression).

Idéalement, je voudrais avoir le look de sortie XML final comme celui-ci, avec la page et PageRange dans un ordre.

<pages> 
<page> 1</page> 
    <pageRange><start>3</start><end>6</end></pageRange> 
    <page> 34</page> 
</pages> 

Que devrais-je mettre dans un schéma pour permettre cela?

D'après ce que j'ai vu: séquence avec plusieurs pages et page Plage autorisée ne permet pas l'alternance. Le choix ne permet que l'un ou l'autre.

J'ai essayé de jouer avec tout, mais je ne recevais pas à valider correctement.

Ma solution à court terme est d'avoir une séquence de gammes, et pour forcer les numéros individuels dans la gamme, mais il semble potentiellement lourd. Alors, je manque quelque chose?

Répondre

1

essayer ...

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="pages"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:choice maxOccurs="unbounded"> 
      <xs:element name="page" type="xs:unsignedInt" /> 
      <xs:element name="pageRange"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="start" type="xs:unsignedInt" /> 
       <xs:element name="end" type="xs:unsignedInt" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema>
+0

savait que c'était simple. J'avais essayé une séquence de choix, et pour une raison quelconque je n'avais pas pensé à les changer à ce moment-là. Je l'ai juste implémenté et j'ai découvert que vous l'aviez suggéré aussi. – lief79

Questions connexes