私は JAXB を使用して、作成中のアプリケーションの XML を Java にバインドしています。amountとmaxAmountという 2 つのamount要素を含むmeasureという要素があり、これを使用して下限値と上限値をモデル化します。amountとmaxAmountはそれ以外は同一であり、Java に非整列化されたときに同じクラスで実装したいと考えています。
以下は、私が JAXB にフィードする XML スキーマからの抜粋です。
<xsd:attributeGroup name="AmountAttributes">
<xsd:attribute name="quantity" type="xsd:decimal"/>
<xsd:attribute name="numerator" type="xsd:nonNegativeInteger"/>
<xsd:attribute name="denominator" type="xsd:positiveInteger"/>
</xsd:attributeGroup>
<xsd:element name="measure">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" name="amount">
<xsd:complexType>
<xsd:attributeGroup ref="mpr:AmountAttributes"/>
</xsd:complexType>
</xsd:element>
<xsd:element minOccurs="0" name="maxAmount">
<xsd:complexType>
<xsd:attributeGroup ref="mpr:AmountAttributes"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
JAXB はこれから、以下のより精巧なバージョンを作成します。
public class Measure {
protected Measure.Amount amount;
protected Measure.MaxAmount maxAmount;
public static class Measure.Amount {}
public static class Measure.MaxAmount {}
}
Measure.AmountとMeasure.MaxAmountは、名前を除いて同じですが、もちろん、Java に関する限り、互いにほとんど関係がありません。
amountとmaxAmountの両方で JAXB に同じクラスを使用させる方法はありますか?
完全にクリーンになるために ;-) Trang を使用して RNC から XML スキーマを生成することを言及しておく必要があります。質問に対する答えが「XML スキーマを変更する」である場合、「その XML スキーマを生成するために RNC を変更するにはどうすればよいですか?」という補足的な質問があります。私の RNC は次のようになります。
AmountAttributes =
QuantityAttribute?
& attribute numerator { xsd:nonNegativeInteger }?
& attribute denominator { xsd:positiveInteger }?
QuantityAttribute = attribute quantity { xsd:decimal }
Measure =
element measure {
element amount { AmountAttributes }?,
element maxAmount { AmountAttributes }?
}+
私は RNC の方が理解しやすいので RNC を使用しますが、私の問題の解決策が XML スキーマを使用することだけである場合は、それで構いません。
スティーブ