[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
として宣言されています。