標準汎用マークアップ言語(SGML)では、エンティティはプリミティブなデータ型であり、文字列を一意のエイリアス (ユーザー指定の名前など) または SGML の予約語(など#DEFAULT) に関連付けます。エンティティは、SGML 文書の構成構造と定義の基礎となります。SGML 仕様では、キーワード修飾子とコンテキストによって区別される多数のエンティティ型が定義されています。エンティティ文字列の値は、プレーンテキスト、SGML タグ、および/または以前に定義されたエンティティへの参照など、さまざまな要素で構成されます。特定のエンティティ型は、外部文書を呼び出すこともできます。エンティティは参照によって呼び出されます。
エンティティは、一般エンティティとパラメータエンティティに分類されます。
エンティティはさらに、解析済みか未解析かに分類されます。
内部エンティティの値は、リテラル文字列、または同じドキュメント内で定義されたマークアップとエンティティ(ドキュメント型宣言やサブドキュメントなど)を含む解析済み文字列のいずれかです。一方、外部エンティティは外部ドキュメントを呼び出す宣言を持つため、外部ドキュメント参照を解決するにはエンティティマネージャの介入が必要となります。
エンティティ宣言は、リテラル値を持つ場合もあれば、オプションのSYSTEM識別子(SGMLパーサーがエンティティの文字列参照をリソース識別子として処理できるようにするもの)と、特定のPUBLIC表現とは無関係にエンティティを識別するオプションの識別子の組み合わせを持つ場合もあります。SGMLのサブセットであるXMLでは、エンティティ宣言は識別子なしで識別子を持つことはできません。PUBLICSYSTEM
外部エンティティが完全な 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; means Hello!" >このDTDマークアップは、以下の内容を宣言しています。
greeting1が存在し、文字列で構成されますHello world。greeting2で識別されるリソースに含まれるテキストで構成される、という名前の外部一般エンティティが存在します。file:///hello.txtgreeting3存在し、文字列で構成されます¡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!は「こんにちは!」という意味です。 </info> </content>デフォルトエンティティが定義されていない限り、未宣言のエンティティへの参照はエラーとなります。例:
<!ENTITY #DEFAULT "このエンティティは定義されていません" >追加のマークアップ構造やプロセッサオプションによって、エンティティの処理方法や処理の有無が影響を受ける場合があります。例えば、プロセッサは外部エンティティをオプションで無視することができます。
SGMLとその派生言語の一部で使用される標準エンティティセットは、入力しにくい文字や従来の文字エンコーディングで広くサポートされていない文字を使用する必要がある場合に、文書作成を容易にするための覚えやすい手段として開発されました。このようなエンティティはそれぞれ、ユニバーサル文字セットから1つの文字のみで構成されます。数値文字参照を使用すればどの文字でも参照できますが、文字エンティティ参照を使用すると、コードポイントではなく名前で文字を参照できます。
例えば、HTML 4には明示的に宣言する必要のない組み込み文字実体252個がありますが、XMLには5個しかありません。XHTMLにはXMLと同じ5個がありますが、DTDを明示的に使用すると、253個になります('はHTML 4の文字実体を超える追加の文字実体です)。