Как применить один из двух типов для одного элемента XSD? - PullRequest
0 голосов
/ 14 июля 2011

У меня есть элемент xml, который называется "PRICE".

Я хочу разрешить в этом поле ЛИБО число ИЛИ одно из значений перечисления {MAX, MIN, UNAV}. Это возможно с XSD?

Этот фрагмент демонстрирует, что я хочу, однако он недействителен:

       <xs:choice>
           <xs:element name="PRICE">
               <xs:simpleType>
                   <xs:restriction base="xs:string">
                       <xs:enumeration value="MAX"/>
                       <xs:enumeration value="MIN"/>
                       <xs:enumeration value="UNAV"/>
                   </xs:restriction>
               </xs:simpleType>
           </xs:element>
           <xs:element name="PRICE">
               <xs:simpleType>
                   <xs:restriction base="xs:float"/>
               </xs:simpleType>
           </xs:element>
       </xs:choice>

Ответы [ 2 ]

5 голосов
/ 14 июля 2011
<xs:element name="Price">
    <xs:simpleType>
        <xs:union>
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="MAX"/>
                    <xs:enumeration value="MIN"/>
                    <xs:enumeration value="UNAV"/>
                </xs:restriction>
            </xs:simpleType>
            <xs:simpleType>
                <xs:restriction base="xs:float"/>
            </xs:simpleType>
        </xs:union>
    </xs:simpleType>
</xs:element>
1 голос
/ 14 июля 2011

Вы можете попробовать что-то вроде этого

     <xs:element name="PRICE">
           <xs:simpleType>
              <xs:restriction base="xs:string">
                 <xs:pattern value="MAX|MIN|UNAV|\d+"/>
              </xs:restriction>
           </xs:simpleType>
       </xs:element>

РЕДАКТИРОВАТЬ:

\d+ будет работать для целых чисел, но для чисел с плавающей запятой, вы можете использовать [-+]?[0-9]*\.?[0-9]*

...