RFC 6839

構造化構文接尾辞 (MIME 型)

[45] MIME型構造化構文接尾辞 (structured syntax suffix) は、 そのMIME型が用いている一般的な構文 (構造化構文メタ書式) を表すものです。 MIME型の末尾に + で区切って記述します。構造化構文接尾辞は、MIME型の一部です。

[46] 例えば MIME型 image/svg+xml では、末尾の +xml構造化構文接尾辞です。 MIME型全体では SVG を表しますが、構造化構文接尾辞XML を表しており、 SVG としての処理に対応していなかったとしても、 XML としての処理には対応していれば、 そのレベルでこの MIME型を理解できることになります。

[2] >>1 は用語が長過ぎるとして+接尾辞 (+suffix) と呼んでいます。

仕様書

意味

[6] MIME型部分型部分の末尾に +構造化構文の名前を記述できます。

[7] 例えば SVGXML構造化構文として用いているので、 image/svg+xml という MIME型を使っています。 +xml まで含めて1つの MIME型です。

[8] 名前のある構造化構文を使う MIME型は、構造化構文接尾辞を使うべきです >>53

[32] MIME型は全体として意味を持つもので、 構造化構文接尾辞を除いた部分が一致したりしなかったりしても、 そのことに特別な意味はありません。

[36] ある仕様書example/foo+xml が定義されたとしても、 example/foo+json が自動的に定義されることはありません。 両者がまったく異なる意味で用いられる可能性すらあります。

[12] 構造化構文接尾辞を複数連ねることができるのかどうかは不明瞭です。


[9] MIME型は実際に使っていない構造化構文接尾辞を含めてはなりません >>53

[19] 構造化構文を表すために構造化構文接尾辞を使うことはできますが、 それが義務付けられているわけではありません。

[20] 動画音声container format構造化構文の定義に当てはまりそうではありますが、 container formatcodec の組み合わせに個別にMIME型を与えることはほとんどありません。 普通は container format ごとの一般的な MIME型を使い、 必要に応じて codecs 引数を補うことになっています。


[17] いつ構造化構文接尾辞付きMIME型を使うべきで、いつ一般的な MIME型を使うべきなのか、一般的な規則はなさそうです。

[18] 例えば XML に基づく言語である SVG は、 text/xml という一般的な MIME型image/svg+xml という専用の MIME型があります。 SVG に限れば image/svg+xml とした方が便利そうです。 しかしどちらを使うべきか (そもそも専用の MIME型を用意するべきか) の一般的な規則はなさそうです。

[37] なお、構造化構文接尾辞付きMIME型構造化構文接尾辞共通の素片識別子の規定に従わなければならない (そうでない場合は構造化構文接尾辞を使わない MIME型を使わなければならない) との規定があります。

IANA 登録簿

[10] 構造化構文接尾辞IANA登録簿 >>50 が (MIME型登録簿とは別に) あります >>53, >>14

[11] 未登録の構造化構文接尾辞を使うべきではありません >>53

[15] 現実には、登録されていないものもいくつか使われています。 (逆に登録されているのに使われていなそうなものもあります。)

構造化構文接尾辞の一覧

[16] 次のような構造化構文接尾辞が確認されています。

[29]

*/*+asn1ASN.1
*/*+berBER
*/*+bibtexBibTeX
*/*+binary
*/*+cborCBORapplication/cbor
*/*+csvCSVtext/csv
*/*+derDER
*/*+exiEXIapplication/exi
*/*+ext
*/*+fastinfosetFast Infoset
*/*+form
*/*+gzipGNU Zipapplication/gzip
*/*+hdr
*/*+html
*/*+jpgJPEGimage/jpeg
*/*+i-jsonI-JSON
*/*+jsonJSONapplication/json
*/*+json-seqJSON text sequenceapplication/json-seq
*/*+jwtJWT
*/*+n3N3text/n3
*/*+oggOgg container format
*/*+rcsRCS
*/*+rle
*/*+ruby
*/*+src
*/*+sqlite3application/vnd.sqlite3
*/*+swcfgSuikaWikiConfig/2.0
*/*+textテキスト
*/*+thriftThrift
*/*+tlv
*/*+yamlYAMLtext/yaml
*/*+vrmlVRMLmodel/vrml
*/*+wbxmlWBXML
*/*+xmlXMLapplication/xml
*/*+xml-compressed
*/*+xps
*/*+zipZipapplication/zip

[4] JSON 形式による構造化構文接尾辞の一覧データファイルが >>3 にあります。

素片識別子

[26] 素片識別子参照。

処理

[31] 具体的な処理については、各構造化構文接尾辞の項を参照。

[21] 構造化構文接尾辞は、未知の MIME型でも構造化構文がわかれば一般的な処理を適用できるはず、 という前提に基づいています。しかし実際にはその意図通りに実装されているとは限りません。

関連

[13] multipart/* は、時代が異なれば構造化構文接尾辞だったかもしれません。

[40] application/senml+xml などのシリーズと application/sensml+xml などのシリーズは、 EXI だけ (構造化構文接尾辞IANAに登録されていないためか) application/senml-exiapplication/sensml-exi になっています。

他の「+」の用法

[48] MIME型の中で + という記号は当初から予約されていたものではありませんでしたから、 構造化構文接尾辞以外の意味で + が使われることもあります。

[34] audio/amr-wb+ というのが登録されています。 application/xhtml+voice+xml には物言いがついたのに。 (名無しさん 2006-07-02 03:17:54 +00:00)

[35] ちなみに巷で使われているものにはほかに application/x-xhtml+voice+xml なんてのもあります。 (名無しさん 2006-07-02 03:19:04 +00:00)

[44] application/x-dd+ext ってのもありますね。

[51] text/x-c++, text/x-c++hdr, text/x-c++src, text/x-objective-c++ などもあります。

[5] application/x-tar+gzip圧縮形式を表しており、 厳密には構造化構文とはいえないかもしれません。

[24] application/rdf+xml+abbrev, application/json+ld, application/x-json+ld なるものもあります。 + が単なる語境界になってしまっています。

[25] CPHL は含まれる情報の種類を指定するためにいくつも + と種別を本来の MIME型の後に続けられるとしています。

[28] PygmentsJavaScriptPHPtext/javascript+php といったように言語の組み合わせを表すために + を使っています。

[30] text/x-h2h+htmlHTML が混用されるモードを表していました。

[38] oEmbed*/*+oembed を使っていますが、どちらかといえば xmljson のように * の部分の方が構造化構文に見えるものです。

[39] その他 application/json+*JSON応用を表す場合があるようです。

歴史

RFC 3023

[33] RFC 3023+xml 以来、 XMLXML応用のような関係を示すために、 媒体型の末尾に +書式名 のような文字列をつけるようになりました。

この接尾辞は、 RFC 3023+xml が定義されているのと、 RFC 4288 で (将来同様な規定が他の書式に対してもなされることに対して) 注意が促されている他は、明確に定義されているわけではありませんでした。

[52] RFC 3023 - XML Media Types ( ( 版)) <http://tools.ietf.org/html/rfc3023#appendix-A>

RFC 6838 / RFC 6839

[49] RFC 6838 で登録手続きが定義され、 RFC 6839 で用法が明確化されて初期状態での接尾辞の定義・登録が行われました。