公開識別子

公開識別子

[1] 公開識別子 (public identifier) は、外部識別子の一種。 典型的には公的公開識別子が使われる。

SGML における定義

[2]

公開識別子 (public identifier)
公開文識別する最小表記
  • 備考1. 文書中の公開識別子は、公的公開識別子として解釈可能としてもよい、
  • 備考2. システムは、公開識別子からシステム識別子への変換に対して責任をもつ。 .(JISX4151‐1992 定義 (82))

[6]

公開テキスト又はほかの共有情報オブジェクト識別子

XML における公開識別子

[21] XML では公開識別子文書型宣言実体宣言記法宣言で使うことができます。

[22] 文書型宣言実体宣言では、公開識別子が記述されている場合、システム識別子も記述しなければなりません。 記法宣言では公開識別子単独で記述することができます。

仕様書

正規化

[23] 公開識別子一致するか調べる際には、予め空白 (S) を U+0020 に置き換え、先頭と末尾の空白を除去するという正規化を行わなければなりません >>20

[24] FirefoxDocumentTypepublicId には正規化された後の値が現れます。

[26] 名前付き文字参照DTD を読み込むかの判定に関して、 Firefox正規化しますが、 Chrome正規化しません。

[29] HTMLの構文解析ではこの正規化に相当する処理は行われません。

処理

[11] 利用については、外部実体記法宣言を参照してください。

[30] 大文字小文字について、特に区別しないというような規定はありません。

メモ

[3] XML の場合:

[28] この文字集合は WebSGML で拡張された Special と一致します。

[4] XML での公開識別子の定義は <http://www.w3.org/TR/REC-xml#dt-pubid> にあります。

  • システム識別子に加えて、公開識別子も指定できる。
  • 公開識別子を、代替 URI を作るのに使ってもよい。 (SGML でいう型録。)
  • 代替 URI を作れないときにはシステム識別子から作った URI を使う。
  • 一致を試みる前に、正規化する。
    • 全ての空白の連続を、1つの SP にまとめる。
    • 最初と最後の空白の連続は削除する。

[5] TAB をかけないのに注意。

[6] 何も説明がないことから推察できるように、公開識別子 (のすべての構成要素) は大文字・小文字を区別します。

HTML における公開識別子

[25] HTML では公開識別子正規化は行われません。そのまま publicId 属性に現れますし、DOCTYPEスイッチでもそのまま比較されます。

publicId 属性 (DOM)

[19] ...

公開識別子の欠落

[16] 文書型宣言実体宣言記法宣言連結型宣言未展開実体参照情報項目のいずれにおいても、 公開識別子は指定されないことがあります。また、いずれにおいても空文字列公開識別子として指定することができます。

[17] XML情報集合未展開実体参照情報項目については未知 (unknown) となることを、 それ以外についても無値 (no value) となることを認めています。

[18] DOM Standard はこのうち DocumentType しか定義していませんが、 値として null を認めていません。 HTML Living Standard および WebブラウザーDOCTYPE公開識別子が指定されなかった場合、空文字列publicId とします。

[14] DOM3DocumentTypepublicIdnull になる可能性に言及していません。 Entity, Notation については null になり得るとしています。

URL 表現

[31] 公開識別子URL として表現する手法として urn:publicid:* がありました。

メモ

[10] 公開識別子 P で識別される実体文 S1

...
<!ENTITY % p.mod PUBLIC "P" "S2">
%p.mod;
...
であるようなこと (つまり、公開識別子だけを追いかけると循環参照に見えるけど、システム識別子を追いかけるとそうではない場合) があります。

SGML や XML には、これを直接に禁止する規定はないと思いますけど、もし型録を使用していると実際に循環参照になってしまうでしょうから注意が必要です。

それに、仕様的に問題がないとしても意味的にどうかなあと思いませんか。