ここでは,ERwin/ERX(バージョン2.6以前)で作成したエンティティレポートの辞書登録について説明します。
(1) ERwin/ERXでのエンティティレポートの出力設定
ERwin/ERXで次に示す設定をしてCSV形式ファイルを出力してください。
表B-1 エンティティレポートの出力項目と指定順序
指定順 | 出力項目(オプション名) | |
---|---|---|
ERwin/ERX 日本語版 | ERwin/ERX 英語版 | |
1 | テーブル名(テーブルオプション) | Table Name(Table Option) |
2 | エンティティ名(エンティティオプション) | Entity Name(Entity Option) |
3 | 属性名(属性オプション) | Attribute Names(Attribute Option) |
4 | カラム/タイプ(属性オプション) | Columns/Types(Attribute Option) |
5※1 | コメント(エンティティオプション) | Note(Entity Option) |
5※1 | 定義(エンティティオプション) | Definiton(Entity Option) |
6※2 | 外部キー(リレーションシップオプション) | Foreign Keys(Relationship Option) |
7※3 | カンマ区切り(レポート形式) | Comma Delimited(Report Format) |
8※3 | ヘッダー(表示形式) | Header(Multi-Valued Format) |
9※3 | マージ(表示形式) | Merge(Multi-Valued Format) |
10※3 | 改行コードの除去 ※4 | Remove Newline |
注※1 どちらかを選択してください。両方の同時指定はできません。
注※2 属性レポートを同時入力する場合は,必ず指定してください。
注※3 指定順序どおりでなくてもかまいません。
注※4 ERwin/ERX 2.5以前のバージョンでは「新規行の除去」となります。
(2) エンティティレポートからデータ項目辞書への変換規則
依存関係のあるエンティティレポートを辞書登録する場合の変換規則について説明します。エンティティレポート形式の辞書登録の例を,図B-2に示します。
図B-2 エンティティレポート形式の辞書登録の例
エンティティレポート形式のCSV形式ファイルを辞書に登録するときの指定によって,登録されるデータ項目,及びデータ項目の関係が異なります。図B-2は,属性レポートの同時入力の指定と,物理名の異なる外部キーを識別する指定をした場合の登録例です。
(a) PK属性とFK属性の定義を,データ項目間の継承関係として登録する
(b) 物理名の異なる外部キーを識別して登録する
物理名の異なる外部キーを識別して登録するには,CSV形式ファイル入力コマンドで引数「/Z 物理名の異なる外部キーを識別する」を省略するか,[CSV入力オプション]ダイアログの「物理名の異なる外部キーを識別する」のチェックをオンにします。
この指定をしない場合には,図B-2で示した「2'」と「4'」のデータ項目は登録されません。
(3) エンティティレポートからデータ項目辞書への変換規則(同一カラム名をマージする場合)
エンティティレポート中に,同一のカラム名が定義された属性情報が複数ある場合,その情報をマージしてデータ項目辞書に登録できます。
この場合のエンティティレポートの変換規則を,図B-3に示します。
図B-3 エンティティレポート形式の辞書登録の例(同一カラム名をマージする場合)
エンティティレポート形式のCSV形式ファイルを辞書に登録するときの指定によって,登録されるデータ項目,及びデータ項目の関係が異なります。図B-3は,属性レポートの同時入力の指定と,物理名の異なる外部キーを識別する指定をした場合の登録例です。
(a) 同一カラム名をマージして登録する
同一カラム名をマージして辞書に登録するには,CSV形式ファイル入力コマンドで引数「/R 同一カラム名のマージ有無」に「use」を指定するか,又は[CSV入力オプション]ダイアログの「同一カラム名の属性をマージする」のチェックをオンにします。
なお,FK属性のカラム名と,その移行先のPK属性のカラム名が同じ場合は,この指定に関係なく,必ずマージされて登録されます。詳細については,「(2) エンティティレポートからデータ項目辞書への変換規則」を参照してください。
(b) マージされる属性の条件
同一カラム名の属性のマージでは,マージされる属性間で,属性の値が一致している必要があります。
マージされる属性間の条件を,表B-2に示します。条件は,エンティティレポートを単独で入力する場合と,エンティティレポートと属性レポートを同時に入力する場合とで異なります。
表B-2 マージされる属性間の条件
属性情報 | マージする属性間の条件 | ||
---|---|---|---|
エンティティレポートを 単独で入力 | エンティティレポートと 属性レポートを同時に入力 | ||
カラム名 | ○ | ○ | |
属性名 | ○ | ○ | |
カラムデータタイプ (精度,スケールを含む) | ○ | ○ | |
デフォルト値 | - | ○ | |
移行先を示す情報 | 親テーブル名 | × | △ |
ベース名 | - | △ | |
主キー | × | × | |
外部キー | × | × | |
コメント又は定義 | - | ×※ |
(凡例)
○:一致しなければならない
△:マージする属性の双方が移行元の情報を持っている場合,移行元の情報が一致している場合はマージできる。また,マージする属性の一方だけ移行元の情報を持っている場合,又はマージする属性の双方が移行元の情報を持っていない場合はマージできる(マージする属性の双方が同じ移行元の情報を持っている場合,及びマージする属性の一方だけ移行元を示す情報を持っている場合は,移行元を示す情報を基に,マージしたデータ項目に継承の関連が付けられる)。
×:一致しなくてもよい
-:該当しない
注※ コメント又は定義の情報が,マージ対象の複数の項目に設定されている場合は,その中で最も長い情報が,データ項目のコメントに設定されます。
(4) データ項目辞書とエンティティレポート形式の対応
データ項目辞書の定義項目とエンティティレポート形式の対応を,表B-3に示します。
表B-3 データ項目辞書とエンティティレポートの対応
データ項目辞書の 定義項目 | エンティティレポート形式 | |||
---|---|---|---|---|
結合項目※1 | 構成項目 | |||
単項目 | 結合項目とその構成項目 結:結合項目 構:構成項目 | |||
名称 | データ項目名 | テーブル名 | カラム名※2 | 結:カラム名※2 構:カラム名+サフィックス※2 |
標準名称 | エンティティ名 | 属性名※3 | 結:属性名※3 構:属性名+サフィックス※2※3 | |
フリガナ | × | × | 結:× 構:× | |
属性 | 分類 | 結合データ | カラム名※4※5 | 結:結合データ 構:カラム名※4※5 |
けた数 | - | カラム名※4※5 | 結:- 構:カラム名※4※5 | |
小数部 けた数 | - | カラム名※4※5 | 結:- 構:カラム名※4※5 | |
反復回数 | - | × | 結:- 構:× | |
付加情報 | フィールド 1~n | × | × | 結:× 構:× |
コメント | エンティティコメント/定義 | * 属性 コメント/定義 | 結:* 属性 コメント/定義 構:× | |
言語別詳細情報 | 名前 | テーブル名 | カラム名※2 | 結:カラム名※2 構:カラム名+サフィックス※2 |
タイプ | - | カラム名※4※5 | 結:- 構:カラム名※4※5 | |
タイプ修飾情報※6 | - | × | 結:- 構:× | |
取りうる値 | - | × | 結:- 構:× | |
初期値 | - | * デフォルト値 | 結:- 構:* ※7 | |
言語別 フィールド | × | × | 結:× 構:× |
(凡例)
×:ERwin/ERX側にデータ項目辞書に対応する情報がない項目
-:データ項目辞書に値が設定されない項目
*:属性レポートから取得される情報。属性レポートを同時入力しない場合は「×」。
注※1 エンティティから変換されるデータ項目は,最上位結合項目となります。
注※2 属性名の末尾に出力される(PK)などのキー情報は削除されます。
注※3 カラム名の空白で区切られた情報の一つ目から取得されます。
注※4 カラム名の空白で区切られた情報の二つ目から取得されます。
注※5 変換される分類とタイプは,「(5) ERwin/ERX タイプマッピングの規則」を参照してください。
注※6 「COBOL又はOOCOBOL」で定義する編集文字列,「IDL(CORBA)」で定義するシーケンスを指します。
注※7 構成項目のサフィックスが -charの場合はデフォルト値,-lengthの場合は デフォルト値の文字列長が設定されます。
(5) ERwin/ERX タイプマッピングの規則
ERwin/ERXで指定したタイプから,SEWB+/REPOSITORYのデータ項目の分類とタイプへ変換されます。変換にはタイプマッピングの規則が適用され,ERwin/ERXタイプや条件に応じた分類,タイプ,けた数,小数部けた数が設定されます。
標準で用意されているタイプマッピングの規則については,使用するデータベースの種類に応じて次から選択してください。
適用する変換規則は,CSV形式ファイル入力コマンドの引数「/E ファイルフォーマット種別(02-01互換用)」又は「/B データベース種別」で指定するか,[CSV入力オプション]ダイアログの「対象データベース選択」で指定します。
なお,これらの変換をするには,あらかじめ環境構築ユティリティで言語別タイプをそれぞれの分類で指定できるタイプとして登録しておく必要があります。標準に設定されている分類とタイプの対応については「2.4.1(3)(a) 分類」を参照してください。
変換規則を表B-4から表B-9に示します。
表B-4 ERwin/ERXのタイプの変換規則A-1(ORACLE)
ERwin/ERX | SEWB+/REPOSITORY | ||||
---|---|---|---|---|---|
データベース タイプ | 精度・長さ | スケール | 分類 | けた数 | 小数部けた数 |
CHAR | [n] (255) | × | 英数字文字列 | n | - |
CHARACTER | [n] (255) | × | 英数字文字列 | n | - |
CHARZ | [n] (255) | × | 英数字文字列 | n | - |
CURSOR | × | × | なし | - | - |
DATE | × | × | 日付 | 7 | - |
DECIMAL | p (38) | [s] (0) | 実数※1 | p | s※3 |
DISPLAY | p (38) | [s] (0) | なし | p | s※4 |
FLOAT | [p] (126) | × | 実数 | p | - |
INTEGER | × | × | 整数 | 38 | - |
LONG | [n] (16777215) | × | 英数字文字列 | n | - |
LONG RAW | [n] (16777215) | × | なし | n | - |
LONG VARCHAR | [n] (16777215) | × | 英数字文字列 | n | - |
LONG VARRAW | n (16777215) | × | なし | n | - |
MLSLABEL | [n] (4) | × | なし | n | - |
NUMBER | [p] (38) | [s] (0) | なし | p+2※2 | s※3 |
RAW | [n] (2000) | × | なし | n | - |
RAW MLSLABEL | [n] (255) | × | なし | n | - |
ROWID | × | × | なし | 2000 | - |
STRING | [n] (2000) | × | 英数字文字列 | n | - |
UNSIGNED | [p] (10) | × | なし | p | - |
VARCHAR | [n] (65533) | × | 英数字文字列 | n | - |
VARCHAR2 | [n] (2000) | × | 英数字文字列 | n | - |
VARNUM | × | × | なし | 22 | - |
VARRAW | n (65533) | × | なし | n | - |
その他 | [p] | [s] | なし | - | - |
(凡例)
×:指定できない -:設定されない
n:長さ p:精度 s:スケール
[ ]:括弧内は省略できる
( ):括弧内は,ERwin/ERXでの記述が省略又は数値以外の文字列の場合の仮定値
注 データ項目種別はすべて「単項目」となります。
注※1 s=0の場合と,sが省略された場合は「整数」となります。
注※2 s<0の場合は「p+(sの絶対値)+1」となります。p<sの場合は「s+2」となります。
注※3 s=0の場合と,sが省略された場合は「-」となります。
注※4 sが省略された場合は「-」となります。
表B-5 ERwin/ERXのタイプの変換規則A-2(ORACLE)
ERwin/ERXの データベースタイプ | SEWB+/REPOSITORYの 言語別タイプ | |||
---|---|---|---|---|
COBOL又は OOCOBOL | C又はC++ | SQL | その他 | |
CHAR | X | char | CHAR | ※8 |
CHARACTER | X | char | CHAR | ※8 |
CHARZ | X | char | フリー定義※6 | ※8 |
CURSOR | フリー定義※1 | フリー定義※4 | フリー定義※6 | ※8 |
DATE | X | char | DATE | ※8 |
DECIMAL | P | float | フリー定義※6 | ※8 |
DISPLAY | フリー定義※2 | char | フリー定義※6 | ※8 |
FLOAT | D | float | フリー定義※6 | ※8 |
INTEGER | フリー定義※3 | int | フリー定義※6 | ※8 |
LONG | X | char | LONG | ※8 |
LONG RAW | X | char | フリー定義※6 | ※8 |
LONG VARCHAR | X | char | フリー定義※6 | ※8 |
LONG VARRAW | X | char | フリー定義※6 | ※8 |
MLSLABEL | X | char | フリー定義※6 | ※8 |
NUMBER | X | char | ※7 | ※8 |
RAW | X | char | フリー定義※6 | ※8 |
RAW MLSLABEL | X | char | フリー定義※6 | ※8 |
ROWID | X | char | フリー定義※6 | ※8 |
STRING | X | char | フリー定義※6 | ※8 |
UNSIGNED | フリー定義※4 | unsigned int | フリー定義※6 | ※8 |
VARCHAR | フリー定義※5 | char | フリー定義※6 | ※8 |
VARCHAR2 | X | char | VARCHAR2 | ※8 |
VARNUM | X | char | フリー定義※6 | ※8 |
VARRAW | X | char | フリー定義※6 | ※8 |
その他 | フリー定義※4 | フリー定義※4 | フリー定義※6 | ※8 |
注※1 定義文字列には「SQL-CURSOR」が設定されます。
注※2 定義文字列には,「PIC S9($p)V9($s) DISPLAY SIGN LEADING SEPARATE」が設定されます。($p:精度(長さ), $s:スケール)
注※3 定義文字列には「PIC S9($p) COMP-5」が設定されます。($p:精度(長さ))
注※4 定義文字列は設定されません。
注※5 定義文字列には「PIC X($p) VARYING」が設定されます。($p:精度(長さ))
注※6 定義文字列にはERwin/ERXタイプが設定されます。
注※7 pとsが省略された場合は「NUMBERf」が設定されます。s=0の場合と,pが指定されてsが省略された場合は「NUMBER」が設定されます。その他の場合はフリー定義となり,定義文字列にはERwin/ERXタイプが設定されます。
注※8 言語区分「IDL(CORBA)」「帳票定義」「Java」のタイプには,環境構築ユティリティで設定した分類区分に対応するタイプの初期値(デフォルトタイプ)が設定されます。言語別4~7のタイプはフリー定義となり,定義文字列は設定されません。
表B-6 ERwin/ERXのタイプの変換規則B-1(ORACLE)
ERwin/ERX | SEWB+/REPOSITORY | ||||
---|---|---|---|---|---|
データベース タイプ | 精度・長さ | スケール | 分類 | けた数 | 小数部けた数 |
CHAR | [n] (18) | × | 英数字文字列 | n | - |
CHARACTER | [n] (18) | × | 英数字文字列 | n | - |
DATE | × | × | なし | 18 | - |
DECIMAL | [p] (18) | [s] (0) | 実数※1 | p | s※2 |
FLOAT | × | × | 実数 | 18 | - |
INTEGER | × | × | 整数 | 18 | - |
LONG | × | × | 英数字文字列 | 18 | - |
LONG RAW | × | × | 英数字文字列 | 18 | - |
LONG VARCHAR | [n] (18) | × | 英数字文字列 | n | - |
MLSLABEL | × | × | なし | 18 | - |
NUMBER | [p] (18 (*のとき38)) | [s] (0) | 実数※1 | p | s※2 |
RAW | [n] (18) | × | 英数字文字列 | n | - |
RAW MLSLABEL | × | × | なし | 18 | - |
ROWID | × | × | なし | 18 | - |
SMALLINT | × | × | 整数 | 18 | - |
VARCHAR | [n] (18) | × | 英数字文字列 | n | - |
VARCHAR2 | [n] (18) | × | 英数字文字列 | n | - |
その他 | [p] (18) | [s] | なし | p | - |
(凡例)
×:指定できない -:設定されない
n:長さ p:精度 s:スケール
[ ]:括弧内は省略できる
( ):括弧内は,ERwin/ERXでの記述が省略又は数値以外の文字列の場合の仮定値
注 データ項目種別はすべて「単項目」となります。
注※1 s=0の場合と,pが指定されてsが省略された場合は「整数」となります。
注※2 s=0の場合と,sが省略された場合は「-」となります。
表B-7 ERwin/ERXのタイプの変換規則B-2(ORACLE)
ERwin/ERXの データベースタイプ | SEWB+/REPOSITORYの 言語別タイプ | |
---|---|---|
SQL | その他 | |
CHAR | CHAR | ※3 |
CHARACTER | フリー定義※1 | ※3 |
DATE | フリー定義※1 | ※3 |
DECIMAL | フリー定義※1 | ※3 |
FLOAT | フリー定義※1 | ※3 |
INTEGER | フリー定義※1 | ※3 |
LONG | LONG | ※3 |
LONG RAW | フリー定義※1 | ※3 |
LONG VARCHAR | フリー定義※1 | ※3 |
MLSLABEL | フリー定義※1 | ※3 |
NUMBER | NUMBERf※2 | ※3 |
RAW | フリー定義※1 | ※3 |
RAW MLSLABEL | フリー定義※1 | ※3 |
ROWID | フリー定義※1 | ※3 |
SMALLINT | フリー定義※1 | ※3 |
VARCHAR | フリー定義※1 | ※3 |
VARCHAR2 | VARCHAR2 | ※3 |
その他 | フリー定義※1 | ※3 |
注※1 定義文字列にはERwin/ERXタイプが設定されます。
注※2 s=0の場合と,pが指定されてsが省略された場合は「NUMBER」が設定されます。
注※3 言語区分「COBOL又はOOCOBOL」「C又はC++」「IDL(CORBA)」「帳票定義」「Java」のタイプには,環境構築ユティリティで設定した分類区分に対応するタイプの初期値(デフォルトタイプ)が設定されます。言語別4~7のタイプはフリー定義となり,定義文字列にはERwin/ERXタイプが設定されます。
表B-8 ERwin/ERXのタイプの変換規則C-1(HiRDB)
ERwin/ERX | SEWB+/REPOSITORY | |||||
---|---|---|---|---|---|---|
データベース タイプ | 精度・長さ | スケール | 構成項目 サフィックス | 分類 | けた数 | 小数部けた数 |
CHAR | [n] (1) | × | - | 英数字文字列 | n | - |
CHARACTER | [n] (1) | × | - | 英数字文字列 | n | - |
DATE | × | × | - | 日付 | 10 | - |
DEC | [p] (15) | [s] (0) | - | 実数※1 | p | s※2 |
DECIMAL | [p] (15) | [s] (0) | - | 実数※1 | p | s※2 |
DOUBLE PRECISION | × | × | - | 実数 | 16 | - |
FLOAT | × | × | - | 実数 | 16 | - |
INT | × | × | - | 整数 | 9 | - |
INTEGER | × | × | - | 整数 | 9 | - |
INTERVAL YEAR TO DAY | × | × | - | なし | 8 | - |
INTERVAL HOUR TO SECOND | × | × | - | なし | 6 | - |
MCHAR | [n] (1) | × | - | 英数字文字列 | n | - |
MVARCHAR | n (32000) | × | -length | 整数 | 4 | - |
-char | 英数字文字列 | n | - | |||
NCHAR | [n] (1) | × | - | 日本語文字列 | n | - |
NVARCHAR | n (16000) | × | -length | 整数 | 4 | - |
-char | 日本語文字列 | n | - | |||
REAL | × | × | - | 実数 | 7 | - |
SMALLFLT | × | × | - | 実数 | 7 | - |
SMALLINT | × | × | - | 整数 | 4 | - |
TIME | × | × | - | 時刻 | 8 | - |
VARCHAR | n (32000) | × | -length | 整数 | 4 | - |
-char | 英数字文字列 | n | - | |||
その他 | [p] | [s] | - | なし | - | - |
(凡例)
×:指定できない -:設定されない
n:長さ p:精度 s:スケール
[ ]:括弧内は省略できる
( ):括弧内は,ERwin/ERXでの記述が省略又は数値以外の文字列の場合の仮定値
注 構成項目のサフィックス欄が「-」のタイプは,単項目として生成されるタイプです。「-」以外のタイプは,結合項目としてその構成項目が生成されるタイプです。
注※1 s=0の場合と,pが指定されてsが省略された場合は「整数」となります。
注※2 s=0の場合と,sが省略された場合は「-」となります。
表B-9 ERwin/ERXのタイプの変換規則C-2(HiRDB)
ERwin/ERXの データベース タイプ | SEWB+/REPOSITORYの 言語別タイプ | |||||
---|---|---|---|---|---|---|
構成項目 サフィックス | COBOL又は OOCOBOL | C又はC++ | SQL | その他 | 備考 | |
CHAR | - | X | char | CHAR | ※3 | |
CHARACTER | - | X | char | CHAR | ※3 | |
DATE | - | X | char | DATE | ※3 | |
DEC | - | P | フリー定義※1 | DEC | ※3 | |
DECIMAL | - | P | フリー定義※1 | DEC | ※3 | ※4 |
DOUBLE PRECISION | - | D | double | フリー定義※2 | ※3 | ※5 |
FLOAT | - | D | double | FLOAT | ※3 | |
INT | - | B | long | INT | ※3 | |
INTEGER | - | B | long | INT | ※3 | |
INTERVAL YEAR TO DAY | - | P | フリー定義※1 | フリー定義※2 | ※3 | |
INTERVAL HOUR TO SECOND | - | P | フリー定義※1 | フリー定義※2 | ※3 | |
MCHAR | - | X | char | MCHAR | ※3 | |
MVARCHAR | -length※6 | B | short | SMALLINT | ※3 | ※4 |
-char※6 | X | char | MVARCHAR | ※3 | ※5 | |
NCHAR | - | N | char | NCHAR | ※3 | |
NVARCHAR | -length※6 | B | short | SMALLINT | ※3 | ※4 |
-char※6 | N | char | NVARCHAR | ※3 | ※5 | |
REAL | - | D | float | フリー定義※2 | ※3 | |
SMALLFLT | - | D | float | SMALLFLT | ※3 | |
SMALLINT | - | B | short | SMALLINT | ※3 | |
TIME | - | X | char | TIME | ※3 | |
VARCHAR | -length※6 | B | short | SMALLINT | ※3 | ※4 |
-char※6 | X | char | VARCHAR | ※3 | ※5 | |
その他 | - | フリー定義※1 | フリー定義※1 | フリー定義※2 | ※3 |
注※1 定義文字列は設定されません。
注※2 定義文字列にはERwin/ERXタイプが設定されます。
注※3 言語区分「IDL(CORBA)」「帳票定義」「Java」のタイプには,環境構築ユティリティで設定した分類区分に対応するタイプの初期値(デフォルトタイプ)が設定されます。言語別4~7のタイプはフリー定義となり,定義文字列は設定されません。
注※4 初期値に,カラムのデフォルト値の文字列長が設定されます。
注※5 初期値に,カラムのデフォルト値が設定されます。
注※6 環境構築ユティリティのタイプマッピングの設定で,サフィックスをカスタマイズできます。
(6) エンティティレポート形式フォーマット
ERwin/ERXのエンティティレポートに対応するCSV形式ファイルフォーマットについて説明します。
(a) ファイル内部の構成
エンティティレポート形式のファイル内部の構成を次に示します。
1行目にはヘッダを,2行目からは個々のデータ項目の定義情報を記述します。エンティティレポート形式では,結合関係を記述できます。ただし,結合項目を階層化して記述することはできません。
結合項目を1行で記述します。その後に続けて,その結合項目を構成する個々の構成項目を1行ずつ連続して記述します。構成項目は,次の結合項目を記述するまで,同じ結合項目と関連する構成項目とみなされます。結合項目と構成項目の区別は,テーブル名があるかどうかで判断されます。
(b) ヘッダ
ヘッダはERwin/ERXでレポートを出力した場合に付けられます。ヘッダの内容は任意ですが,ヘッダ行のカンマで区切られた列数は,定義情報と同じでなくてはなりません。
(c) 定義情報
定義情報のフォーマットとエンティティレポートで定義する必要のある値と省略できる値を,表B-10に示します。エンティティレポート形式では,文字列の値はすべてクォーテーション(「"」又は「'」)で囲まないで記述します。
表B-10 データ項目の定義情報の記述内容(エンティティレポート形式)
記述順 | 記述する定義情報 | 結合項目 | 構成項目 |
---|---|---|---|
1 | テーブル名 | 〇 | - |
2 | エンティティ名 | △ | - |
3 | 属性名 | - | △ |
4 | カラム名 | - | 〇 |
5※1 | エンティティコメント | △ | - |
5※1 | エンティティ定義 | △ | - |
6※2 | 外部キー | △ | △ |
(凡例) 〇:必要な値 △:省略できる値 -:該当しない
注※1 どちらか一方を記述します。
注※2 属性レポートを同時入力する場合は,必ず記述します。