Document revision 0.13 2002/07/19
本文書は、更新時刻取得エージェント「朝日奈アンテナ」におけるmeta data formatである "hina-di" について記述したものである。
この文書では、あるweb上のコンテンツの情報(更新時刻・著者など)を"meta data"と呼称する。 hina-diは朝日奈アンテナにおけるmeta data記述formatである。朝日奈アンテナはhina-diを基本として、他サイトの朝日奈アンテナ及び更新時刻取得エージェントと情報共有・交換を行う。
本文書において、hina-diの全仕様はBNF(Backus-Naur Form)によって記述される。
hina-diを構成するデータタイプを以下に挙げる。US-ASCIIのcharacter setはANSI X3.4-1986とする。
OCTET = <any 8-bit sequence of data> CHAR = <any US-ASCII character (octets 0 - 127)> UPALPHA = <any US-ASCII uppercase letter "A".."Z"> LOALPHA = <any US-ASCII lowercase letter "a".."z"> ALPHA = UPALPHA | LOALPHA DIGIT = <any US-ASCII digit "0".."9"> WORD = 1*(ALPHA|DIGIT) CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)> CR = <US-ASCII CR, carriage return (13)> LF = <US-ASCII LF, linefeed (10)> SP = <US-ASCII SP, space (32)> HT = <US-ASCII HT, horizontal-tab (9)> <"> = <US-ASCII double-quote mark (34)> CRLF = CR LF TEXT = <any OCTET except CTLs, but including HT> TOKEN = <any TEXT, but don't start with SP or HT> SEPARATOR = ":" 1*(SP|HT) DELIMITER = "," *(SP|HT) SLASH = "/" *(SP|HT)
hina-diは あるコンテンツの情報「メタデータ(meta data)」をまとめたBlockからなる。
hina-di = Header-block ; 4.2 Header-block 1*( Entity-block ) ; 4.3 Entity-block
あるコンテンツについて記述されたmeta dataのまとまり。 Blockには「4.2 Header-block」と「4.3 Entity-block」の2つがある。
Blockは以下の行指向フォーマット(Line-format)で記述される。 ただし「5.1 HINA」を除く。
Line-format = field-name SEPARATOR field-value CRLF field-name = WORD *( "-" WORD) field-value = TOKEN
field-nameは大文字・小文字の区別なし。field-valueはあり。ただし個別に指定があるものはそれに従う。
hina-diの先頭にあるBlock。hina-di自身の情報を持つ。
Header-block = HINA ; 5.1 HINA Hinadi-Header CRLF Hinadi-header = 1*( User-Agent ; 5.2 User-Agent | Content-Type ; 5.6 Content-Type | Date ) ; 5.7 Date
Header-block以降のBlock。コンテンツのmeta dataを持つ。 Entity-blockはコンテンツそれ自身が持つ情報を保持する。 ただし「6. Experimental-field」はその限りではない。
Entity-block = URL ; 5.3 URL ( HINA-Version ; 5.4 HINA-Version | Virtual ; 5.5 Virtual | Content-Type ; 5.6 Content-Type | Date ; 5.7 Date | Title ; 5.8 Title | Author-Name ; 5.9 Author-Name | Expires ; 5.10 Expires | Expire ; 5.11 Expire | Last-Modified ; 5.12 Last-Modified | Last-Modified-Detected ; 5.13 Last-Modified-Detected | Server ; 5.14 Server | Authorized ; 5.15 Authorized | Authorized-url ; 5.16 Authorized-url | Method ; 5.17 Method | Keyword ; 5.18 Keyword | Image-Width ; 5.19 Image-Width | Image-Height ; 5.19 Image-Height | Experimental-field ; 6. Experimental-field | Undefined-field ) ; 7. Undefined-field CRLF
自身がhina-diである事と、そのversionを示す。
HINA = "HINA" "/" hinadi-version CRLF hinadi-version = "2.2beta"
hina-diを出力したagent名。このfieldは必須である。
User-Agent = "User-Agent" SEPARATOR TOKEN CRLF
コンテンツを明示するURL。他のコンテンツ情報との区別はこのfieldで行う。このfieldは必須である。このfieldは、Blockの先頭に置くものとする。
このfieldは
とする。ドメイン部以降も大文字小文字の区別が無いURLの場合、すべて小文字で表記するものとする。
URL = "URL" SEPARATOR rfc2396-url CRLF rfc2396-url = <URI described on "5.1.2 Request-URI" in RFC 2396> field-valueの大文字小文字区別: RFC 2396に準拠
URL fieldの一意性を保証するため、URL fieldは以下の条件を満たすURLでなくてはならない。 この条件を満たすことは、hina-di提供エージェント(及びその管理者)によって保証される。
例: 次の3つのURLが同一のコンテンツを示す場合、URL fieldには1を設定しなくてはならない。 (1) http://www.hoge.jp/foo/ (2) http://www.hoge.jp/foo (3) http://www.hoge.jp/foo/index.html
そのEntity-blockが、「9. meta dataの完全性」も含め完全準拠しているhina-diのバージョン。一部準拠の場合はこのfieldを明示してはならない。
HINA-Version = "HINA-Version" SEPARATOR version version = "HINA" "/" 1*( DIGIT ) "." 1*( DIGIT )
このfieldは、versionで示されるhina-diで定義されるmeta dataの完全性が保証されている事を意味する。 このfieldが存在しない場合、そのEntity-blockのmeta dataが不完全であり、一部が欠落している可能性がある事を意味する。
そのEntity-blockのmeta dataの取得先URL。 このfieldで指定されたURLのmeta dataを「5.3 URL」のmeta dataとして使用していることを意味する。 「5.3 URL」で示されるmeta dataと本fieldで示されるmeta dataが異なる場合、前者の情報の一部をこのEntity-blockに含めてはならない。
URL表記上の条件は「5.3 URL」に準じる。 このfieldが無い場合、meta dataの取得先は「5.3 URL」であることを意味する。
Virtual = "Vitural" SEPARATOR rfc2396-url CRLF rfc2396-url = <URI described on "5.1.2 Request-URI" in RFC 2396>
hina-diもしくはコンテンツのContent-Type。
Content-Type = "Content-Type" SEPARATOR rfc1521-type CRLF rfc1521-type = "Content-Type" ":" type "/" subtype *(";"parameter) type = "application" | "audio" | "image" | "message" | "multipart" | "text" | "video" | extension-token extension-token = x-token / iana-token iana-token = <a publicly-defined extension token, registered with IANA, as specified in appendix E> x-token = <The two characters "X-" or "x-" followed, with no intervening white space, by any token> subtype = TOKEN parameter = attribute "=" value attribute = TOKEN ; case-insensitive value = token / quoted-string token = 1*<any (ASCII) CHAR except SPACE, CTLs or tspecials> tspecials = "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / "¥" / <"> / "/" / "[" / "]" / "?" / "=" ; Must be in quoted-string to use within parameter values
hina-diもしくはそのblockを出力した時刻。
Date = "Date" SEPARATOR rfc1123-date CRLF rfc1123-date = wkday "," SP day-month-year SP time SP "GMT" wkday = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun" day-month-year = 2*DIGIT SP month SP 4*DIGIT ; day month year (e.g. 02 Jun 1982) time = 2*DIGIT ":" 2*DIGIT ":" 2*DIGIT ; 00:00:00 - 23:59:59 month = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec"
コンテンツのタイトル。
Title = "Title" SEPARATOR TOKEN CRLF
コンテンツの著者名。
Author-Name = "Author-Name" SEPARATOR TOKEN CRLF
そのblockの情報の有効期限。
Expires = "Expires" SEPARATOR rfc1123-date CRLF
そのblockの情報の有効期限。Expiresと同一の情報を記載する。 Expire は下位互換性のために記述される。
Expire = "Expire" SEPARATOR rfc1123-date CRLF
そのblockが示すコンテンツの更新時刻。
Last-Modified = "Last-Modified" SEPARATOR rfc1123-date CRLF
そのblockのmeta dataの情報取得。
Last-Modified-Detected = "Last-Modified-Detected" SEPARATOR rfc1123-date CRLF
そのblockが示すコンテンツのmeta dataを取得に使用されたサーバ名。
Server = "Server" SEPARATOR TOKEN CRLF
そのblockが示すコンテンツのmeta dataを取得したエージェント名。
Authorized = "Authorized" SEPARATOR TOKEN CRLF WORD
「5.15 Authorized」で示されるエージェントを識別するURL。 URL表記上の条件は「5.3 URL」に準じる。
Authorized-url = "Authorized-url" SEPARATOR rfc2396-url CRLF rfc2396-url = <URI described on "5.1.2 Request-URI" in RFC 2396>
そのblockの取得経緯。
Method = "Method" SEPARATOR method-type *(SLASH method-type) (SLASH result-code) method-type = "GET" | "HEAD" | "FILE" | "REMOTE" result-code = <URI described on "???????" in RFC 2396> * GET HTTPのGETリクエストで取得 * HEAD HTTPのHEADリクエストで取得 * FILE ファイルのタイムスタンプから取得 * REMOTE 他のエージェントが出力したEntity-blockから取得
method-typeは左側に追記されることで情報伝播を記録される。
(例) Method: REMOTE/REMOTE/GET/200 (1) GET/200 エージェントAがGETリクエストで取得した情報を元に生成したhina-di(A)に含まれるEntity-blockを、 (2) REMOTE エージェントBが取得してhina-di(B)に出力し、 (3) REMOTE そのEntity-blockをこのエージェントが取得した。
そのblockが示すコンテンツの概要を示す任意の単語(複数可)。
Keyword = "Keyword" SEPARATOR keywords CRLF keywords = word *(DELIMITER word) word = TOKEN
そのblockが示すコンテンツが画像データの場合、その画像幅(pixel数)
Image-Width = "Image-Width" SEPARATOR width CRLF width = DIGIT
そのblockが示すコンテンツが画像データの場合、その画像高(pixel数)
Image-Width = "Image-Height" SEPARATOR width CRLF width = DIGIT
実験的field。情報伝播は保証されない。 コンテンツ自身が持つ情報以外の情報をEntity-blockに記述する場合、このfieldを使用すること。
例) 「5.9 Author-Name」とは異なる著者の呼称、エージェント独自提供情報など
Experimental-field = x-field-name SEPARATOR value x-field-name = "X-" WORD *( "-" WORD) value = TOKEN
「5. 定義field」「6. Experimental-field」以外のすべてのfield。 情報伝播は保証されない。
undefined-field = undef-field-name SEPARATOR value CRLF undef-field-name = WORD *( "-" WORD) value = TOKEN
hina-diのCharacter Encodingは、Header-block内「5.6 Content-Type」で指定されるものとする。未指定の場合は EUC-JP とする。
あるコンテンツにおける取得可能な全てのmeta dataは、Entity-blockに出力されなくてはならない。 情報取得を行わなかったfieldは、Entity-blockに存在してはならない。
1つのEntity-block内に同一fieldが複数存在してはならない。同一fieldが複数存在するEntity-blockは破棄されなくてはならない。
どのfieldにもあてはまらないfieldを持つEntity-blockおよび不正なfield記述を持つEntity-Blockは破棄されなくてはならない。
meta dataの情報正当性は、
によって示されるエージェントが保証する物とする。 複数のエージェントから取得した、同一「5.3 URL」のmeta dataを混合して利用・出力してはならない。
他のエージェントより取得したmeta dataは必ずblock単位に出力しなくてはいけない。また、その内容を改変してはならない。 ただし、「5.17 Method」は例外とする。
hina-diに含まれるmeta dataは伝播させることができる。 エージェントは、「12. meta dataの正当性」を保持する限り、他のエージェントが出力した meta dataを 自らが出力するhina-diに含めることができる。 この時Entity-blockのMethod fieldは、「5.17 Method」に準じ処理されなくてはならない。
伝播が許されるblockは、Entity-blockのみである。 他のエージェントが出力したhina-diのHeader-blockの全てまたは一部を伝播させてはならない。
「6. Experimental-field」「7. Undefined-field」の伝播は保証されない。
(例) [エージェントA] | (出力) ↓ [hina-di A] ---(取得)-->[エージェントB] | (出力) ↓ [hina-di B] ---(取得)-->[エージェントC] * エージェントA: Experimental-field、Undefined-fieldを伝播する * エージェントB: 伝播しない
上記のような伝播の場合、[hina-di B]には、[hina-di A]に含まれていたExperimental-field、Undefined-fieldは含まれない。
hina-diをNativeとするmet1a data取得エージェント。
著者、タイトル、更新時刻など、コンテンツそのものに関する情報。
meta dataのこと。
朝日奈アンテナ ver.2.x系におけるmeta data転送フォーマット。
朝日奈アンテナ ver.1.x系で使用されていたmeta data転送フォーマット。hina-diと比べると扱う情報の汎用性が低いがその分軽量である。ver.2.x系ではobsolute。
DIXSで使用されるmeta data転送形式。Document Informationの略。hina-diはDIの影響を受けているので似ているが別物であるので注意。