TEST

RFC メモ

最終更新:

eriax

- view
管理者のみ編集可

URI Fragment Identifiers for the text/csv Media Type

URI のフラグメント成分を使って CSV 内のデータを指示する仕組み。

例として、以下の CSV データが sample.csv として保存されているとする。

date,temperature,place
2011-01-01,1,Galway
2011-01-02,-1,Galway
2011-01-03,0,Galway
2011-01-01,6,Berkeley
2011-01-02,8,Berkeley
2011-01-03,5,Berkeley

ヘッダ行

下記はヘッダ行が存在することを示す。

sample.csv#head

ヘッダ行は次の部分。

date,temperature,place

そもそも、ヘッダ行の存在は HTTP 応答ヘッダの text/csv; header=present で示される(RFC 4180)。しかし、このようにフラグメント識別子によって示すことも可能。

行データ

下記は 2 行目のデータを示す。

sample.csv#row:2

番号は 0 から始めるため、次の部分を示すことになる。

2011-01-03,0,Galway

下記は全ての行を示す。ヘッダ行は含まれない。

sample.csv#row:*

列データ

下記は temperature 列のデータを示す。

sample.csv#col:temperature

これは次のようなデータになる。

1,-1,0,6,8,5

列データは次のように番号で指定することもできる。下記は 2 列目を示す。

sample.csv#col:2

番号は 0 から始まるため、次のデータになる。

Galway,Galway,Galway,Berkeley,Berkeley,Berkeley

スライス

下記は date が 2011-01-01 である全ての行を示す。

sample.csv#where:date=2011-01-01

つまり、次のデータになる。

temperature,place
1,Galway
6,Berkeley

文法

厳密な文法は次の通り。

csv-fragment =  headersel / wheresel / colsel / rowsel
headersel = "head"
rowsel   = "row:" rowspec
colsel   = "col:" colspec
wheresel = "where:" kvpairs
kvpairs = 1*( col "=" val 0*1(",") )
col = 1*TEXTDATA
val = 1*TEXTDATA
colspec = column
rowspec = "*" / rownum
column = 1*TEXTDATA / 1*DIGIT
rownum = 1*DIGIT
TEXTDATA =  %x23-2B / %x2D-3C / %x3E-7E
DIGIT =  %x30-39

文法エラーが生じた場合、データ照会や修正を試みてはならない。


  • 初出:2012-05-16

タグ:

RFC CSV
目安箱バナー