コンパートメントモードワークステーションのラベル作成: エンコード形式

第 8 章 適切なラベル判定を行う

この章では、コンパートメントとマーキングを使用してシステムが適切なラベル判定を行う方法について説明します。ここでは、エンコーディングファイルに記述するための正しい形式を使用した例により、第 1 章「概要」で説明した各ラベル判定の例を発展させて説明します。次に示す例では、マーキングビットだけを取り上げますが、コンパートメントビットを使用してもかまいません。ラベル判定という観点からコンパートメントビットとマーキングビットに違いはありません。

通常の語句

例 8–1 には、必ずしも階層関係を持たない通常の (インバースではない) 語句のエンコーディングを示します。マーキング (コンパートメント) ビットが 1 つ必要ですが、このビットを初期マーキング (コンパートメント) ビットとして指定してはいけません (ごくまれではあるが、この語句が、一部の格付けと常に一緒に存在するデフォルト語句である場合は例外)。ここで示す例は、人が読める形式の語句と内部ビット形式との関係を示すもっとも単純な一般的な例です。通常の語句は複数のビットに関連付けたり、ほかの語句と階層関係を持ったりすることもできます。


例 8–1 通常の語句

name= word1;  markings= 0; 

付録 B 「説明付きのエンコーディングサンプル」には、情報ラベルの通常の語句の例として、CC、SB、bravo1、bravo2、bravo3、B、alpha1、alpha2、alpha3、A、project x、LIMIDIS、project y、LIMIDIS、ORGON org x、ORGON org y、D/E、all eyes、p1 eyes only、p2 eyes only、WNINTEL、NOFORN を挙げています。

インバース語句

例 8–2 は、必ずしも階層関係を持つとは限らないインバース語句のエンコーディングを示します。マーキング (コンパートメント) ビットが 1 つ必要であり、第 3 章「格付けのエンコーディング」で示したように、このビットは初期マーキング (コンパートメント) ビットとして指定する必要があります。ここで示す例は、人が読めるインバース語句と内部形式との関係を示すもっとも単純な一般的な例です。インバース語句は複数のビットに関連付けたり、ほかの語句と階層関係を持ったりすることができます。


例 8–2 インバース語句

name= word2;   markings= ~1;

付録 B 「説明付きのエンコーディングサンプル」には、情報ラベルのインバース語句の例として、bravo4、charlie、RELCNTRY1、RELCNTRY2、RELCNTRY3 を挙げています。

語句の階層

語句同士の階層を確立することは、変換ソフトウェアの非常に重要な機能です。なぜなら、この変換ソフトウェアは、同じ階層に属する 2 つの語句をラベル内に一緒に表示できないようにするからです。変換ソフトウェアは、次の 2 つの条件が両方とも満たされているとき、語句 W1 と W2 との間の階層関係を推測します。1) W1 に明示的に指定したビットが W2 に明示的に指定したビットをすべて含んでいるとき、2) W1 に指定したビットの値が W2 の同じビットの値より優位で、かつ W2 で未指定のビットが 0 であるとき。次に示すいくつかの例を使用して、この概念を明らかにします。

例 8–3 は、階層での 2 つの通常の語句のエンコーディングを示しています。word5 は、word4 より階層の上位に位置します。これは、通常の語句の階層をエンコーディングするもっとも一般的な方法です。すなわち、1) 階層関係で上位の語句から順に記述し、2) エンコードされた値が 0 のビットは (~ を使用して) 明示的に記述しません。word 4 のビット 4 が 0 であることを、~ を使用して明示的に指定する必要はありません。なぜなら、ビット 4 は、初期マーキングビットで 1 と指定されていないからです。word 4 のビット 4 を 0 と指定しない場合は、エンコーディングで word 4 を word 5 の後に記述しなければなりません。この語順が逆の場合、ビット 3 およびビット 4 が 1 に設定されたラベルの人が読める形式には word 4 が表示されます。なぜなら、word 4 と 5 のビットの内部形式はまったく同じであるにもかかわらず、変換ソフトウェアが最初に word 4 を見つけるからです。


例 8–3 階層関係を持つ 2 つの通常の語句

name= word5;   markings= 3  4;
name= word4;   markings= 3;

例 8–4 は上記の例と同じですが、相違点は、~4 の指定は必要ないものの、代替表現としては正しいということです。ビット 4 はインバースビットではないため、初期マーキングビットで 1 を指定する必要はありません。


例 8–4 通常の語句の代替表現

name= word5;  markings= 3  4;
name= word4;  markings= 3 ~4;

例 8–5 は上記の例と同じですが、語句の順序が逆になっています。この例は、~4 を指定しているため正しく動作します。上記と同様、ビット 4 はインバースビットではないため、初期マーキングビットで 1 を指定する必要はありません。


例 8–5 通常の語句を逆の順序で表現する

name= word4;  markings= 3 ~4;
name= word5;  markings= 3  4;

例 8–6 はインバース語句の階層を示したもので、階層では word 12 は word 13 の上位に位置します。この例では、ビット 3 とビット 4 がインバースビットであり、初期マーキングビットとして 1 を指定しています。


例 8–6 インバース語句の階層

name= word12;  markings= 3 ~4;
name= word13;  markings= ~3  ~4;

例 8–7 では、2 つの語句の階層関係を表していません。ビット 4 はインバースビットであり、初期マーキングビットで 1 と指定されています。word 12 は、階層関係において word13 の上位に位置するものではありません。なぜなら、word 12 に指定したビット (3) は、word 13 に指定したビット (3 と 4) を含んでいないからです。word 13 は、階層関係において word 12 の上位ではありません。word 13 に指定したビットの値 (ビット 3 の 1 とビット 4 の 1) は、word 12 のビット 3 とビット 4 の値 (それぞれ、1 と 0。なお、ビット 4 の 0 は暗黙に仮定される) より優位ではないからです。


例 8–7 階層関係がない

name= word12;  markings= 3;
name= word13;  markings= ~3  ~4;

階層関係にあるすべてのビットを指定することもできます。すなわち、暗黙に 0 にしておくビットはありません。最初の例で示したように、暗黙的に 0 を仮定するようにすると、通常のビットを含む階層または階層の一部に使えるので便利です。階層関係のある語句にインバースビットが存在する場合、階層でその語句より上位に位置するすべての語句は、インバースビットを明示的に指定する必要があります。

付録 B 「説明付きのエンコーディングサンプル」には、階層関係を持つ情報ラベルの例として、CC、SB、bravo1、bravo2、bravo3、bravo4、B、alpha1、alpha2、alpha3、A、all eyes、p1 eyes only、p2 eyes only、WNINTEL、NOFORN、REL CNTRY1、REL CNTRY2、および REL CNTRY3 を挙げています。また、付録 B 「説明付きのエンコーディングサンプル」には、これらの語句同士の階層関係を表現した図も記載しています。

合成語句

例 8–8 には、合成語句 word9 を示します。これは、word7 と word8 を合成したものです。この例では、初期マーキングビットでビット 6 とビット 7 が 1 に指定されていないことを前提としています。このエンコーディングでは、word7 がすでに含まれているラベルに word8 を追加すると、どちらの語句も自動的に word9 に置換されます。この例では、合成語句をほかの語句の前に指定することが重要です。word 9 を word 7 と word 8 の後ろに指定すると、内部形式から変換された人が読める形式のラベルに word 9 は表示されません。逆に、word 7 と word 8 が表示され、word 9 はこれらの語句のエイリアスとなります。


例 8–8 合成語句

name= word9;  markings= 6  7;
name= word7;  markings= 6;
name= word8;  markings=     7;

例 8–9 は、合成語句をエンコーディングする別の方法を示しています。この例では、word 7 と word 8 のエンコーディングでは明示的に 0 ビット (~6 と ~7) を指定しているため、語句の順序は問題ではありません。0 ビットはインバースビットではないので、初期マーキングビットで 1 と指定する必要はありません。


例 8–9 合成語句の代替方法

name= word7;  markings= 6 ~7;
name= word8;  markings= ~6 7;
name= word9;  markings= 6  7;

指定方法判定という観点からは、この代替指定方法は前の例と同じです。ただし、この例と前の例との重要な機能上の相違点は、変換ソフトウェアの動作方法です。前の例では、word8 が word7 を含んでいるラベルに追加される場合 (逆の場合も同様)、ラベルは、word7 や word8 ではなく word9 を含むように変更されました。しかし、この例では、明示的に 0 ビットを指定しているため、word7 と word8 のエンコーディングが相互に排他的になり、第 7 章「エンコーディングを指定する際の一般的な考慮事項」で説明するように、たとえば次の組み合わせ制約によって、ラベル上に同時に表示されないようにする必要があります。

word7 ! word8

したがって、すでに word 7 が含まれているラベルに word 8 を追加しても、上記の例のように、それらの語句が word 9 に置換されることはなく、word 8 の追加が無視されます。なお、どちらの例でも、word 7 または word 8 のどちらか一方が含まれているラベルに word 9 を追加すると、その語句が word 9 に置換されます。

付録 B 「説明付きのエンコーディングサンプル」では、合成語句の例として、all eyes (p1 eyes only と p2 eyes only の合成語句) を挙げています。

階層関係を持たない合成語句

例 8–10 には、階層関係を持たない合成語句の word12 を示しています。これは、word10 と word11 の合成語句です。この例では、指定したどのビットも初期マーキングビットで 1 に指定されていないことを前提としています。このエンコーディングでは、word 10 がすでに含まれているラベルに word 11 を追加すると (この逆も同様)、word 12 が自動的にラベルに追加されます。階層関係を持たない合成語句は、常にその合成語句の元となる語句の前に指定する必要があります。なお、組み合わせ制約を指定しても、階層関係を持たない合成語句が、合成語句の元となる語句から組み合わされることを防ぐことはできません。


例 8–10 階層関係を持たない合成語句

name= word12;  markings= 6 7;
name= word10;  markings= 0 6;
name= word11;  markings= 1 7;

複雑な例

上述したタイプの語句の組み合わせによっては、さらに複雑な例を示すことができます。例 8–11 は、階層関係を持つ 2 つの語句を示していますが、一方がインバース語句です。この例の判定結果は興味深いもので、インバース語句 (word 13) を、word 13 が含まれていない任意のラベルと組み合わせると、word 13 は、階層でこのインバース語句より上位にある語句 (word 14) に置換されます。word 13 はインバース語句なので、ビット 9 は、初期マーキングビットで明示的に 1 と指定する必要があります。name= word14; markings= 8 9;


例 8–11 インバース語句を含む、階層関係にある 2 つの語句

name= word13;  markings= 8 ~9; 

付録 B 「説明付きのエンコーディングサンプル」では、この例と同様な複雑な情報ラベル語句の例として bravo4 を示しています。bravo4 は階層で bravo2 より下位に位置するインバース語句です。