文字符号順比較は,単に文字符号を比較するだけなので,日本語を文字符号順比較で並べた場合,あまり好ましい結果は得られません。それに対して辞書順比較は,日本語の辞書や事典における自然な並びを実現したものです。
たとえばある辞書では,次のように見出しが並んでいます。
このような順序で並べるには,文字符号順ではうまくいきません。辞書順で並べると,このように並べることができます。辞書順比較は,このように,主にかなによる「読み」を並べるためのものです。氏名などの読みを「おおの まんたろう」のように空白で区切って辞書順で並べると,姓と名の部分を別々に比較するので,うまく並べることができます。
また,DBPro の辞書順では,英字その他の欧文文字,記号などについても大文字/小文字,全角/半角の区別を別グループとせず,それらの文字の大文字/小文字/全角文字/半角文字が隣り合うように並べられます。
漢字については,文字符号順比較と同じです。
辞書順比較について,より詳しくは文字列比較についてを参照してください。
DBPro で行なう文字列比較には,次の3通りがあります。
ここでは,これらについての専門的な解説と,それに付随する基本的な前提となる定義などを述べます。これらについて興味のない方は,読む必要はありません。
DBProで扱う文字列に含まれる文字は,Windowsで扱えるシフトJISコードセットです。これらは次のよう大別されます。
半角文字 | (SBCS:Single Byte Character Set) | |
全角文字 | (DBCS:Double Byte Character Set) | |
外字 | (EUDC:End User Defined Character) |
DBProは,多くの場面で文字をJISコードとしても扱っています。シフトJISコードの全角文字はすべてJISコードに変換されて解釈される必要があります。このとき,JISでは未定義のIBM拡張文字等の拡張コードは便宜的に 0x7F21 以降に変換されます(以降 0x〜 は十六進数を示します)。したがって,7ビット符号系のJISコードとしてはあり得ない最上位ビットが立つことがあります。この文字符号位置は,文字符号順比較において,文字の大小判定を簡単に行なうために選ばれました。DBProで扱う全角のJISコードは,次のような範囲となります。
21 | 7E | ||||||||||
|
|
半角文字は上位バイトに 0 を補うことによって全角文字と同等に扱います。半角文字は次のように分類されます。
制御文字 | 0x00〜0x08,0x0E〜0x1F,0x7F | |
空白文字 | 0x09〜0x0D,0x20,0xA0 | |
記号 | 0x21〜0x2F,0x3A〜0x40,0x5B〜0x60,0x7B〜0x7E,0xA1〜0xA5 | |
数字 | 0x30〜0x39 | |
英大文字 | 0x41〜0x5A | |
英小文字 | 0x61〜0x7A | |
カタカナ | 0xA6〜0xDF |
全角文字は次のように分類されます。(文字の名前はJISとは異なっているかも知れません)
空白文字 | 0x2121 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
記号 | 0x2122〜0x232F,0x2D21〜0x2D7E,0x7C71〜0x7C7E,0x9321〜0x933C ただし以下の 10 文字を除く
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
数字 | 0x2330〜0x2339 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
英大文字 | 0x2341〜0x235A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
英小文字 | 0x2361〜0x237A | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ひらがな | 0x2421〜0x2473,および上の (a) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
カタカナ | 0x2521〜0x2576,および上の (b) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ギリシャ大文字 | 0x2621〜0x2638 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ギリシャ小文字 | 0x2641〜0x2658 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
キリール大文字 | 0x2721〜0x2741 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
キリール小文字 | 0x2751〜0x2771 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
罫線素片 | 0x2821〜0x2840,0x2C24〜0x2C6F | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
漢字 | 0x3021〜0x7C70,0x933D〜0x972C,および上の (c) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
外字 | 0x7F21〜0x927E |
これらの分類に漏れている文字符号はすべて未定義文字であり,それらは制御文字と同等に扱われます。
文字符号順比較は,文字列に含まれるJISコードを単純に大小比較するだけです。したがって,半角は全角より小さい。
基本つづり順比較とは,'き','ぎ','キ','キ' など,基本的なつづりとして同じ文字をすべて同一視して比較します。このために,与えられた文字列は前処理で基本つづり文字列に変換されます。
この基本つづり変換は次のように行なわれます。このとき,2.以降のすべての変換情報は保存されます。ただし,2.以降が,ここに示された順序で処理されるわけではありません。ほとんど同時に処理されてしまいます。
$ | → | $ | |
5 | → | 5 | |
a | → | a | |
チ | → | チ |
a | → | A | |
q | → | Q | |
θ | → | Θ | |
д | → | Д |
ヂ | → | チ | |
チ゛ | → | チ | |
ぱ | → | は | |
は゜ | → | は | |
ヴ | → | ウ | |
a゛ | → | a゛ |
ぁ | → | あ | |
ャ | → | ヤ | |
ッ | → | ツ | |
ヵ | → | カ | |
ヶ | → | ケ |
チ | → | ち | |
ヨ | → | よ |
まー | → | まあ | ||
あっー | → | あっー | … (注1) | |
んー | → | んん | … (注2) | |
かーー | → | かああ | ||
かゝー | → | かかあ | ||
漢ー | → | 漢ー | ||
@ー | → | @ー |
ケヽ | → | ケケ | |
ケヽヽ | → | ケケケ | |
ケゝ | → | ケゝ | |
けヽ | → | けヽ | |
けゞ | → | けげ | |
げゝ | → | げけ | |
げゝゞ | → | げけげ | |
げゝゝ゛ | → | げけげ | |
げゝー | → | げけえ | |
みゞ | → | みゞ | |
みゝ゛ | → | みみ゛ | |
みゞー | → | みゞー | |
別々 | → | 別別 | |
別ゝ | → | 別ゝ | |
むーゝ | → | むうゝ | |
はゝ゛ | → | はば | |
はゞ゛ | → | はば゛ | |
はゝ゜ | → | はぱ | |
はゝ゜ー | → | はぱあ | |
かゝ゜ | → | かか゜ | |
んゝ | → | んん | |
ぎょゝ | → | ぎょょ | |
あっゝ | → | あっっ | |
☆ゝ | → | ☆ゝ |
これらの変換後に,文字を次の種類に分類します。異なる種類の文字間の比較では,上が小さく,下が大きいとみなされます。同じ種類内では基本つづり文字によって文字符号順で比較されます。
↑ | 空白文字 (削除されてしまうので実際には現れない) |
小 | 罫線素片 |
| | 記号 |
| | ギリシャ文字 |
| | キリール文字 |
| | 数字 |
| | 英字 |
| | かな文字 |
大 | 漢字 |
↓ | 外字 |
この順序は,次のような基本的な考えから決定されています。
辞書順比較は,与えられた文字列から逐次単語切出しを行ない,切り出された単語ごとに基本つづり順比較を行なって大小を判定します。
単語切出しは,空白文字(制御文字を含む)が現れたとき,および基本つづり順比較で用いる文字種が変化した場所で行なわれます。ただし,連続する空白文字は区切りに使用された後,捨てられます。また,先行後行する空白も捨てられます。
単語に対する基本つづり順比較で等しかった場合,基本つづりへの変換過程の情報を加味して次の比較規則が,次の順序で独立に単語単位で適用されます。このとき,異なる種類に関する比較間での順序は無意味です。
これらで順序が確定できない場合は,さらに原文字列の文字符号順で比較されます。
- 注意:
- これらの順序定義は,DBProで決めたものであって一般的に認められたものではありません。むしろ,国語学をはじめとして社会的に認められた順序というものは存在せず,市販の辞典などの間でも食い違いが多く見られます。
- 注意:
- 単語切出しがこのような単純な規則に則っているということは,辞書順比較が漢字かな混じり文を想定していないことを意味しています。つまり,「送る」とか「茅ヶ崎」などが途中で切れてしまうことに注意が必要です。
- 注意:
- 外字を漢字と異なる種類とみなすと,単語がそこで切れてしまいます。これによって,外字を漢字の拡張として用いている場合に,辞書順比較の結果が期待に背くことがあるかも知れません。