本家「@IT」にはない内容をエンジニアライフで技術紹介するコラム。広く議論する場になることを目指します。

第053回_EntityDecl_実体宣言

»
前回に引き続いてEntityDeclについて議論します。
今回は、実体宣言を詳しく見ていきます。

実体宣言のW3Cの勧告内容

ここでは、実体における内部実体と外部実体を説明しています。
尚、実体宣言の中に外部識別子の説明がありますが、今回は解説しません。

まずは、W3Cの勧告の内部実体について読みます。
----W3C勧告----
4.2 Entity Declarations

[Definition: Entities are declared thus:]

Entity Declaration

[70] EntityDecl ::= GEDecl | PEDecl
[71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>'
[72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
[73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)
[74] PEDef ::= EntityValue | ExternalID

The Name identifies the entity in an entity reference or, in the case of an unparsed entity, in the value of an ENTITY or ENTITIES attribute. If the same entity is declared more than once, the first declaration encountered is binding; at user option, an XML processor may issue a warning if entities are declared multiple times.

4.2.1 Internal Entities

[Definition: If the entity definition is an EntityValue, the defined entity is called an internal entity. There is no separate physical storage object, and the content of the entity is given in the declaration.] Note that some processing of entity and character references in the literal entity value may be required to produce the correct replacement text: see 4.5 Construction of Entity Replacement Text.

An internal entity is a parsed entity.
----W3C勧告----
----日本語訳----
4.2 実体宣言

[定義: 実体は次のように宣言される]

実体宣言

[70] EntityDecl ::= GEDecl | PEDecl
[71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>'
[72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
[73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)
[74] PEDef ::= EntityValue | ExternalID

Nameによって実体参照でその実体を識別する。
もしくは、NameによってENTITY属性かENTITIES属性の値となる解析対象外実体を識別する。
もしいくつかの実体が一回以上宣言された場合、、最初の宣言をバインドする。;
複数回同じ名前の実体が宣言された場合、ユーザオプションによって、XMLプロセッサは警告をしても良い。

4.2.1 内部実体

[定義: もし実体の定義がEntityValueであるなら、定義された実体は内部実体と呼ばれる。
内部実体の内容は、異なる物理的な記憶媒体にはなく、宣言の中にある。]
リテラル実体値を持つ実体参照と文字参照の処理は正しい置換テキストを生成する必要があることに注意せよ。
: 4.5 実体の置換テキストの構築 を参照

内部実体は解析対象実体である。
----日本語訳----

続いて、W3Cの勧告の外部実体について読みます。
----W3C勧告----
4.2.2 External Entities

[Definition: If the entity is not internal, it is an external entity, declared as follows:]

External Entity Declaration

[75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral
[76] NDataDecl ::= S 'NDATA' S Name [VC: Notation Declared]

If the NDataDecl is present, this is a general unparsed entity; otherwise it is a parsed entity.

Validity constraint: Notation Declared

The Name must match the declared name of a notation.
----W3C勧告----
----日本語訳----
4.2.2 外部実体

[定義: 実体が内部実体でない場合、その実体は外部実体であり、次のように宣言する。]

外部実体宣言

[75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral
[76] NDataDecl ::= S 'NDATA' S Name [VC: 記法宣言]

NDataDeclがある場合、これは一般解析対象外実体となる。; そうでない場合、解析対象実体となる。

妥当性制約: 記法宣言
 Nameは宣言された記法名にマッチしなければならない。
----日本語訳----

実体宣言の仕様整理

内部・外部や解析対象・解析対象外実体については、妥当性制約を除いて、第51回のコラムで説明済みです。

-解析対象外実体の妥当性制約
解析対象外実体を示すNDataDeclのNameは宣言済みである必要があります。

構文解析器はこの妥当性を確認するために、次のような処理を行います。

 1.WORD (NDATA)を処理した次のNameトークンの文字列をKeyとして取得する
 2.Keyを使って、Notationテーブルを検索する
 3.Keyの記法が有る場合
  確認OK
 4.Keyの記法が無い場合
  妥当性制約違反

解析対象実体のW3Cの勧告内容

----W3C勧告----
4.3 Parsed Entities
4.3.1 The Text Declaration

External parsed entities should each begin with a text declaration.

Text Declaration

[77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'

The text declaration must be provided literally, not by reference to a parsed entity. The text declaration must not appear at any position other than the beginning of an external parsed entity. The text declaration in an external parsed entity is not considered part of its replacement text.
----W3C勧告----
----日本語訳----
4.3 解析対象実体
4.3.1 テキスト宣言

外部・解析対象実体はテキスト宣言で始めるべきである。

テキスト宣言
[77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'

テキスト宣言は、解析対象実体への参照によってではなく、直接的に提供しなければならない。
テキスト宣言は、外部解析対象実体の始まり以外のあらゆる位置に記述してはいけない。
外部実体の中に記述したテキスト宣言は、置換テキストの一部とはみなさない。
----日本語訳----

----W3C勧告----
4.3.2 Well-Formed Parsed Entities

The document entity is well-formed if it matches the production labeled document. An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. All external parameter entities are well-formed by definition.

Note:
Only parsed entities that are referenced directly or indirectly within the document are required to be
well-formed.

Well-Formed External Parsed Entity

[78] extParsedEnt ::= ( TextDecl? content ) - ( Char* RestrictedChar Char* )

An internal general parsed entity is well-formed if its replacement text matches the production labeled content. All internal parameter entities are well-formed by definition.

A consequence of well-formedness in general entities is that the logical and physical structures in an XML document are properly nested; no start-tag, end-tag, empty-element tag, element, comment, processing instruction, character reference, or entity reference can begin in one entity and end in another.

・・・エンコーディング宣言については説明済み・・・
・・・バージョン情報については説明済み ・・・
----W3C勧告----
----日本語訳----
4.3.2 整形式の解析対象実体

文書実体は、生成規則documentにマッチする場合、整形式となる。
外部・解析対象・一般実体は、生成規則extParsedEntにマッチする場合、整形式となる。
すべての外部パラメータ実体は定義上、整形式となる。

注意:
文書の中にある直接的・間接的に参照される解析対象実体だけが、整形式である必要がある。

整形式の外部解析対象実体
[78] extParsedEnt ::= ( TextDecl? content ) - ( Char* RestrictedChar Char* )

内部解析対象一般実体は、その置換テキストが生成規則contentにマッチする場合、整形式である。
すべての内部パラメータ実体は定義上、整形式となる。

一般実体の整形式性は、XML文書の論理的・物理的構造が適切にネストしていることを示す。;
つまり、開始タグ、終了タグ、空要素タグ、要素、コメント、処理命令、文字参照、実体参照がある実体で始まって
他の実体で終わることはない。
----日本語訳----

解析対象実体の仕様整理

-文書実体
documentにマッチする

-内部・解析対象・一般実体
置換テキストがcontentにマッチする
置換テキストだけでcontentとのマッチングをするため、
マークアップの途中から始まったり、マークアップの途中までの置換テキストは
構文解析でエラーとなる。

-外部・解析対象・一般実体
extParsedEntにマッチする
テキスト宣言を持っても良い->生成規則で表現済み

-外部/内部・解析対象・パラメータ実体
置換テキストは参照のあった場所に、最初からそこにあったように置き換える。
そのため、その場所の生成規則にマッチする
Comment(0)

コメント

コメントを投稿する