正準木立表現

正準木立表現

[1] グローブは抽象データ表現であり、 グローブを処理するシステムは内部データ構造にグローブをそのまま反映させる必要はありません。 しかし、共通のグローブ表現形式があれば検証、虫取り、 応用間情報交換などに有用です。そのため、 グローブやハイパーグローブを一意に表現できる正準グローブ表現 (canonical grove representation) (CGR) 文書型が定義されています。

正準グローブ表現文書型は HyTime 体系から派生した SGML文書型です。ただし、節点特性の値が異なる場合にのみ異なる文書となるような制約が加えられています。 ですから、正準グローブ表現文書は SGML 文書として扱うこともできますが、 単純な文字列として同一性を確かめることもできます。 また、多くのプログラム言語の標準の文字列構文解析機能を使って構文解析できるようにも配慮されています。

[2] 仕様書:

要素型

[3] 正準グローブ表現文書型では、次の要素型が定義されています ISO/IEC 10744:1997 A.4.5.1

grove
1つのグローブを表します。 (node, urefloc*)
node
1つの節点を表します。 (nodeprop*) id 属性 (必須, ID) は節点の識別子です。 class 属性 (必須, NAME) は節点の規格参照具象構文級名です。
nodeprop
節点の1つの特性(値)を表します。 内容は特性値です。節点並びは節点の識別子を空白で区切った並びとして表現します。 ((#PCDATA | slsep | node)* (nodenoderelsubnode の場合のみ。)) datatype 属性 (必須, NAME) は特性のデータ型の規格参照具象構文名を、 rcsnm 属性 (必須, NAME) は特性の規格参照具象構文名を、 noderel 属性 (必須) は特性の節関係型 (subnode, irefnode, urefnode, primitive のいずれか) を表します。 isnull 属性 (真偽値属性) は特性値が null の時に指定します。
urefloc
他のグローブの節点の番地を表します。 (#PCDATA) 正準グローブ表現文書がハイパーグローブとは独立に生成された場合は、 節点番地名不詳を表す文字列 UNKNOWN を内容とします。ハイパーグローブ全体の正準グローブ表現文書生成過程でこの文書が生成された場合には、 参照された節点を含んでいる正準グローブ表現文書の節点の識別子を内容とします。 id 属性 (ID) は必須です。 locsrc 属性 (ENTITY) は必須です。 この要素型は特性位置番地要素形式 (proploc 要素形式) から派生しています。 HyTime 属性は nmsploc に固定です。 namespc 属性は elements に固定です。 notname 属性は ignore に固定です。
slsep
文字列並びで文字列を分離します。 (強制空要素)

具象構文

[4] 正準グローブ表現文書は、名前の長さ制限が 32 であることを除き、規格参照具象構文に従います ISO/IEC 10744:1997 A.4.5.1

体系

[6] 正準グローブ表現文書型は HyTime 体系 (体系仕様文書 ISO/IEC 10744:1997//NOTATION AFDR ARCBASE Hypermedia/Time-based Structuring Language (HyTime)//EN) から派生しています。 体系支援属性は次の通りです。

属性名固定属性値
体系的形式属性名HyTime
体系属性改名子属性名HyNames
体系文書要素形式名HyDoc
体系DTDHyTime
体系橋梁属性名HyBrid
体系自動写像ArcAuto
体系選択肢支援属性群locs
locsnmsploc

識別子

[5] 正準グローブ表現文書型の公式公開識別子ISO/IEC 10744:1997//DTD Canonical Grove Representation//EN です ISO/IEC 10744:1997 A.4.5.1

一般実体

[7] 正準グローブ表現文書型では、次の一般実体が定義されています。

実体名公開識別子記法
HyTimeISO/IEC 10744//DTD AFDR Meta-DTD Hypermedia/Time-based Structuring Language (HyTime)//ENCDATA ISO/IEC 10744//NOTATION AFDR Meta-DTD Notation//EN

実体名置換文
amp&
apos'
gt<
lt<

gt実体文は明らかに間違いです。

文書実体の表現

[8] 正準グローブ表現原始文書には、次の制限が課されます ISO/IEC 10744:1997 A.4.5.2

特性値の直列化

[9] 特性値は、次のように表現します ISO/IEC 10744:1997 A.4.5.2

enum
列挙値の規格参照具象構文名 (rcsnm) を、大文字で記述します。
string
文字データ内容をそのまま記述します。 但し、 <, >, ', & は一般実体参照で表します。
strlist
値を slsep 開始タグを挟めて並べます。
integer
10進整数文字列表現です。
compname
部品の規格参照具象構文名を、 大文字で記述します。
intlist
整数を空白で区切ります。
complist
部品名を空白で区切ります。
irefnode, urefnode
IDREF

特性が値を持たない (特性の条件が満たされない) 時は、 isnull 属性を値 ISNULL とします。

識別子

[10] 識別子は、次のように生成します ISO/IEC 10744:1997 A.4.5.3

  1. 計数器を零に初期化します。
  2. node 要素ごとに、 文字 X の後に計数器の値の10進数文字列表現をつけたものを識別子とします。計数器の値を1増やします。
  3. urefnode 孤ごとに、内部節同様の節識別子を生成します。 更に、その識別子を持った対応する urefloc 要素を生成します。 urefloc 要素は生成順に (つまり最初に参照された位置順に) 根要素の子供とします。 locsrc 属性は対応する正準グローブ表現文書の実体とします。 内容は参照先文書での節の識別子とします。 (この正準グローブ表現がグローブ単独ではなくハイパーグローブの一部として生成された場合。)

外部実体宣言の生成:

  1. 計数器を零で初期化します。
  2. 参照されている各グローブごとに (最初に参照された順に)、 CGR の後に計数器の値の十進整数文字列表現をつけて実体名とします。計数器の値を1増やします。
  3. 次の形式で実体宣言を生成します。
    <!ENTITY name PUBLIC "-//HYPERCGR//DOCUMENT name//EN" CDATA HyTime
    >
    (name は、2箇所とも実体名。)
    • なお、同じグローブ文書が違うグローブ文書から違う公開識別子で参照されることがあり得ます。
    • 正準ハイパーグローブ内の公開識別子から文書への写像を生成するのはシステム依存です。

関連

[33] XML正準形としては正準XML が定義されています。

メモ