--class-prefix と --param-prefix
生成されるコードにプリフィックスを加えるため,--class-prefix と --param-prefix の二つのオプションを追加しました.主要なスキーマのように要素名に小文字を使っていればこのオプションは必要になることはないと思います.scalaxb はクラス名の語頭を大文字にしますが,パラメータ名はいじらないため,以下のようなコードになるためです:
case class USAddress(name: String, street: String, city: String, usstate: USState, zip: Int) extends Addressable
要素名の語頭がスキーマの中でも大文字化されているとすると,以下のようなコードになってしまいます:
case class USAddress(Name: String, Street: String, City: String, USState: USState, Zip: Int) extends Addressable
これは合法なコードですが USState
が二重の意味を持つことは混乱の原因となります.ここで --param-prefix
を使ってパラメータにプリフィックスを付けることができます.例えば,m
を付けるとすると,以下のコードを生成します:
case class USAddress(mName: String, mStreet: String, mCity: String, mUSState: USState, mZip: Int) extends Addressable
また,何らかの理由でクラス名にもプリフィックスを付けたい場合は --class-prefix
を使います.X
を選ぶとすると,以下のコードを生成します:
case class XUSAddress(mName: String, mStreet: String, mCity: String, mUSState: XUSState, mZip: Int) extends XAddressable
小文字を名前にプリフィックスを付けるのにちょっとした細工を実装してみました.scalaxb はプリフィックスを付ける前に元の名前の語頭を大文字化しますが,プリフィックスが _
で終わる場合は大文字化しないことにしました.最初の例に m
をプリフィックスする場合は,以下のコードを生成します:
case class USAddress(mName: String, mStreet: String, mCity: String, mUsstate: USState, mZip: Int) extends Addressable
しかし,m_
を選んだ場合は,以下のようになります:
case class USAddress(m_name: String, m_street: String, m_city: String, m_usstate: USState, m_zip: Int) extends Addressable