[14] [[SGML]] の[[システム識別子]]は、
[[システム]]依存の方法によって[[実体]]を[[識別]]することができます。
[[システム]]は与えられた[[システム識別子]]を使って[[システム]]依存の[[蓄積域]]に[[蓄積]]されている[[蓄積域物体]]を読込み、
[[実体]]として提供します。
この部分の処理は完全に[[システム]]に依存しますから、
[[ISO 8879]] は[[システム識別子]]の構文や意味もまったく規定していませんでした。
これでは互換性のために不便なこともあるので、 [[ISO/IEC 10744]]
は標準化された[DFN[[RUBYB[公式システム識別子][formal system identifier]]]]を規定しています。
[WEAK[なお、公式システム識別子でないものを[[非公式システム識別子]]と呼びます。]]

[15] 公式システム識別子は、 [[SGML]] の[[タグ]]のような構文で[[蓄積域物体指定]]
([[SOS]]) を記述します。蓄積域物体指定は複数記述できますが、
そのそれぞれが特定の[[蓄積域管理器]]と対応します。
蓄積域管理器は実際の[[蓄積域]] ([[ファイル]], [[データベース]],
[[包含子]]など) に[[蓄積]]されている[[物体]]を[[実体管理器]]に提供する役割を果たします。

* 代替

[16] [[公式システム識別子]]は、結局普及しませんでした。
[[システム識別子]]を使う [[SGML]] や [[XML]] 自体が廃れてしまいました。

[17] [[公式システム識別子]]が解決しようとしていた問題は、現在ではおおむね [[URL]]
が解法とされています。

* 仕様書

[REFS[
- [1] [[ISO/IEC 10744]]:1997
-- [FSIDR]
[CSECTION[A.6 Formal System Identifier Definition Requirements (FSIDR)]]
<http://www.y12.doe.gov/sgml/wg8/docs/n1920/html/clause-A.6.html>
]REFS]

* 構文

[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[[[システム公式システム識別子定義文書]]]@en[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]] <http://www.jclark.com/sp/sysid.htm>
-[CITE[SPにおけるシステム識別子]] <http://www.jagat.or.jp/sgml/sgml/sysid.htm>
(日本語訳)

[[SP]] の説明書。 [[ISO/IEC 10744]]:1992
[[TC]] 1 附属書 D に基づくとあります。

[[非公式システム識別子]]のことを[[単純システム識別子]]と呼んでいますが、
旧版規格ではそうだったのでしょうか。


[18] 
[[公式システム識別子]]というからには[[システム識別子]]として使うように思われますが、
[CODE[SDATA]] でも使えるんでしょうか。

[19] [[BUCS]] の[[外字]]記述では ([[公式システム識別子]]の未確定の草案によるからかもしれませんが)
[CODE[SDATA]] で使う構想が示されていました。 [SEE[ [[BUCS]] ]]

