2011-07-14 2 views
0

私は "PRICE"というxml要素を持っています。単一のXSD要素に2つのタイプのうちの1つを適用する方法はありますか?

このフィールドには、数値または1つの列挙値{MAX、MIN、UNAV}のいずれかを許可します。これはXSDで可能ですか?

このスニペットは、私が欲しいものを示している、しかし、それは無効である:

\d+は、整数のためではなく、フローティングのために動作します:

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

答えて

5
<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> 
+0

これは非単純型の場合に可能ですか? – Holloway

1

あなたはこの

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

EDITような何かを試みることができますあなたが使うことができる[-+]?[0-9]*\.?[0-9]*

+0

はい、素晴らしいアイデア - "MAX | MIN | UNAV | [+ \ - ]?(\ d {1,6} | \ d {1,6} \。\ d {0、 3} | \。\ d {1,3}) " –

+0

これはうまくいっていますが、これは' xs:float'の意味を失います。 –

関連する問題