識別子のルールとガイドライン
使用上の便宜のために、この付録では、すべてのサーバ側コンテキストにおける ObjectScript 識別子のルールを要約し、名前衝突を回避するためのガイドラインを提供します。
ObjectScript には、予約語がありません。そのため、識別子としてコマンドを使用しても結果は構文的に正しくなりますが、そのコードはそれを読む人にわかりにくくなる可能性があります。
ユーザ、ロール、リソースなどのセキュリティ・エンティティの識別子については、"Caché セキュリティ管理ガイド" の関連するセクションを参照してください。
ネームスペース
ネームスペース名では、最初の文字は、英字またはパーセント記号 (%) に限られます。残りの文字は、英字、数字、ハイフン、またはアンダースコアにする必要があります。この名前は、255 文字以内にする必要があります。
回避する必要があるネームスペース名
予約済みのネームスペース名は、%SYS、BIN、BROKER、DOCBOOK、および DOCUMATIC です。これらのネームスペースのいくつかについては、このドキュメントで前述した “システム提供ネームスペース” で説明しています。他のものは Caché によって内部で使用されます。
また、ネームスペース名 SAMPLES を使用する場合、この名前を使用するインターシステムズのコード・サンプル・データベースをインストールしないように注意する必要があります。
データベース
データベース名では、最初の文字は、英字またはアンダースコアに限られます。残りの文字は、英字、数字、ハイフン、またはアンダースコアにする必要があります。この名前は、30 文字以内にする必要があります。
回避する必要があるデータベース名
予約済みのデータベース名は、CACHE、CACHESYS、CACHELIB、CACHEAUDIT、CACHETEMP、および DOCBOOK です。
また、データベース名 SAMPLES を使用する場合、その名前を持つインターシステムズのコード・サンプル・データベースをインストールしないように注意する必要があります。
これらのデータベースの詳細は、このドキュメント内の前述の “システム提供データベース” を参照してください。
ローカル変数
ローカル変数の名前について、ObjectScript では以下のルールが適用されます。
-
最初の文字は、英字かパーセント記号 (%) に限られます。
% で始まる名前にする場合、その直後の文字は z または Z にします。
-
残りの文字は、英字または数字にする必要があります。Unicode システムでは、これらの他の文字に、ASCII 128 より大きい任意の文字を使用できます。
-
名前は、大文字と小文字を区別します。
-
名前は、最初の 31 文字で (該当するコンテキストで) 一意である必要があります。
変数の添え字は、このカウントに含まれません。
回避する必要があるローカル変数名
ローカル変数に対して以下の名前は使用しないでください。
-
SQLCODE
Caché SQL が実行される可能性があるコンテキストでは、変数の名前として SQLCODE を使用しないでください。"Caché エラー・リファレンス" の “SQLCODE 値とエラー・メッセージ” の章を参照してください。
-
zenPage、this、および zenThis
Zen クラスでは、変数の名前としてこれらを使用しないでください。"Zen アプリケーションの開発" の “Zen ページ” の章にある “Zen の特殊変数” を参照してください。
グローバル変数
グローバル変数の名前について、ObjectScript では以下のルールが適用されます。
-
最初の文字はキャラット (^) にし、次の文字は英字かパーセント記号 (%) にする必要があります。
-
残りの文字は、英字または数字にする必要があります (ただし、次の箇条書きに示すように例外が 1 つあります)。Unicode システムでは、これらの他の文字に、ASCII 128 より大きい任意の文字を使用できます。
-
グローバル変数の名前には、1 つ以上のピリオド (.) 文字を含めることができますが、最初と最後の文字には使用できません。
-
名前は、大文字と小文字を区別します。
-
名前は、最初の 31 文字が (該当するコンテキストで) 一意である必要があります。キャラット文字はこのカウントに含まれません。つまり、グローバル変数の名前は、キャラットを含めて最初の 32 文字が一意である必要があります。
変数の添え字は、このカウントに含まれません。
-
CACHESYS データベースでは、グローバル名はすべて予約されていますが、先頭に ^z、^Z、^%z、^%Z が付くものについては例外です。 “CACHESYS のカスタム項目” を参照してください。
他のすべてのデータベースでは、先頭に ^ISC. および ^%ISC. が付くグローバル名はすべて予約されています
以下のサブセクションも参照してください。
回避する必要があるグローバル変数名
データベースを作成すると、Caché によって、それ自体が使用するためのいくつかのグローバルでそれが初期化されます。また、作成するネームスペースすべてに、システム・グローバルへのマッピングが含まれます。これには、書き込み可能システム・データベース内のグローバル・ノードも含まれます。
システム・グローバルを上書きしないようにするために、ネームスペースでは以下のグローバルを設定、変更、または削除しないでください。
-
以下の例外を除く、^% で始まる名前を持つグローバル
-
^%z または ^%Z で始まる名前を持つ独自のグローバル
-
^%SYS (ドキュメントに記載されているようにノードを設定できます)
-
-
^BP (制限は、Caché MVBasic を使用しているネームスペースにのみ適用されます)
-
^COMO (制限は、Caché MVBasic を使用しているネームスペースにのみ適用されます)
-
^CacheAuditD
-
^CacheMsg (Caché メッセージ・ディクショナリ。"Caché Server Pages (CSP) の使用法" の “CSP アプリケーションにおけるテキストのローカライズ” を参照してください。
-
^CacheTemp および ^CacheTemp で始まる名前を持つグローバル。ただし、以下の 1 つの例外を除きます。
-
^CacheTempUser で始まる名前を持つ独自のグローバル
-
-
^CMQLlog (制限は、Caché MVBasic を使用しているネームスペースにのみ適用されます。ドキュメントに記載されているようにこのグローバルを設定または削除できます)
-
^D.1 および ^D.2 (制限は、Caché MVBasic を使用しているネームスペースにのみ適用されます)
-
^DeepSee.* (制限は、DeepSee を使用しているネームスペースにのみ適用されます)
-
^DICT.* (制限は、Caché MVBasic を使用しているネームスペースにのみ適用されます)
-
^ERRORS
-
^InterSystems.Sequences (制限は、Caché Hibernate 言語を使用しているネームスペースにのみ適用されます。"JDBC での Caché の使用法" の “Caché Hibernate 言語の使用法” を参照してください。)
-
^ISC.* (インターシステムズで使用するために予約されています)
-
^ISCDebugLevel (ドキュメントに記載されているようにノードを設定する場合を除く)
-
^ISCMonitor (ドキュメントに記載されているようにノードを設定する場合を除く)
-
^ISCSOAP (ドキュメントに記載されているようにノードを設定する場合を除く)
-
^mqh (SQL クエリの履歴)
-
^mtemp*
-
^MV.* (制限は、Caché MVBasic を使用しているネームスペースにのみ適用されます)
-
^OBJ.GUID (ドキュメントに記載されている場合を除く)
-
^OBJ.DBTIME
-
^OBJ.JournalT
-
^oddBIND
-
^oddCOM
-
^oddDEF (クラス定義を含む)
-
^oddDEP
-
^oddEXT
-
^oddEXTR
-
^oddFMD (制限は、FileMan マッピング・ユーティリティを使用しているネームスペースにのみ適用されます)
-
^oddMAP
-
^oddMETA
-
^oddPKG
-
^oddPROC
-
^oddPROJECT
-
^oddSQL
-
^oddStudioDocument
-
^oddStudioMenu
-
^oddTSQL
-
^oddXML
-
^PH (制限は、Caché MVBasic を使用しているネームスペースにのみ適用されます)
-
^rBACKUP
-
^rINC (インクルード・ファイルを含む)
-
^rINCSAVE
-
^rINDEX
-
^rINDEXCLASS
-
^rINDEXEXT
-
^rINDEXSQL
-
^rMAC (MAC コードを含む)
-
^rMACSAVE
-
^rMAP
-
^rOBJ (OBJ コードを格納する)
-
^ROUTINE (ルーチンを格納する)
-
^SAVEDLISTS (制限は、Caché MVBasic を使用しているネームスペースにのみ適用されます)
-
^SPOOL (制限は、Caché スプーリングを使用しているネームスペースにのみ適用されます。"Caché 入出力デバイス・ガイド" の “スプール・デバイス” を参照してください)
-
^SYS (ドキュメントに記載されているようにノードを設定する場合を除く)
-
^z* および ^Z* (インターシステムズで使用するために予約されています)
ルーチンとラベル
ルーチンまたはラベルの名前について、ObjectScript では以下のルールが適用されます。
-
最初の文字は、英字かパーセント記号 (%) に限られます。
ルーチン名の先頭を % にした場合、その直後の文字には z または Z を使用します。“CACHESYS のカスタム項目” を参照してください。
-
残りの文字は、英字または数字にする必要があります (ただし、例外が 1 つあります。次の箇条書きを参照してください)。Unicode システムでは、これらの他の文字に、ASCII 128 より大きい任意の文字を使用できます。
-
ルーチンの名前には、1 つ以上のピリオド (.) 文字を含めることができますが、最初と最後の文字には使用できません。
-
名前は、大文字と小文字を区別します。
-
ルーチンの名前は、最初の 255 文字以内で一意 (該当するコンテキスト内) であることが必要です。
ラベルは、最初の 31 文字以内で一意 (該当するコンテキスト内) であることが必要です。
特定の %Z ルーチン名は、ユーザが使用するために予約されています。サブセクションを参照してください。
ユーザが使用するために予約されているルーチン名
Caché では、ユーザが使用するために、以下のルーチン名が予約されています。 これらのルーチンは存在しませんが、それらを定義した場合、これらのイベントが発生したときにそれらがシステムによって自動的に呼び出されます。
-
^ZWELCOME ルーチンは、ターミナルが起動したときに実行するカスタム・コードを含めることを目的としています。"ターミナルの使用法" を参照してください。
-
^ZAUTHENTICATE および ^ZAUTHORIZE ルーチンは、認証および承認のためのカスタム・コードを含めることを目的としています (代行認証 と 代行承認 をサポートするため)。このようなルーチンのために、Caché にはテンプレートが用意されています。"Caché セキュリティ管理ガイド" を参照してください。
-
^ZMIRROR ルーチンは、Caché ミラーリングを使用する場合の、フェイルオーバー動作をカスタマイズするためのコードを含めることを目的としています。"Caché 高可用性ガイド" を参照してください。
-
^%ZSTART および ^%ZSTOP ルーチンは、ユーザ・ログインなどの特定のイベントが発生したときに実行されるカスタム・コードを含めることを目的としています。それらを定義した場合、これらのイベントが発生したときにそれらがシステムによって呼び出されます。"Caché 専用のシステム/ツールおよびユーティリティ" の “^%ZSTART ルーチンと ^%ZSTOP ルーチンによる開始動作と停止動作のカスタマイズ” を参照してください。
-
%ZLANGV00、および名前が %ZLANG で始まる他のルーチンは、カスタム変数、コマンド、および関数を含めることを目的としています。"Caché 専用のシステム/ツールおよびユーティリティ" の “^%ZLANG ルーチンによる言語の拡張” を参照してください。
-
^%ZJREAD ルーチンは、^JCONVERT ルーチンを使用する場合にジャーナル・ファイルを操作するためのロジックを含めることを目的としています。"Caché データ整合性ガイド" の “ジャーナリング” を参照してください。
クラス
どのクラスも、完全クラス名は packagename.classname の形式です。
クラス名のルールは、以下のとおりです。
-
packagename (パッケージ名) および classname (短いクラス名) は英字で始まる必要があります。
-
packagename にはピリオドを含めることができます。
その場合、ピリオドの直後の文字は英字にする必要があります。
packagename のピリオドで区切られた各部は、サブパッケージ名として扱われ、一意性のルールに従います。
-
残りの文字は、英字または数字にする必要があります。
Unicode システムでは、これらの他の文字に、ASCII 128 より大きい文字も使用できます。
-
パッケージ名と短いクラス名は一意である必要があります。同様に、サブパッケージ名は、親パッケージ名内で一意である必要があります。
各クラスを定義したときに使用した大文字と小文字はシステムで保持され、クラス定義に指定した大文字と小文字に完全に一致させる必要があります。ただし、大文字と小文字のみが違う 2 つの識別子を指定することはできません。例えば、識別子 id1 と ID1 は一意性を保つ目的からは同一と見なされます。
-
以下のように長さの制限があります。
-
パッケージ名 (すべてのピリオドを含む) は最初の 189 文字内で一意である必要があります。
-
短いクラス名は最初の 60 文字内で一意である必要があります。
完全なクラス名は、クラス・メンバの個別の長さ制限に寄与します。次のセクションを参照してください。
-
回避する必要があるクラス名
永続クラスについては、クラスの短い名前として SQL 予約語を使用しないでください。
クラスの短い名前として SQL 予約語を使用する場合、そのクラスに対して SqlTableName キーワードを指定することが必要になります。また、短いクラス名と SQL テーブル名の間に不一致があると、将来コードを読むときに注意が必要になります。
SQL 予約語のリストは、"Caché SQL リファレンス" の “予約語” を参照してください。
クラス・メンバ
作成するクラス・メンバについては、その項目の名前が範囲指定されていない限り、以下のルールに従う必要があります。
-
名前は、英字かパーセント記号 (%) で始まる必要があります。
SQL に投影されるクラス・メンバについては、その他の考慮事項があります (例えば、このメンバには永続クラスのほとんどのプロパティが含まれます)。最初の文字が % である場合、2 番目の文字は Z または z である必要があります。
-
残りの文字は、英字または数字にする必要があります。Unicode システムでは、これらの他の文字に、ASCII 128 より大きい文字も使用できます。
-
メンバ名は (該当するコンテキスト内で) 一意である必要があります。
クラスを定義したときに使用した大文字と小文字はシステムで保持され、クラス定義に指定した大文字と小文字に完全に一致させる必要があります。ただし、2 つのクラス・メンバに、大文字と小文字のみが違う名前を指定することはできません。例えば、識別子 id1 と ID1 は一意性を保つ目的からは同一と見なされます。
-
メソッドまたはプロパティ名は最初の 180 文字内で一意である必要があります。
-
プロパティの名前の長さと、そのプロパティのインデックスの名前の長さを合わせた長さは、180 文字を超えてはいけません。
-
各メンバの完全な名前 (未修飾のメンバ名および完全なクラス名を含む) は、220 文字以下である必要があります。
-
2 つのメンバに同一の名前を付与しないでください。予測できない結果となる可能性があります。
リリース 2012.2 以降、メンバ名の範囲を指定することができます。範囲指定したメンバ名を作成するには、名前の最初と最後の文字に二重引用符を使用します。これにより、範囲指定しない場合には許可されない文字を名前に含めることができます。以下はその例です。
Property "My Property" As %String;
回避する必要があるメンバ名
永続クラスについては、メンバの名前として SQL 予約語を使用しないでください。
これらの名前の 1 つに SQL 予約語を使用すると、そのクラスを SQL に投影する方法を指定するときに余分な作業が必要になります。例えば、プロパティの場合、SqlFieldName キーワードを指定する必要があります。また、クラスの識別子と SQL の識別子の間に不一致があると、将来コードを読むときに注意が必要になります。
SQL 予約語のリストは、"Caché SQL リファレンス" の “予約語” を参照してください。このリストには、%UPPER や %CONTAINS のように、名前が % で始まる項目が数多く含まれている点に注目してください。このような項目は、SQL に対する InterSystems 拡張機能です。将来のリリースで、その他の拡張機能が追加される可能性もあります。
CACHESYS のカスタム項目
CACHESYS データベースに項目を作成できます。Caché アップグレードをインストールすると、このデータベースがアップグレードされます。このアップグレード中に、カスタム項目の名前付け規約に従っていないと、いくつかの項目が削除されます。
項目が上書きされないようにこのデータベースにコードまたはデータを追加するには、以下のいずれかを実行します。
-
%SYS ネームスペースに移動し、項目を作成します。このネームスペースの場合、既定のルーチン・データベースおよび既定のグループ・データベースは、どちらも CACHESYS です。以下の名前付け規約を使用して、項目がアップグレード・インストールの影響を受けないようにします。
-
クラス : パッケージを Z または z で始めます。
-
ルーチン : 名前を Z、z、%Z、または %z で始めます。
-
グローバル : 名前を ^Z、^z、^%Z、または ^%z で始めます。
-
-
どのネームスペースでも、以下の名前で項目を作成します。
-
ルーチン : 名前を %Z または %z で始めます。
-
グローバル : 名前を ^%Z または ^%z で始めます。
ネームスペースの標準マッピングにより、これらの項目は CACHESYS に書き込まれます。
-
MAC コードとインクルード・ファイルはアップグレードによる影響を受けません。