[14] [[SGML]] の[[システム識別子]]は、 [[システム]]依存の方法によって[[実体]]を[[識別]]することができます。 [[システム]]は与えられた[[システム識別子]]を使って[[システム]]依存の[[蓄積域]]に[[蓄積]]されている[[蓄積域物体]]を読込み、 [[実体]]として提供します。 この部分の処理は完全に[[システム]]に依存しますから、 [[ISO 8879]] は[[システム識別子]]の構文や意味もまったく規定していませんでした。 これでは互換性のために不便なこともあるので、 [[ISO/IEC 10744]] は標準化された[DFN[[RUBYB[公式システム識別子][formal system identifier]]]]を規定しています。 [WEAK[なお、公式システム識別子でないものを[[非公式システム識別子]]と呼びます。]] [15] 公式システム識別子は、 [[SGML]] の[[タグ]]のような構文で[[蓄積域物体指定]] ([[SOS]]) を記述します。蓄積域物体指定は複数記述できますが、 そのそれぞれが特定の[[蓄積域管理器]]と対応します。 蓄積域管理器は実際の[[蓄積域]] ([[ファイル]], [[データベース]], [[包含子]]など) に[[蓄積]]されている[[物体]]を[[実体管理器]]に提供する役割を果たします。 [1] 仕様書: - [[ISO/IEC 10744]]:1997 -- [FSIDR] [CSECTION[A.6 Formal System Identifier Definition Requirements (FSIDR)]] * 構文 [2] 公式システム識別子の構文は次の通りです [SRC[FSIDR A.6.4.3 NOTE 505 改]]。 - [CODE(ABNF)[[DFN[FSI]] := [ [[実体用法開始タグ]] ] SOS 列 *([CODE(SGML)[[[or]]]] SOS 列)]] -- 実体用法開始タグを指定できるのは実体用法 ([CODE(SGML)[[[entuse]]]]) 蓄積域管理器を使う場合。 -- [CODE(SGML)[or]] を使う時は[[代替SOS列]] ([CODE(SGML)[[[altsor]]]]) 選択子が有効である必要がある。 - [CODE(ABNF)[[DFN[SOS 列]] := 1*SOS]] - [CODE(ABNF)[[DFN[SOS]] := [[SOS開始タグ]] [[SOI]] [ [[SOS終了タグ]] / [CODE(SGML)[[[etago]]]] [CODE(SGML)[[[tagc]]]] ] ]] -- 公式システム識別子を使う場所にかかわらず、[[参照具象構文]]を使います。 -- [CODE(SGML)[[[or]]]] を使う時は終了タグが必須。 [3] 公式システム識別子は主として[[蓄積域物体指定]]の列 (SOS 列) で構成されます。各 SOS を解決して得られた文字列を連結したものが識別される[[実体]]の文字列となります。 [4] - [CODE(ABNF)[[DFN[SOS 開始タグ]] := [CODE(SGML)[[[stago]]]] 蓄積域管理器名 ([CODE(SGML)[[[s]]]] / [CODE(SGML)[[[tagc]]]])]] -- [CODE(ABNF)[蓄積域管理器名]]は、[[公式システム識別子宣言]]で宣言されたもの。 仕様書本文 [SRC[FSIDR]] を ABNF に翻訳するとこうなりますが、 どう考えてもおかしいですよね (>>5 の規定もあるし)。 通常の [[SGML]] の[[開始タグ]]にもっと似た形になっているはずです。 [5] [[属性値表記]]および SOI (SOS タグの間にある[[内容]]) では[[数値文字参照]]が使えます。 [SRC[FSIDR A.6.4.3 NOTE 503]] [6] SOI では[[記録開始]]と[[記録終了]]が SGML の[[内容]]と同じように扱われます。 (記録開始は削除され、開始タグ直後および SOI 末尾の記録終了は削除されます。) [SRC[FSIDR A.6.4.3]] [7] 代替 SOS 列として指定されている各 SOS 列はすべて同一の文字列が得られることが期待されています。 システムは好きなものを選ぶことができます。 [SRC[FSIDR A.6.4.3]] [8] 実体用法開始タグは、実体のすべてに適用される[[属性]]を指定できます。 実体用法開始タグは代替 SOS 列のいずれかの一部とはみなしません。 [[実体用法記法]]は蓄積域管理器ではなく、 属性の宣言・指定のためだけに使います。なお、終了タグは存在しません。 [SRC[FSIDR A.6.4.3]] [[#comment]] * 公式システム識別子定義要件体系 [12] [[公式システム識別子定義文書]]は [ABBR[FSIDR][公式システム識別子定義要件]] [[体系]]から[[派生]]させるらしいです [SRC[FSIDR A.6]] が、肝心の[[体系DTD]] もその[[公式公開識別子]]も [[ISO/IEC 10744]]:1997 のどこにも含まれていません。 [WEAK[([[体系DTD]] 片は仕様書のあちこちに散りばめられてはいますが・・・。)]] [13] '''公式システム識別子支援属性''': [DFN[[RUBYB[公式システム識別子支援属性][FSI support attribute]]]]なるものが存在するらしく、 その値が仕様書で定義されています [SRC[FSIDR A.6.8]] が、なんと(!)それをどこに指定するのかが書かれていません。 話の流れからすると[[システム公式システム識別子定義文書]] (>>11) の中の[[体系支援宣言]]で指定する、 FSIDR [[体系]]の[[体系支援属性]]なのではないかと思われますが・・・。 属性は [PRE(SGML example)[ fsism="altsos smalias validate" ]PRE] のように指定します。と書いてあります [SRC[FSIDR A.6.8]] が、 3つの[[字句]]を適宜選んで指定できると解釈するのが妥当でしょう。 [WEAK[(それくらいちゃんと定義してくださいな。)]] この例(?)で属性名らしきものは [CODE(SGMLa)[fsism]] となっていますが、その直前の本文には [CODE(SGMLa)[fsidr]] と書かれています。一体何が何やらさっぱり。 属性値の字句: :[CODE(SGML)[[[altsos]]]]:[[代替蓄積域物体指定列]]を[[公式システム識別子]]で使うことができます。 :[CODE(SGML)[[[smalias]]]]:[[公式システム識別子定義文書]]で[[宣言]]された[[蓄積域管理器]]の別名を[[公式システム識別子]]で使うことができます。 :[CODE(SGML)[[[validate]]]]:[[システム]]は FSIDR の要件が満たされない時に[[誤り]]を報告します。 しかし別名ってどうやって定義するのやら(藁 [[#comment]] * 適合性 [10] [[公式システム識別子]]を使う[[文書]]や[[システム]]は、 [[ISO/IEC 10744]] の他の機能とは別個に FSIDR に関して適合性を主張できます。 FSIDR では[[公式システム識別子]]で使う標準の[[蓄積域管理器]]を色々と定義していますが、 いずれも実装は必須ではなく、必要に応じて選択できます。 [SRC[FSIDR A.6.8]] [11] 適合する[[システム]]は、 [DFN[[RUBYB[[[システム公式システム識別子定義文書]]]][system FSI definition document]]]]に次の文を掲載しなければなりません。 [SRC[FSIDR A.6.8]] > A Formal System Identifier implementation conforming to the FSIDR requirements of International Standard ISO/IEC 10744. [[システム公式システム識別子定義文書]]には実際に[[システム]]がどのような[[蓄積域管理器]]に対応しているかを[[宣言]]します。 [DEL[ 安心できることに FSIDR は他の機能とは違って[[宣伝条項]]がありません(藁。 ]DEL] と思いましたが、 [[SGML拡張機能]]の一つなのでそちらの適合性の規定 [SRC[ISO/IEC 10744:1997 A.1.1]] も適用されます。 したがってやはり[[宣伝条項]]があります。 [[#comment]] * メモ [9] -[CITE[SP - System identifiers]] -[CITE[SPにおけるシステム識別子]] (日本語訳) [[SP]] の説明書。 [[ISO/IEC 10744]]:1992 [[TC]] 1 附属書 D に基づくとあります。 [[非公式システム識別子]]のことを[[単純システム識別子]]と呼んでいますが、 旧版規格ではそうだったのでしょうか。