プロファイル:基本データ型
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のデータ型はシステム間のデータ連携の文脈で一つの基準となるので、 基本データ型との関係を明確にします。
整数型
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型 | 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 |
|
(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(スキーム・ホストを含む) |
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は、メモリ上に収まりきらない、あるいはメモリを圧迫するおそれのある巨大なデータを扱うための型です。
実装上は、バックグラウンドで一時ファイルを利用するなど、複雑な構造を持つことが一般的であり、厳密には基本データ型とは言えません。
ただし、アプリケーションコードからの利用においては、他の基本データ型と同等の使い勝手を提供することが目指されています。