[1] 公開識別子は、外部識別子の一種。 典型的には公的公開識別子が使われる。
[21] XML では公開識別子は文書型宣言、実体宣言、記法宣言で使うことができます。
[22] 文書型宣言と実体宣言では、公開識別子が記述されている場合、システム識別子も記述しなければなりません。 記法宣言では公開識別子単独で記述することができます。
[23] 公開識別子が一致するか調べる際には、予め空白 (S
) を U+0020
に置き換え、先頭と末尾の空白を除去するという正規化を行わなければなりません >>20。
[24] Firefox の DocumentType
の publicId
には正規化された後の値が現れます。
[26] 名前付き文字参照の DTD を読み込むかの判定に関して、 Firefox は正規化しますが、 Chrome は正規化しません。
[3] XML の場合:
PubidLiteral = <"> *PubidChar <"> / "'" *(PubidChar - "'") "'" ;; [12]
PubidChar = %x0A / %x0D / %x20 / ALPHA / DIGIT / "-" / "'" / "(" / ")" / "+" / "," / "." / "/" / ":" / "=" / "?" / ";" / "!" / "*" / "#" / "@" / "$" / "_" / "%" ;; [13]
[28] この文字集合は WebSGML で拡張された Special と一致します。
[4] XML での公開識別子の定義は http://www.w3.org/TR/REC-xml#dt-pubid にあります。
[6] 何も説明がないことから推察できるように、公開識別子 (のすべての構成要素) は大文字・小文字を区別します。
[25] HTML では公開識別子の正規化は行われません。そのまま publicId
属性に現れますし、DOCTYPEスイッチでもそのまま比較されます。
publicId
属性 (DOM)[16] 文書型宣言、実体宣言、記法宣言、連結型宣言、未展開実体参照情報項目のいずれにおいても、 公開識別子は指定されないことがあります。また、いずれにおいても空文字列を公開識別子として指定することができます。
[17] XML情報集合は未展開実体参照情報項目については未知となることを、 それ以外についても無値となることを認めています。
[18] DOM Standard はこのうち DocumentType
しか定義していませんが、
値として null を認めていません。 HTML Living Standard および Webブラウザーは
DOCTYPE
に公開識別子が指定されなかった場合、空文字列を
publicId
とします。
[14] DOM3 は DocumentType
の
publicId
が null
になる可能性に言及していません。
Entity
, Notation
については null になり得るとしています。
[31]
公開識別子を URL として表現する手法として
urn:publicid:*
がありました。
... <!ENTITY % p.mod PUBLIC "P" "S2"> %p.mod; ...であるようなこと (つまり、公開識別子だけを追いかけると循環参照に見えるけど、システム識別子を追いかけるとそうではない場合) があります。
SGML や XML には、これを直接に禁止する規定はないと思いますけど、もし型録を使用していると実際に循環参照になってしまうでしょうから注意が必要です。
それに、仕様的に問題がないとしても意味的にどうかなあと思いませんか。