--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