[1] [[NN]] の [[bookmark]] (栞) のデータ形式としては、 大昔から [[HTML]] に似た[[マーク付け言語]]が使われています。 巷の [[WWWブラウザ]]で表示させるとそれなりに整形して表示され、 栞を挟んだ先へのリンクも機能するようになっています。 Netscape 0.9 で既にこの形式が使われていますが、 もしかすると [[Mosaic]] でも使われてたんでしょうか? [6] >>1 でも一般的な mosaic は [[mosaic.ini]] とかに書いてたと思われ。 [[#comment]] * 文書構造 [4] W3C HTML にないもの、非互換な物は「*」をつけてます。 - [CODE(HTML)[]] [MacIE4] -- 文書型宣言の前に根要素開始タグ。阿呆としか言い様がない。しかも文書型と根要素型が一致してないし。 - [CODE(SGML)[[[DOCTYPE]]]]* ([[文書型宣言]]) [M0.9] [NN4] [Moz] [iCab] [N::B] [SRC@en[Fx1]] -- [WEAK[(純粋な HTML と区別するために必要なだけだけど)]] 当初からずっと文書型宣言をちゃんとしてるのは、とても偉い。[WEAK[[[DTD]] をちゃんと公開していればもっと偉かった。]] -- 根要素型名 (= [[文書型名]]) は --- [CODE(HTMLe)[Mosaic-Communications-Bookmark-file-1]] [M0.9] --- [CODE(HTMLe)[NETSCAPE-Bookmark-file-1]] [NN4] [MacIE4] [MOZ] -- [SRC@en[Fx1]] [PRE(HTML example code)[ ]PRE] - [CODE(SGML)[]]* [MacIE4] -- 謎の[[マーク宣言]]もどき。 - [[注釈宣言]] [NN4] [Moz] [N::B] -- 例: [PRE[ ]PRE] -- [SRC@en[Fx1]] [PRE(HTML example code comment)[ ]PRE] -- [[ClassicMozilla]] では、その版の言語。 [NN4] -- [[Gecko]] Mozilla や [CODE(perl)[Netscape::Bookmark]] では英語。 [Moz] [N::B] [SRC@en[Fx1]] - [[根要素]]* -- 文書型宣言で暗示されるのみで、[[タグ]]は使用されていない。 -- [CODE(HTMLe)[[[head]]]] 要素や [CODE(HTML)[[[body]]]] 要素は存在するのか不明 (少なくてもタグは存在しない)。 -- [CODE(HTMLe)[[[meta]]]] [MacIE4] [MOZ] [iCab] --- @[CODE(HTML)[[CODE(HTMLa)[[[http-equiv]]]]="Content-Type"]] --- @[CODE(HTML)[[CODE(HTMLa)[[[content]]]]="text/html; [[charset]]=[VAR[charset]]"]] --- [SAMP(HTML)[]] [MacIE4] --- [SAMP(HTML)[]] [MOZ] [SRC@en[Fx1]] --- [SAMP(HTML)[]] [iCab] --- See >>5 --- ここで [CODE(MIME)[[[text/html]]]] と名乗っているし、 MacIE 4.0 は最初に [CODE(HTML)[]] と書くことからも、この栞形式は HTML の一種 (と主張されている) と言える。 --- ファイル名も [CODE(file)@en[bookmarks.html]] だし。 -- 注釈宣言 [CODE(HTML)[]] [iCab] -- [CODE(HTMLe)[[[title]]]] [NN 4] [MacIE4] [N::B] --- 内容は、 ---- Classic Mozilla では ----- 英語版: [CODE(HTML)[Bookmarks for [VAR[利用者名]]]] [NN4] ----- 日本語版: [CODE(HTML)[[VAR[利用者名]]のフ゛ックマーク]] (もしかしたら [[Un|x]] 版では[CODE[フ゛]]ではなく[CODE[ブ]]かもしれない。未確認。 [[Windows]] 版では [[JISX0201]] の片仮名。) [NN 2〜4] ----- [VAR[利用者名]]は、設定で指定したもの。つまり、メイル送信時に使われるもの。[WEAK[(設定を変更してもそのまま使われるのか、適当なタイミングで書き換えられるのか。 Classic Mozilla 持ってる人がいたら確かめてみてください。)]] ---- Gecko Mozilla では単に [CODE(HTML)[Bookmarks]] [Moz] [SRC@en[Fx1]] --- [CODE(HTML)[Favorites]] [MacIE4] --- [CODE(HTML)[iCab Hotlist]] [iCab] -- [CODE(HTMLe)[[[h1]]]] [NN4] [MacIE4] [Moz] [iCab] [N::B] [SRC@en[Fx1]] --- 内容は [CODE(HTMLe)[title]] 要素と同じ。 --- @[CODE(HTMLa)@en[[[last_modified]]]] = 修正時刻 ([[Unix時刻]]) [SRC@en[Fx1]] --- @[CODE(HTMLa)[substatus_pos]] = [SAMP(HTML)["626,230"]] [MacIE4] --- @[CODE(HTMLa)[window_position]] = [SAMP(HTML)["300,48"]] [MacIE4] --- @[CODE(HTMLa)[window_open]] = [SAMP(HTML)["TRUE"]] [MacIE4] --- @[CODE(HTMLa)[window_size]] = [SAMP(HTML)["580,710"]] [MacIE4] --- [SRC@en[Fx1]] [PRE(HTML example code)[

Bookmarks

]PRE] -- [CODE(HTML)[
]]* [N::B] ([CODE(perl)[Netscape::Bookmark]] の不具合?) -- [[dl]] [NN4] [MacIE4] [Moz] [iCab] [N::B] [SRC@en[Fx1]] --- [SRC@en[Fx1]] [PRE(HTML example code)[

Bookmarks Toolbar Folder

Add bookmarks to this folder to see them displayed on the Bookmarks Toolbar [INS[...]]

]PRE] --- [[p]]* [NN4] [MacIE4] [Moz] [N::B] [SRC@en[Fx1]] ---- 常に空要素と思われる。 --- [CODE(HTMLe)[[[dt]]]] (「フォルダ」) [NN4] [MacIE4] [Moz] [iCab] [N::B] ---- [CODE(HTMLe)[[[h3]]]] [NN4] [MacIE4] [Moz] [iCab] [N::B] ----- 階層の深さに関係なく、常に [CODE(HTMLe)[h3]] が使われる。 ----- @[[add_date]]* (追加日時 ([[Un*x時間]])) [NN4] [MOZ] [N::B] [SRC@en[Fx1]] ----- @[CODE(HTMLa)[object_type]] = [SAMP(HTML)["LINK"]] [MacIE4] ----- @[CODE(HTML)[[[folded]]]] (論理値) [NN4] [MacIE4] [iCab] [N::B] ----- @[CODE(HTML)[sort_order]] = [CODE(ABNF)[1*DIGIT]] (零以上) [MacIE4] ----- @[[id]]* [MOZ] [SRC@en[Fx1]] ------ 例: [SAMP(HTML)[NC:BookmarksRoot#$b742f5b]] ----- @[[last_modified]]* [MOZ] (最終修正日 (Un*x 時間)) [SRC@en[Fx1]] ----- @[CODE(HTML)[[[menuheader]]=menuheader]] ----- @[[personal_toolbar_folder]][CODE(HTML)[="true"]] [SRC@en[Fx1]] ------ 個人用工具棒につかうフォルダである時指定。 ----- 内容は「フォルダ」名。 ----- 終了タグは省略可能。 ----- [SRC@en[Fx1 (日本語)]] [PRE(HTML example code)[

個人用ツールバーフォルダ

]PRE] ----- [SRC@en[Fx1]] [PRE(HTML example code)[
Bookmark URLs containing '.org' ]PRE] ---- [CODE(HTMLe)[[[dd]]]] [N::B] [SRC@en[Fx1]] ----- フォルダの説明。 開始タグのみ明示する。説明なしのときはタグも含めて省略。 ---- [CODE(HTMLe)[dl]] (入れ子構造) [NN4] [Moz] [MacIE4] [iCab] [N::B] [SRC@en[Fx1]] ---- [CODE(HTMLe)[p]]* [NN4] [MacIE4] [Moz] [N::B] [SRC@en[Fx1]] ----- 常に空要素と思われる。 [CODE(HTML)[DL]] 要素の後に必ず来る要素。(あわせて [CODE(HTML)[

]]) ---- [SAMP(HTML)[

(下位)〜]] または [SAMP(HTML)[
(下位)〜]] となり、終了タグがないので、下位構造のための [CODE(HTMLe)[dl]] が何の子要素なのかはっきりしません。 HTML の歴史を鑑みれば [CODE(SGML)[]] という気持ちなのかもしれませんが、現代的には [CODE(SGML)[]] くらいに考えておくのが適当でしょう。 --- [CODE(HTMLe)[dt]] (項目) [NN4] [MacIE4] [Moz] [iCab] [N::B] [SRC@en[Fx1]] ---- [CODE(HTMLe)[[[a]]]] [NN4] [MacIE4] [Moz] [iCab] [N::B] [SRC@en[Fx1]] ----- @[CODE(HTMLa)[add_date]]* [NN4] [MacIE4] [Moz] [N::B] [SRC@en[Fx1]] ----- @[CODE(HTMLa)[[[custom_address]]]] *= [SAMP(HTML)[""]] [MacIE4] ----- @[CODE(HTMLa)[[[domain]]]]* = [SAMP(HTML)[""]] [MacIE4] ----- @[CODE(HTMLa)[object_type]]* = [CODE(HTMLa)["LINK"]] [MacIE4] ----- @[CODE(HTMLa)[sort_order]]* ----- @[CODE(HTMLa)[subscribe]]* (論理値) [MacIE4] [iCab] ----- @[CODE(HTMLa)[message]]* = [CODE(HTML)["The site has changed."]] / [CODE(HTML)["There were no changes."]] [MacIE4] ----- @[CODE(HTML)[checksum]] = [CODE(ABNF)[ ["-"] 1*[[DIGIT]]]] [MacIE4] ----- @[CODE(HTML)[[[aliasid]]=[CODE(ABNF)[1*DIGIT]]]]* [Moz] [N::B] ----- @[[href]] ([[URI参照]]) [NN0.9] [NN4] [MacIE4] [Moz] [iCab] [N::B] [SRC@en[Fx1]] ----- @[[icon]] [MOZ] ([[favicon.ico]] URI) [SRC@en[Fx1]] ----- @[CODE(HTMLa)@en[[[id]]]] [SRC@en[Fx1]] ----- @[CODE(HTMLa)[[[intervalunit]]]] = [SAMP(HTML)["3"]] [MacIE4] ----- @[CODE(HTMLa)[[[intervaltime]]]] = [CODE(ABNF)[1*DIGIT]] [MacIE4] ----- @[[last_charset]] [MOZ] (最終閲覧時の charset) [SRC@en[Fx1]] ----- @[CODE(HTML)[[[last_modified]]]]* [NN4] [MacIE4] [iCab] [SRC@en[Fx1]] ----- @[CODE(HTML)[[[last_modified_changed]]]] (論理値) [MacIE4] [iCab] ----- @[CODE(HTMLa)[lastupdate]]* = Un|x 時刻 [MacIE4] [iCab] ----- @[CODE(HTMLa)[nextupdate]]* = Un|x 時刻 [MacIE4] ----- @[[last_visit]]* (最終閲覧日 (Un*x 時間)) [NN4] [MacIE4] [Moz] [SRC@en[Fx1]] ----- @[CODE(HTMLa)[[[sound_name]]]]* = [SAMP(HTML)["ChuToy"]] [MacIE4] ----- @[CODE(HTMLa)[[[subscribe_failed]]]]* (論理値) [MacIE4] ----- @[CODE(HTMLa)[[[update]]]]* = Un|x 時刻 [iCab] ----- @[CODE(HTMLa)[[[use_custom_address]]]]* = [CODE(HTML)["TRUE"]] / [CODE(HTML)["FALSE"]] [MacIE4] ----- @[CODE(HTMLa)[[[user]]]]* = [SAMP(HTML)[""]] [MacIE4] ----- @[CODE(HTMLa)[[[visitation_count]]]] = [CODE(ABNF)[1*DIGIT]] [MacIE4] ----- 内容は項目名。 ----- [SRC@en[Fx1]] [PRE(HTML example code)[
Firefox Help
David Tenser's Firefox help site ]PRE] ----- [SRC@en[Fx1]] [PRE(HTML example code)[
Firefox 製品ページ ]PRE] --- [CODE(HTML)[[[dd]]]]: たまに開始タグ (と内容) だけがある。 [SRC@en[Fx1]] ---- 内容は説明。 ---- [CODE(HTMLe)@en[[[br]]]] 要素型が使用可能。 --- [[hr]] (仕切り線) [NN4] ---- [[強制空要素]]。 --- [CODE(HTML)[P]] [NN4] [N::B] ---- 常に空要素と思われる。 [CODE(HTML)[DL]] 要素 (の終了タグ) の後に必ず来る要素。 - 最後のお尻 [CODE(HTMLe)[p]] (とその後の[[空白]]) で、 文書全体が終了。他の要素はタグなし。 - 注釈宣言 [CODE(HTML)[]] [iCab] - [[属性値]]は、[[属性値表記]]になっている。 [NN4] [MacIE4] [Moz] [iCab] - [CODE(char)[&]] は [CODE(char)[&]] のまま出力される [MacIE4] [iCab] [N::B]。 [8] W3C HTML から推測して「フォルダ」の内容を表す [CODE(HTML)[DL]] 要素は直前の「フォルダ」の名前を表す [CODE(HTML)[DT]] 要素の内容の一部としましたが、出力されている字下げを考慮すると、 [CODE(HTML)[DL]] は [CODE(HTML)[DT]] の弟要素と考えた方が正しいのかもしれません。 要素型・属性名は、出力されるものでは一般に全て大文字で、 [CODE(HTMLe)[p]] 要素だけなぜか小文字になっています。 [5] 文書の [[charset]] は、 Classic Mozilla ではその環境の標準の[[文字コード]], Mozilla では [[UTF-8]] を使うようです。 [9] [[iCab]] は意味のない [CODE(HTMLe)[p]] タグを全然吐きません。それに比較的綺麗なソースです。 (それでも [CODE(char)[&]] を escape してないのは同じ。もっとも、 SGML 的に必ずしも間違いではないが。。。) [[#comment]] * 文書型宣言 - [2] [CODE(HTML)[]] - [3] [CODE(HTML)[]] [MOZ] [[#comment]] * メモ [10] :[NN0.9]:[[MosaicCommunications]] 社の [[MosaicNetscape]] 0.9 :[NN1]:[[NN]] 1 系 :[NN2]:NN 2 系 :[NN3]:NN 3 系 :[NN4]:NN (単体または [[NC]] の一部) 4 系 :[Moz]:[[mozilla.org]] の [[Mozilla]] や Netscape 6 以降 :[MacIE4]:[[MacIE]] 4.0 :[iCab]:[[iCab]] :[N::B] :[CODE(perl)[Netscape::Bookmark]] :[Fx1]:[[Firefox]] 1.5 [12] [NN4], [MacIE4], [iCab] についての情報は [N::B] 付属の例文を元にしました。 Classic/Gecko Mozilla についてはちゃんと調べてないので完全な情報ではありません。 [7] という [[Perl]] モジュールがあります。 Netscape bookmark 形式の栞文書を取扱うことができます。 [13] [[影鷹]]も栞に Netscape Bookmarks 形式を使っています。 ([[名無しさん]])