TEST
RFC メモ
最終更新:
eriax
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