#?SuikaWiki/0.9
[1] 【[[SGML]]】 [[公開識別子]]から[[システム識別子]]への変換を定義する文書, あるいはその文書形式。

- [2] ''カタログの作成と修正'' <http://www.linux.or.jp/JF/JFdocs/LDP-Author-Guide/making-catalogues.html>
- [3] ''TR 9401:1995 - Entity Management'' <http://www.oasis-open.org/cover/tr9401.html>
- [4] 日本語の情報はほとんどないです。 (自明だからかな?)
- [5] [[JIS-TR]] も変な標準情報ばっかり増やさないで、こういうのを翻訳したらいいのに。
[[#comment]]

*SGML 型録の形式

[7] [[ABNF]] です。厳密な定義は >>2 の仕様書に載っている
[[SGML//生成規則//表記法]]によるものを参照して下さい。

-型録 = *[[ps]] *((拡張外部識別子 / その他の情報) 1*[[ps]])
-その他の情報 = [[見出し語]] *(1*ps [[引数]])
-見出し語 = システム文字列d
-引数 = システム文字列d / ([[lit]] 1*システム文字b lit) / ([[lita]] 1*システム文字ba lita)
-拡張外部識別子 = (公開識別子見出し語 1*ps 公開識別子 1*ps 保管物体識別子) / (名前見出し語 1*ps 実体名指定 1*ps 保管物体識別子) / (無名見出し語 1*ps 保管物体識別子)
-公開識別子見出し語 = 'PUBLIC' / 'DTDDECL'
-名前見出し語 = 'ENTITY' / 'DOCTYPE' / 'LINKTYPE'
-無名見出し語 = 'SGMLDECL' / 'DOCUMENT'
-実体名指定 = 1*拡張名前文字a / (lit 1*拡張名前文字b lit) / (lita 1*拡張名前文字ba lita)
--;; 「実体名」には、文書型名及び連結型名を含む。
-保管物体識別子 = 1*システム文字a / (lit 1*システム文字b lit) / (lita 1*システム文字ba lita)
-- ;; 現在のファイル・システムで利用可能なファイルの識別子であるべき。
-- ;; 特に、 [CODE(ABNF)[[DFN[[[POSIX]] 可搬ファイル名文字集合]] = ALPHA / DIGIT / "." / "-" / "_"]] のみから構成されるなら、ファイル名とみなさなければならない。
-- ;; [[相対経路]]名である場合は、型録ファイルからの経路を示す。
-ps = [[s]] / [[注釈]]
-注釈 = [[com]] システム文字列c com
-lit  = <"> ;; 二重引用符
-lita = "'" ;; 一重引用符
-com = "--"
-公開識別子 = <ISO 8879 公開識別子>
-s = <ISO 8879 規格参照具象構文 s>
-拡張名前文字a = 拡張名前文字 − ([[NULL]] / lit / lita / s)
-拡張名前文字b = 拡張名前文字 − (NULL / lit)
-拡張名前文字ba = 拡張名前文字 − (NULL / lita)
-拡張名前文字 = <任意の[[文字]]>
-システム文字a = システム文字 − (NULL / lit / lita / s)
-システム文字b = システム文字 − (NULL / lit)
-システム文字ba = システム文字 − (NULL / lita)
-システム文字列c = *システム文字 − (*システム文字 com *システム文字) − (NULL)
-システム文字列d = 1*システム文字a − (公開識別子見出し語 / 名前見出し語 / 無名見出し語)
-システム文字= <任意の[[文字]]>
-- ;; システム文字の列は、少なくても1024文字までは扱えることが保証されている。

:[CODE(SGML)[[[PUBLIC]]]]:指定した[[公開識別子]]で識別される実体の[[実体文]]を、指定した保管物体識別子で識別される物体とする。
:[CODE(SGML)[[[ENTITY]]]]:名前が実体名指定と一致する実体の実体文を、指定した保管物体識別子で識別される物体とする。
:[CODE(SGML)[[[DOCTYPE]]]]:[[文書型名]]が実体名指定と一致する[[文書実体]]の[[文書型定義]]の[[外部部分集合]]となる実体文を、指定した保管物体識別子で識別される物体とする。
:[CODE(SGML)[[[LINKTYPE]]]]:[[連結型名]]が実体名指定と一致する[[連結型宣言]]で指定される実体の実体文を、指定した保管物体識別子で識別される物体とする。
:[CODE(SGML)[[[SGMLDECL]]]]:指定した保管物体識別子で識別される物体を[[SGML宣言]]の入った実体として使用する。
:[CODE(SGML)[[[DTDDECL]]]]:公開識別子が文書型宣言のものと一致する文書実体について、指定した保管物体識別子で識別される物体を SGML 宣言の入った実体として使用する。
:[CODE(SGML)[[[DOCUMENT]]]]:指定した保管物体識別子で識別される物体を構文解析を開始する実体として使用する。 (この見出し語を使った指定が複数あることは、禁止はしないが認めもしない。)

[8] SGML 宣言は、
=文書に明示されているもの
=[CODE(SGML)[DTDDECL]] で指定されたもの
=[CODE(SGML)[SGMLDECL]] で指定されたもの

という優先順を持ちます。

もちろん、文書型宣言は[[具象構文]]が事前にわかっていないと読めないのですが、
大体の SGML 文書はその辺りは規格参照具象構文と同じでしょうから、
ほとんど問題ないでしょう。

[[#comment]]

* XML 型録

[13]
> [DFN[型録 catalog]] は、「対応付け」情報を含む論理構造です。
1つの型録は物理的に1つ以上の[DFN[[[型録項目ファイル]]を含みます。
型録項目ファイルは[[型録項目]]の集合を含む文書です。
<http://www.oasis-open.org/committees/entity/spec.html#s.terminology>

[9] [[OASIS]] は、 TR 9401 (SGML Catalog)
を [[XML]] 化した仕様として
''XML Catalogs'' <http://www.oasis-open.org/committees/entity/spec.html>
を定義しました。 TR 9401 の SGML もどきとは異なり、
こちらは完全に XML 風の文書として記述できます。
[WEAK[基本的には XML で意味がある機能だけですが、それ以外の TR 9401 の機能の写像も定義しています。]]

[15] <http://www.oasis-open.org/committees/entity/spec.html#s.res.fail>
によれば、[[資源]]が XML 型録であるためには、
次の条件をすべて満たす必要があります。
- [[名前空間整形式]]であること。
- [[根要素型]]が
[CODE(XML)[[VAR[{[CODE(URI)[urn:oasis:names:tc:entity:xmlns:xml:catalog]]}]]:[[catalog]]]]
であること。

応用は、これ以外の形式の型録を扱うことができても別に構いません。

-[10] ''Catalog support'' <http://xmlsoft.org/catalog.html>
- [12] <IW:CPAN:"XML::Catalog"> (0.02) はこれの実装だけど、 draft 仕様に対応したものらしい。大丈夫かな? 怪しいなあ。 
- [14] 委譲や参照があるので、循環参照の対策をしておく必要があります。また、型録項目ファイル自体が[[文書型宣言]]を持っているかもしれないことにも注意が必要です。[WEAK[一々 OASIS のサーバーに取りに行くのは無駄ですから、最初だけ hard‐coded な型録を使うか、型録で参照されている仕様と同じ識別子を持つ[[実体]]は無視することになるでしょう。きっと。]]
[[#comment]]

*メモ
- [11] ''XML Namespace Catalog Format'' <http://www.openhealth.org/XMLCatalog/>: XML [[名前空間名]]から [[schema]] とかを取り出すための型録らしい。なぜか [[XHTMLBasic]] を土台に、 [[XLink]] を使って腐った [[RDF/XML]] 風に記述する。この仕様は、 schema に限らず一般化した [[RDDL]] に発展的消滅したみたい。[WEAK[その仕様の意図よりも、 XLink の駄目さ加減と RDF がリンクであることがひしひしと伝わってくる(謎)のがなんとも。]]
