SGML ( Standard Generalized Markup Language )において、エンティティはプリミティブ データ型であり、文字列を一意のエイリアス (ユーザー指定の名前など) または SGML予約語(など#DEFAULT) に関連付けます。エンティティは、SGML 文書の組織構造と定義の基礎となります。SGML 仕様では、キーワード修飾子とコンテキストによって区別される多数のエンティティ タイプが定義されています。エンティティ文字列の値は、プレーン テキスト、SGML タグ、および以前に定義されたエンティティへの参照など、さまざまな形式で構成できます。特定のエンティティ タイプは、外部文書を呼び出すこともできます。エンティティは参照によって呼び出されます。
エンティティタイプ
エンティティは一般またはパラメータとして分類されます。
- 一般エンティティはドキュメント コンテンツ内でのみ参照できます。
- パラメータエンティティは、ドキュメント タイプ定義(DTD)内でのみ参照できます。
エンティティはさらに解析済みと解析されていないものに分類されます。
- 解析されたエンティティにはテキストが含まれており、エンティティが参照されるとドキュメントに組み込まれて解析されます。パラメータ エンティティは解析されたエンティティのみになります。
- 解析されないエンティティにはあらゆる種類のデータが含まれており、それを参照すると、アプリケーションにはエンティティの存在が通知されるだけです。エンティティの内容は、テキストであっても解析されません。解析されないエンティティは外部にのみ存在します。
内部および外部のエンティティ
内部エンティティの値は、リテラル文字列、または同じドキュメントで定義されたマークアップとエンティティ (ドキュメント タイプ宣言やサブドキュメントなど) で構成される解析済み文字列です。一方、外部エンティティには外部ドキュメントを呼び出す宣言があるため、外部ドキュメント参照を解決するためにエンティティ マネージャーの介入が必要になります。
システムエンティティ
SYSTEM エンティティ宣言には、リテラル値が含まれる場合もあれば、オプションの識別子の組み合わせが含まれる場合もあります。オプションの識別子により、 SGMLパーサーはエンティティの文字列参照をリソース識別子として処理できます。また、オプションのPUBLIC識別子により、特定の表現とは無関係にエンティティを識別できます。SGMLのサブセットであるXMLでは、エンティティ宣言に識別子のない識別子を含めることはできません。
PUBLICSYSTEM
SGML文書エンティティ
外部エンティティが完全なSGML文書を参照する場合、呼び出し元の文書ではSGML文書エンティティと呼ばれます。SGML文書は、SGMLプロローグ(つまり、DTDとサブ文書)で定義されたSGMLマークアップを含むテキスト文書です。完全なSGML文書は、文書インスタンス自体だけでなく、プロローグと、オプションでSGML宣言(文書のマークアップ構文を定義し、文字エンコーディングを宣言する)で構成されます。[1]
構文
エンティティは、ドキュメントのドキュメント型定義(DTD) 内のエンティティ宣言によって定義されます。例:
<!ENTITY greeting1 "Hello world" >
<!ENTITY greeting2 SYSTEM "file:///hello.txt" >
<!ENTITY % greeting3 "¡Hola!" >
<!ENTITY greeting4 "%greeting3; は Hello を意味します!" >
この DTD マークアップは以下を宣言します。
- という名前の内部一般エンティティ
greeting1が存在し、文字列 で構成されますHello world。 - という名前の外部一般エンティティが存在し、 URI
greeting2によって識別されるリソース内にあるテキストで構成されます。file:///hello.txt - という名前の内部パラメータ エンティティ
greeting3が存在し、文字列で構成されます¡Hola!。 - という名前の内部一般エンティティ
greeting4が存在し、文字列 で構成されます¡Hola! means Hello!。
エンティティの名前はSGML 名の規則に従う必要があり、エンティティを参照できる場所には制限があります。
パラメータ エンティティは、エンティティ名を%と の間に配置することによって参照されます。;解析された一般エンティティは、エンティティ名を " &" と " ;" の間に配置することによって参照されます。解析されていないエンティティは、エンティティ名を ENTITY タイプとして宣言された属性の値に配置することによって参照されます。
上記の例の一般的なエンティティは、ドキュメント内で次のように参照される場合があります。
<content>
<info>「&greeting1;」は一般的なテスト文字列です。</info> <info> hello.txtの内容は次のとおりです: &greeting2; </info> <info>スペイン語では、&greeting4; </info> </content>
hello.txtファイルに次のテキストが含まれていると仮定すると、解析されると、このドキュメントは、次のように記述された場合と同じように下流のアプリケーションに報告されますSalutations。
<content>
<info>「Hello world」は一般的なテスト文字列です。</info> <info> hello.txtの内容は次のとおりです:挨拶</info> <info>スペイン語では、¡Hola!はHello!を意味します。 </info> </content>
デフォルトのエンティティが定義されていない限り、宣言されていないエンティティへの参照はエラーになります。例:
<!ENTITY #DEFAULT "このエンティティは定義されていません" >
追加のマークアップ構造とプロセッサ オプションは、エンティティが処理されるかどうか、また処理される方法に影響を与える可能性があります。たとえば、プロセッサはオプションで外部エンティティを無視する場合があります。
文字エンティティ
SGML およびその派生言語の標準エンティティ セットは、簡単に入力できない文字や、従来の文字エンコードで広くサポートされていない文字を使用する必要がある場合に、文書の作成を容易にするための記憶デバイスとして開発されました。このようなエンティティはそれぞれ、ユニバーサル文字セットの 1 つの文字のみで構成されます。数値文字参照を使用して任意の文字を参照できますが、文字エンティティ参照を使用すると、コード ポイントではなく名前で文字を参照できます。
たとえば、HTML 4 には、明示的に宣言する必要のない組み込みの文字エンティティが 252 個ありますが、XMLには 5 個しかありません。XHTMLには XML と同じ 5 個がありますが、DTD が明示的に使用される場合は、253 個になります ('これは、HTML 4 のものを超える追加のエンティティです)。
参照
注記
- ^ 「Web SGML と HTML 4.0 の説明 - 第 6 章」www.is-thought.co.uk。2009 年 2 月 5 日時点のオリジナルよりアーカイブ。
参考文献
- Goldfarb, Charles F. (編)。ISO 8879 レビュー: WG8 N1855。WG8 およびリエゾン、1996 年。
- Goldfarb, Charles F.、および Yuri Rubinsky (編)。SGMLハンドブック。オックスフォード大学出版局、1991 年。
外部リンク
- SGML におけるエンティティ管理
