[1] HyTime 字句模型記法 (HyLex) は、字句模型を記述するための方法の一種として ISO/IEC 10744:1997 で規定されている表記法です。
仕様書: ISO/IEC 10744:1997
[2] HyLex の構文は、基本的には SGML の内容模型の構文と同じですが、幾つかの違いがあります。
GRPO, GRPC
の代わりに DSO, DSC
を使って、一致字句模型を定義できます。HyLex 模型 := 模型群の内容真の模型群 := grpo 模型群の内容 grpc一致字句模型群 := dso 模型群の内容 dsc模型群の内容 := *ts 模型群の要素 *(*ts 接続子 模型群の要素) *ts模型群の要素 := 内容字句など [出現標識 / *(rni ORDER 辞書式順序名 / rni CHECK 追加字句制約名)] / rni NOT 内容字句など内容字句など := 内容字句 / 真の模型群 / 一致字句模型群内容字句 := 表記 / <以前に宣言された字句型名>接続子 := or / seq仕様書の文章をもとに ABNF にしてみました。
(一部 ts が抜けています。)
ISO 8879 に合わせて ts ですが、
たぶん引数実体参照は使えないので、実際には s
です。
(生成規則くらい規格に書いておいてほしいなあ。)
[11] 字句型が本質的に空白で分離した字句の並びであるときには、「正規化」模型を使用できます。
正規化模型はデータ属性 norm の値を
norm とします (既定値)。
非正規化模型は unorm とします。
[12] 正規化模型は、次の手順で非正規化模型に変換できます。
#ORDER SGMLCASE を置く
(SGMLCASE は ISO 8879:1986//NOTATION LEXORD Namecase substitution//EN)。#ORDER と #CHECK
は一致字句模型群に入れるが、出現標識は除く。s+ を挿入する。PLUS と REP のついた下位模型群を開く:(m)+ → ( (m), ( s+, (m) )* )(m)* → ( (m)?, ( s+, (m) )* )OR 群なら、
その一つ上に連続群を置く。s* を挿入する。[12] ISO/IEC 10744:1997 のマーク宣言の注釈にある、
属性やデータ内容の字句型の定義
(表記法注釈) で、 Lextype: の後に記述されているものは正規化模型
(),
norm=normUlextype: の後に記述されているものは非正規化模型
() です。norm=unorm
[7] HyLex の公開識別子は
ISO/IEC 10744:1997//NOTATION HyTime lexical model notation (HyLex)//EN
です。
[8] 属性:
| 名前 | 値の型 | 既定値 | 説明 |
norm | norm | unorm | norm | 正規化 |
altreps | |||
included | |||
superdcn |
[9] 宣言例:
<!NOTATION HyLex PUBLIC "ISO/IEC 10744:1997//NOTATION HyTime lexical model notation (HyLex)//EN"> <!ATTLIST #NOTATION HyLex norm (norm | unorm) norm %ga.common.attrib; >
[10] HyLex は一般体系
(ISO/IEC 10744:1997//DTD AFDR Meta-DTD General Architecture//EN)
で記法 HyLex として宣言されています。