2016-12-01 6 views
1

私は経験豊富なプログラマーですが、最近ではxmlスキーマを使用するアプリケーションを維持管理する仕事をしました。彼らは経度を受け入れる項目に対していくつかのバリデーションを追加したい。彼らは空白を受け入れ続けることを望み、また0、0.0000000を入力するか、あるいは別の値が入力された場合、少なくともそれが米国にあることを確認したい。 (-125と-67の間)XMLスキーマ連合「要素」が要素エラーに有効でない

現在のxmlスキーマは、任意の値を許可します。

<xs:element name="Location"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="LocLongitude"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

にこの情報を送信し、複数のベンダがありますここで、彼らが送るかもしれないものの例です。

<Location> 
    <LocLongitude xsi:type="xsd:string"></LocLongitude> 
</Location> 

は今、ユーザーが、私はカプセル化する労働組合を使用できることを発見したいものを見て複数の小切手。これは私が今使っているものです。

<xs:element name="Location"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="LocLongitude" nillable="true"> 
     <xs:simpleType> 
      <xs:union> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
       <xs:enumeration value=""/> 
       <xs:enumeration value="0"/> 
       </xs:restriction> 
      </xs:simpleType> 
      <xs:simpleType> 
       <xs:restriction base="xs:double"> 
       <xs:minInclusive value="0.00000000"/> 
       <xs:maxInclusive value="0.00000000"/> 
       </xs:restriction> 
      </xs:simpleType> 
      <xs:simpleType> 
       <xs:restriction base="xs:double"> 
       <xs:minInclusive value="-125"/> 
       <xs:maxInclusive value="-67"/> 
       </xs:restriction> 
      </xs:simpleType> 
      </xs:union> 
     </xs:simpleType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

私が使用している場合はそれを正しく検証します。私は、現在のベンダーが(下記参照)を使用しているものを使用している場合

<Location> 
    <LocLongitude /> 
</Location> 

は今:

<Location> 
    <LocLongitude xsi:type="xsd:string"></LocLongitude> 
</Location> 

私たちは、エラーが表示されます。

THE XSI:TYPE ATTRIBUTE VALUE '' IS NOT VALID FOR THE ELEMENT 'LOCLONGITUDE', EITHER BECAUSE IT IS NOT A TYPE VALIDLY DERIVED FROM THE TYPE IN THE SCHEMA, OR BECAUSE IT HAS XSI:TYPE DERIVATION BLOCKED.

私の質問は、ベンダーにxsi:type = "xsd:string"を含めることを許可しながら、これを動作させることができますか?

答えて

0

いいえ、xs:typeのために選択されたタイプは、関連する要素によって提供されるタイプから妥当に派生しなければなりません。一方では、値のスペースを制限する型を定義することはできませんし、他方では、より広範なxs:type宣言をサポートすることはできません。

も参照してください。How to restrict the value of an XML element using xsi:type in XSD?

+0

ありがとう、それは私が考えたものですが、確認したいと思います。 – JNord

関連する問題