単純な要素タイプを整数として設定できるようにする必要がありますが、それも空にすることができます。この例は、空のフィールドと空白のフィールドが整数でない場合にエラーを送信します。どうすればこれを回避できますか?
<xsd:element name="weight" type="xsd:integer"/>
あなたがしなければならないことは、次の例のように、同じ要素に制限を割り当て、それらを結合することです。
<xs:element name="job_code">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base='xs:string'>
<xs:length value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base='xs:integer' />
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:element>
この制限を使用して、XML検証に整数値を許可し、要素が空の場合は要素を許可するように指示します。
SimpleTypeを作成することでこれを実現できます
<xs:simpleType name="NullOrInteger">
<xs:restriction base="xs:string">
<xs:pattern value="\d*|\s{0}" />
</xs:restriction>
</xs:simpleType>
NullOrIntegerを整数値またはnull値の制限が必要なタイプとして追加します。
例えば:
<xs:element name="null_or_int" type="NullOrInteger" />
「nillable」属性をtrueに設定する必要があります。
<xsd:element name="weight" type="xsd:integer" nillable="true"/>
XML Schema Primer を参照してください。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<product>
<weight xsi:nil="true"/>
</product>
</products>
上記を試して、うまくいくはずです。 xsi:nil属性の追加を忘れた可能性があります。また、weight要素に子としての性格がないことを確認してください(空白はまだ受け入れられません)。整数の代わりにいくつかの文字を渡す必要がある場合は、両方を可能にする共用体タイプを定義する必要があります。
Xsdスキーマを使用し、どのJAXBクラスが生成されるかに基づいて、属性をnull可能な整数にする方法を検索することで、この答えにたどり着きました。ここには答えが見つからなかったので、答えを見つけたので、共有することにしました。次のxsd部分は、nullにできないタイプのint(int)を生成します。
<xsd:attribute name="length" type="xsd:int" use="required"/>
Javaコードでこれは次のようになります:
@XmlAttribute(name = "length", required = true)
protected int length;
必要な使用をやめると、次のようになります。
@XmlAttribute(name = "length")
protected Integer length;
これが誰かを助けることを願っています。そして、この回答が実際の質問に関連していない場合でも、私が行ったのと同じ検索を実行してここにたどり着く人にとっては、ここにいると便利です。