Torisugariの日記: text/csvについて 3
CSVファイルの標準規格を定めている(はず)の、RFC 4180(2005年10月)には、mimeに関して以下のような記述があります。
MIME media type name: text
MIME subtype name: csv
Required parameters: none
Optional parameters: charset, header
Common usage of CSV is US-ASCII, but other character sets defined
by IANA for the "text" tree may be used in conjunction with the
"charset" parameter.
The "header" parameter indicates the presence or absence of the
header line. Valid values are "present" or "absent".
Implementors choosing not to use this parameter must make their
own decisions as to whether the header line is present or absent.
つまり、CSVファイルの一行目がヘッダであると見なすためには、mimeの指定を"text/csv; charset=utf-8; header=present"にしろ、ということです。
確かに、CSVファイルそのものは自分の一行目がヘッダか否かなど知ったことではないので、どこか別のところ、例えばHTTPのヘッダやメールのマルチパートなヘッダに書くしかない、というのは合理的な結論ではあるのでしょう。しかながら、「では、だれがこんな実装するんだ?」という点を考えると首をかしげざるを得ません。
仮に、表計算ソフトがネットワーク越しにファイルを開くことを想定していたとしても、サーバー側だって対応しなければいけないわけですから。つまり、ソース側の表計算ソフト自体がサーバーにならないと解決しない問題です。あるいは、ヘッダの有無でファイルの拡張子を変えるとか…… まあ、Googleのことを考えると、あながち無理な話でもないのかもしれませんが。
そういうわけで、Firefoxの対応ファイルタイプに"text/csv"を追加する拡張を作ってみました。
http://torisugari.hostei.com/development/printcsv/printcsv1_1_0.xpi
こちらが、確認用のCSVファイルです。
http://torisugari.hostei.com/development/test/a.csv
ちなみに、.htaccessを
AddType 'text/csv; header=present' .csv
にしています。この"header=present"、使い物になりそうでしょうか?
表計算というよりは (スコア:1)
サーバー/クライアント型のシステムでサーバーで生成したデータをクライアントに渡して処理させるような時には意味があるような気がしますが...。
でも最近だとそういう用途なら XML ですね。
Re:表計算というよりは (スコア:1)
いや、そこは発想が逆じゃないですか?ヘッダと実データの区別が面倒だから現行のような実装になっているわけで、表計算の理想を言えば、シートの一行目を実データで始めてくれた方が便利だと思います。「B列2行目以下とC列2行目以下を足す」よりも、「"ラベルB"列と"ラベルC"列を足す」の方が、機能的で人為的エラーも入りにくいでしょうし。
まあ、実際の運用ではもっとアクロバティックな範囲指定もあるわけですから、現行方式を否定したいわけではありませんが、アプリケーション側に「ヘッダをヘッダだと認識する機能」は追加されても良いのではないでしょうか。私が言っているのは、今"A"とか"B"とかになっている部位の表示が"名前(A)"、"住所(B)"、になって、最初のセルの位置が"名前1(A1)"になるってことですよ。
Re:表計算というよりは (スコア:1)
ただ便利そうではあるけど、現行の表計算ソフト(Excel なり Calc なり) でそういう動作を実現しようとすると、「表計算のシート自体は物理的な行と列を提供するだけで論理的な意味を持たない白紙」という仕様というか考え方の変更が伴うのでそれなりに大変そうで、ニーズとの見合いが微妙かも。
前コメントにも書いたけどベンダーからすれば「メタデータを含めたいなら XML を使ってください」でしょう。