プロファイル:基本データ型

SimpleModelingのドメイン・モデルで使用する基本データ型のプロファイルです。

SimpleModelingでのドメイン・モデルでは 特別な宣言をせずに、エンティティやバリューといったオブジェクトの 属性として本プロファイルのデータ型を使用することができます。

背景

UMLとの関係

UMLが定義しているデータ型の基本型(PrimitiveTypes)は以下のものです。

名前 定義

Boolean

論理値(true または false)

Integer

整数値(範囲未定義)

Real

実数(浮動小数点)

String

Unicode 文字列

UnlimitedNatural

非負整数(0 以上)または無限大(*)

これはUMLのメタモデル定義に必要な最小限のデータ型を定義しているのみなので、 業務アプリケーション開発のためのデータ型としては圧倒的に不十分です。

また数値データ型の値域は未定義や無限大となっています。 無限大の値域は実務では使う場所が限られます。 実務的にはプログラミング言語の提供するデータ型と同じ値域をもつデータ型が必要です。

Scala/Javaとの関係

SimpleModelingリファレンス・モデルではプログラミング言語の環境として以下のものを使用します。

  • Scala 3.3.6 (LTS)

  • Java 21 (LTS)

  • Cats 2.10.0

この環境で定義されているプログラミング言語の基本データ型をモデル側で そのまま使用できるようにすることで、モデリングとプログラミングの相互運用を図ります。

XMLとの関係

XMLのデータ型はXML Schema Part 2: Datatypesで定義されています。

XMLのデータ型はシステム間のデータ連携の文脈で一つの基準となるので、 基本データ型との関係を明確にします。

SimpleModelingライブラリ

業務アプリケーションのモデリングに必要な基本データ型はUMLの基本データ型、 Scala/Javaのデータ型だけでは不十分です。

この問題に対応するためSimpleModelingのランタイムライブラリで 上記の方針で導入した基本データ型を補完する基本データ型を提供します。

項目

基本データ型は以下の項目を定義しています。

  • 名前

  • 定義

  • 値域

  • Scala/Java型

  • XML型

  • SimpleModeling Lib

名前

基本データ型の名前です。

定義

基本データ型の定義です。

値域

必要に応じてデータ型の制約を提示します。

文字列では文字数の制約、文字種の制約を提示します。

必要に応じてデータ型の具体例を提示します。

Scala/Java型

基本データ型をプログラムで扱う時のScalaの基本型、基本オブジェクトまたはScalaから暗黙的に使われるJavaの基本オブジェクトです。

XML型

XML Schemaで定義されているデータタイプです。

データ交換の値域の目安として有効です。

SimpleModeling Lib

基本型がScala/Javaの基本ライブラリで提供されていない場合、SimpleModelingの基本ライブラリで対応するオブジェクトを提供します。

このため、本プロファイルで定義した基本データ型はCozyなどでScalaプログラムの生成時には、対応するScalaオブジェクトが存在します。

整数型

Name Definition Scala/Java Type XML Type SimpleModeling Lib

byte

8ビット符号付き整数(-128〜127)

Byte

byte

-

short

16ビット符号付き整数(-32,768〜32,767)

Short

short

-

int

32ビット符号付き整数(-2,147,483,648〜2,147,483,647)

Int / Integer

int

-

long

64ビット符号付き整数

Long

long

-

integer

任意精度の整数

BigInt

integer

-

decimal

任意精度の10進数

BigDecimal

decimal

-

float

単精度浮動小数点数(約7桁精度)

Float

float

-

double

倍精度浮動小数点数(約15桁精度)

Double

double

-

positiveInteger

正の整数(1以上、任意精度)

BigInt

positiveInteger

-

negativeInteger

負の整数(-1以下、任意精度)

BigInt

negativeInteger

-

nonNegativeInteger

非負の整数(0以上、任意精度)

BigInt

nonNegativeInteger

-

nonPositiveInteger

非正の整数(0以下、任意精度)

BigInt

nonPositiveInteger

-

unsignedByte

8ビット非符号整数(0〜255)

Short

unsignedByte

-

unsignedShort

16ビット非符号整数(0〜65,535)

Int

unsignedShort

-

unsignedInt

32ビット非符号整数(0〜4,294,967,295)

Long

unsignedInt

-

unsignedLong

64ビット非符号整数(0〜18,446,744,073,709,551,615)

BigInt

unsignedLong

-

positiveInt

正の32ビット整数(1〜2,147,483,647)

-

-

PositiveInt

negativeInt

負の32ビット整数(-1〜-2,147,483,648)

-

-

NegativeInt

nonNegativeInt

非負の32ビット整数(0〜2,147,483,647)

-

-

NonNegativeInt

nonPositiveInt

非正の32ビット整数(-2,147,483,648〜0)

-

-

NonPositiveInt

positiveLong

正の64ビット整数(1以上)

-

-

PositiveLong

negativeLong

負の64ビット整数(-1以下)

-

-

NegativeLong

nonNegativeLong

非負の64ビット整数(0以上)

-

-

NonNegativeLong

nonPositiveLong

非正の64ビット整数(0以下)

-

-

NonPositiveLong

整数型は大きく以下の3つに別れます。

Scala/Javaの基本データ型

モデリングとプログラミングの相互運用を目的とした、ScalaやJavaの基本型です。

XMLデータ型

外部システムとのデータ交換を目的としたXMLスキーマに基づく型です。

業務・Webアプリケーション向け型

業務アプリケーションやWebアプリケーションにおける現実的な制約や用途に基づいた型です。

業務アプリケーションでは、intやlongの精度を持った0以上の整数、1以上の整数が頻出するのでこれらを表現するデータ型を定義しています。

浮動小数点型

名前 定義 Scala/Java型 XML型

float

単精度浮動小数点数(約7桁の精度)

3.14, -2.7e+5

Float

float

double

倍精度浮動小数点数(約15桁の精度)

3.1415926535, 6.02e+23

Double

double

論理型

名前 定義 値域 Scala/Java型 XML型

boolean

真偽値を表す

true, false

Boolean

boolean

量型

名前 定義 Scala/Java型 XML型 SimpleModeling Lib

quantity

測定可能な量(長さ、重さ、温度など)

3.5, 100

-

-

Quantity

amount

金額などの抽象的な量(通貨、ポイントなど)

1200, 49.99

-

-

Amount

quantity_unit

測定量の単位(m, kg, sなど)

m, kg,

-

-

QuantityUnit

measurement_unit

測定・計量に用いられる単位(量/金額/比率等)

USD, %, mmHg

-

-

MeasurementUnit

rate

割合・比率(0〜1の実数)

0.85, 1.0

-

-

Rate

percentage

百分率(%単位で表す比率)

85.0, 100.0

-

-

Percentage

量型は、測定可能な物理量や金額、比率など、「大きさ」や「量」に関するデータを表現するための型群です。

「量型」は、数値型や論理型といった基本型とは異なり、ビジネスロジックにおける意味づけを重視した型です。

数値型と異なり、意味づけされた文脈に基づいて定義されるため、単位や表現方法に関する情報を含むことがあります。

文字列型

名前 定義 文字数の制約 文字種の制約 Scala/Java型 XML型 SimpleModeling Lib

string

一般的な文字列。名前、コード、識別子、短い説明などに使用

なし

任意(Unicode全般)

String

string

-

normalized_string

改行・タブを除去した正規化済み文字列

なし

改行・タブ・先頭末尾スペースなし

(String)

normalizedString

NormalizedString

token

前後の空白を除去した単語や識別子

1–1024

空白・改行を含まない。英数字+一部記号

(String)

token

Token

identifier

一意な識別子(UUIDやコード等を含む)

1–1024

半角英数字、アンダースコア

(String)

(string)

Identifier

slug

URLセーフな短い識別文字列

1–64

小文字英数字、ハイフン

(String)

(string)

Slug

pathname

ファイルやディレクトリのパス

1–1024

/ 区切りのUTF-8文字列

(String)

(string)

PathName

filename

拡張子を含むファイル名

1–64

半角英数字、_-.

(String)

(string)

FileName

name

短く識別可能なラベルや名称

1–64

可読なUTF-8文字列(制御文字を含まない)

(String)

(string)

Name

title

書籍や記事、項目などのタイトル

1–255

Unicode文字列(記号含む)

(String)

(string)

Title

label

UI上の短いラベル、ボタンやフィールド名

1–255

可読なUTF-8文字列(制御文字を含まない)

(String)

(string)

Label

text

意味のある自然言語の文字列

8192

改行や句読点を含む自然言語文

(String)

(string)

Text

文字列型は、人間が読むためのテキストや識別用コード、構造的なパスやラベルなど、多様な用途に利用される基本的なデータ型です。

文字列型は、Unicodeのコードポイントを格納することが基本となります。

データ型はそれぞれ用途に合わせて、格納できる文字数(コードポイント数)や使用できる文字の種類が異なっています。

SimpleModelingでは、用途や構造に応じて、以下のように文字列型を分類しています。

汎用文字列型

一般的なテキストや簡易な整形済み文字列に用いる型です。(例:string, normalized_string, token)

識別子・コード型

一意性や構造的識別を重視する用途に使用します。(例:identifier, slug, pathname, filename)

ラベル・名称型

画面表示や人間にわかりやすい名前付けに用います。(例:name, title, label)

自然言語テキスト型

文や段落など、意味のある自然言語を含む長めの文字列を扱います。(例:text)

これらの型は、入力バリデーション、UI表示、検索・整合性検証などにおいて、より明確で安全なモデリングを実現します。

時間型

名前 定義 Scala/Java型 XML型

local_date

年月日を表す

2025-07-11

java.time.LocalDate

date

local_time

時分秒(タイムゾーンなし)

14:30:00

java.time.LocalTime

time

local_datetime

日付と時刻の組み合わせ(TZなし)

2025-07-11T14:30:00

java.time.LocalDateTime

datetime

offset_time

タイムゾーン付き時刻

14:30:00+09:00

java.time.OffsetTime

time

offset_datetime

タイムゾーン付き日付+時刻

2025-07-11T14:30:00+09:00

java.time.OffsetDateTime

datetime

zoned_datetime

タイムゾーンID付き日時

2025-07-11T14:30:00+09:00Asia/Tokyo

java.time.ZonedDateTime

datetime

duration

経過時間や時間間隔

PT5H30M, PT20S

java.time.Duration

-

period

暦上の期間(年/月/日単位)

P2Y3M

java.time.Period

-

instant

UTC基準の瞬間時刻

2025-07-11T05:30:00Z

java.time.Instant

-

year

年を表す

2025

java.time.Year

-

year_month

年と月を表す

2025-07

java.time.YearMonth

-

month_day

月と日を表す

07-11

java.time.MonthDay

-

timezone

タイムゾーンID

Asia/Tokyo

java.time.ZoneId

-

zone_offset

タイムゾーンのUTCオフセット

+09:00, Z

java.time.ZoneOffset

-

時間型は、日付・時刻・期間・タイムゾーンなど、時間に関する情報を表現するためのデータ型群です。

SimpleModelingでは、以下のように時間型を用途ごとに分類しています。

暦型

年月日や時分秒などの暦情報を表す型です(例:local_date, local_time, local_datetime)。

タイムゾーン・オフセット型

タイムゾーンやUTCオフセットと結びついた日時を表す型です(例:offset_datetime, zoned_datetime)。

時間間隔・期間型

経過時間や日付上の期間を表す型です(例:duration, period)。

瞬間・精密時刻型

絶対的な時刻(UTC)や精密な時間を表す型です(例:instant, year, year_month, month_day)。

タイムゾーン情報型

タイムゾーンIDやUTCオフセットなどの情報を表す型です(例:timezone, zone_offset)。

なお、Javaでは以前 java.util.TimeZone がタイムゾーンの表現に使用されていましたが、Java 8以降は java.time.ZoneId への移行が推奨されています。

これらの型は、スケジューリング、タイムスタンプ、履歴管理などの多くの場面で活用されます。

国際化型

名前 定義 Scala/Java型 XML型 SimpleModeling Lib

locale

言語と地域

ja_JP, en_US

java.util.Locale

(xs:string)

-

locale_language

ISO 639 言語コード

ja, en

-

xs:language

LocaleLanguage

locale_country

ISO 3166 国コード

JP, US

-

(xs:string)

LocaleCountry

locale_script

ISO 15924 スクリプトコード

Latn, Hani

-

(xs:string)

LocaleScript

charset

文字エンコーディング

UTF-8, Shift_JIS

java.nio.charset.Charset

(xs:string)

-

currency

ISO 4217 通貨コード

JPY, USD

java.util.Currency

(xs:string)

-

i18n_string

ロケールごとの翻訳テキスト

-

-

-

I18nString

i18n_message

引数付きの多言語メッセージ構造

-

-

-

I18nMessage

i18n_template

プレースホルダー付きテンプレート文字列

-

-

-

I18nTemplate

国際化型は、言語・地域・文字コード・通貨・翻訳文字列など、多言語・多文化対応を目的とした情報を表現します。

入出力型

名前 定義 Scala/Java型 XML型 SimpleModeling Lib

url

絶対URL(スキーム・ホストを含む)

https://example.org

java.net.URL

anyURI

-

uri

一般的なURI(相対URIも含む)

/images/logo.svg

java.net.URI

anyURI

-

mime_type

MIMEメディア型

image/png

-

-

MimeType

content_type

MIME型にパラメータを加えた形式

text/html; charset=UTF-8

-

-

ContentType

file_suffix

ファイル拡張子(ドットなし)

jpg, pdf

-

-

FileSuffix

入出力型は、URLやファイル拡張子、MIMEタイプなど、外部システムやデータリソースとの接続・識別に用いられる情報を表します。

その他

名前 定義 Scala/Java型 XML型 SimpleModeling Lib

binary

バイナリデータ

-

ArrayByte

hexBinary, base64Binary

-

uuid

汎用一意識別子

123e4567-e89b-12d3-a456-426614174000

java.util.UUID

-

-

拡張データ型 (参考)

名前 定義 Scala/Java型 XML型 SimpleModeling Lib

clob

長大な文字列(コメントや記事本文など)

-

-

Clob

blob

長大なバイナリデータ

-

-

Blob

ここでは、基本的な文字列型やバイナリ型に対して、用途や構造の面で拡張されたデータ型を参考として紹介します。

clobやblobは、メモリ上に収まりきらない、あるいはメモリを圧迫するおそれのある巨大なデータを扱うための型です。

実装上は、バックグラウンドで一時ファイルを利用するなど、複雑な構造を持つことが一般的であり、厳密には基本データ型とは言えません。

ただし、アプリケーションコードからの利用においては、他の基本データ型と同等の使い勝手を提供することが目指されています。