あるサーバーで空の値が検証に失敗するという問題が少しありますが、他のすべてのサーバーでは機能します。この問題は新しい PHP バージョン (5.3.8) で発生し、少し古いバージョン (5.2.4) で動作します。
失敗するいくつかの孤立した要素を次に示します。
XML 入力:
<clbburnfuelbias></clbburnfuelbias>
<clbburntimebias></clbburntimebias>
XSD 検証:
<xs:element name="clbburnfuelbias" type="data-fuelbias"/>
<xs:element name="clbburntimebias" type="data-timebias"/>
<xs:simpleType name="data-fuelbias">
<xs:restriction base="xs:integer">
<xs:minInclusive value="-9900"/>
<xs:maxInclusive value="9900"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="data-timebias">
<xs:restriction base="xs:integer">
<xs:minInclusive value="-59"/>
<xs:maxInclusive value="59"/>
</xs:restriction>
</xs:simpleType>
エラー:
エラー 1824: 要素 'clbburnfuelbias': 値は、アトミック タイプ 'data-fuelbias' の有効な値ではありません。エラー 1824: 要素 'clbburntimebias': 値は、アトミック タイプ
'data-timebias' の有効な値ではありません。
5.2.4 を実行している別のサーバーでまったく同じ入力ファイルと XSD ファイルを使用しても、エラーは発生せず、xml は有効です。
要素に minOccurs="0" を追加しようとしましたが、 nullable="true" も指定しようとしましたが、それでもエラーが発生します。
アップデート:
私のサーバーでは、PHP 5.2.4 を使用すると null 値が無視され、5.3.8 を使用すると拒否されるようです。提案された私が使用した回避策は、2 つの定義の和集合を使用することです。1 つは整数型用で、もう 1 つは null 値用です。
XSD:
<xs:element name="clbburnfuelbias" minOccurs="0">
<xs:simpleType>
<xs:union memberTypes="data-fuelbias null-string"/>
</xs:simpleType>
</xs:element>
<xs:simpleType name="data-fuelbias">
<xs:restriction base="xs:integer">
<xs:minInclusive value="-9900"/>
<xs:maxInclusive value="9900"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="null-string">
<xs:restriction base="xs:string">
<xs:length value="0"/>
</xs:restriction>
</xs:simpleType>