朝日奈アンテナ meta data format version 2.2 (HINA/2.2) Document revision 0.11 2001/05/09 1. 概要 本文書は、更新時刻取得エージェント「朝日奈アンテナ」(http://masshy.fastwave.gr.jp/hina/release/) におけるmeta data formatである "hina-di" について記述したものである。 2. hina-diとは この文書では、あるweb上のコンテンツの情報(更新時刻・著者など)を"meta data"と呼称する。 hina-diは朝日奈アンテナにおけるmeta data記述formatである。朝日奈アンテナはhina-diを基本として、 他サイトの朝日奈アンテナ及び更新時刻取得エージェントと情報共有・交換を行う。 3. データ構造 3.1 BNF 本文書において、hina-diの全仕様はBNF(Backus-Naur Form)[RFC822]によって記述される。 3.2 データタイプ hina-diを構成するデータタイプを以下に挙げる。US-ASCIIのcharacter setはANSI X3.4-1986とする。 OCTET = CHAR = UPALPHA = LOALPHA = ALPHA = UPALPHA | LOALPHA DIGIT = WORD = 1*(ALPHA|DIGIT) CTL = CR = LF = SP = HT = <"> = CRLF = CR LF TEXT = TOKEN = SEPARATOR = ":" 1*(SP|HT) DELIMITER = "," *(SP|HT) SLASH = "/" *(SP|HT) 4. hina-diの構成 hina-diは あるコンテンツの情報「メタデータ(meta data)」をまとめたBlockからなる。 hina-di = Header-block ; 4.2 Header-block 1*( Entity-block ) ; 4.3 Entity-block 4.1 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のそれはfield-nameに依存。 4.2 Header-block 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 4.3 Entity-block Header-block以降のBlock。コンテンツのmeta dataを持つ。 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 ) 5. 定義field 5.1 HINA 自身がhina-diである事と、そのversionを示す。 HINA = "HINA" "/" hinadi-version CRLF hinadi-version = "2.2beta" 5.2 User-Agent hina-diを出力したagent名。このfieldは必須である。 User-Agent = "User-Agent" SEPARATOR TOKEN CRLF field-valueの大文字小文字区別: あり 5.3 URL コンテンツを明示するURL。このfieldは必須である。 このfieldは、Blockの先頭に置かれる事が推奨される。 URL = "URL" SEPARATOR rfc2396-url CRLF rfc2396-url = field-valueの大文字小文字区別: RFC 2396に準拠 5.4 HINA-Version その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が不完全であり、 一部が欠落している可能性がある事を意味する。 5.5 Virtual そのEntity-blockのmeta dataの取得先URL。 このfieldで指定されたURLのmeta dataを「5.3 URL」のmeta dataとして 使用していることを意味する。 このfieldが無い場合、meta dataの取得先は「5.3 URL」であることを意味する。 Virtual = "Vitural" SEPARATOR rfc2396-url CRLF rfc2396-url = field-valueの大文字小文字区別: RFC 2396に準拠 5.6 Content-Type hina-diもしくはコンテンツのContent-type。 ( Header-block内: hina-di自体のContent-Type Entity-block内: コンテンツのContent-Type ) Content-Type = "Content-Type" SEPARATOR rfc1521-type CRLF rfc1521-type = field-valueの大文字小文字区別: RFC1521に準拠 5.7 Date hina-diもしくはそのblockを出力した時刻 Date = "Date" SEPARATOR rfc1123-date CRLF rfc1123-date = field-valueの大文字小文字区別: なし 5.8 Title コンテンツのタイトル Title = "Title" SEPARATOR TOKEN CRLF field-valueの大文字小文字区別: あり 5.9 Author-Name コンテンツの著者名 Author-Name = "Author-Name" SEPARATOR TOKEN CRLF field-valueの大文字小文字区別: あり 5.10 Expires そのblockの情報の有効期限 Expires = "Expires" SEPARATOR rfc1123-date CRLF rfc1123-date = field-valueの大文字小文字区別: RFC2616に準拠 5.11 Expire そのblockの情報の有効期限。Expiresと同一の情報を記載する。 Expire は下位互換性のために記述される。 Expire = "Expire" SEPARATOR rfc1123-date CRLF rfc1123-date = field-valueの大文字小文字区別: RFC2616に準拠 5.12 Last-Modified そのblockが示すコンテンツの更新時刻 Last-Modified = "Last-Modified" SEPARATOR rfc1123-date CRLF rfc1123-date = field-valueの大文字小文字区別: RFC2616に準拠 5.13 Last-Modified-Detected そのblockのmeta dataの情報取得 Last-Modified-Detected = "Last-Modified-Detected" SEPARATOR rfc1123-date CRLF rfc1123-date = field-valueの大文字小文字区別: RFC2616に準拠 5.14 Server そのblockが示すコンテンツのmeta dataを取得に使用されたサーバ名 Server = "Server" SEPARATOR TOKEN CRLF field-valueの大文字小文字区別: あり 5.15 Authorized そのblockが示すコンテンツのmeta dataを取得したエージェント名 Authorized = "Authorized" SEPARATOR TOKEN CRLF WORD field-valueの大文字小文字区別: あり 5.16 Authorized-url 「5.14 Authorized」で示されるエージェントを識別するURL Authorized-url = "Authorized-url" SEPARATOR rfc2396-url CRLF rfc2396-url = field-valueの大文字小文字区別: RFC2396に準拠 5.17 Method そのblockの取得経緯 Method = "Method" SEPARATOR method-type *(SLASH method-type) (SLASH result-code) method-type = "GET" | "HEAD" | "FILE" | "REMOTE" result-code = GET HTTPのGETリクエストで取得 HEAD HTTPのHEADリクエストで取得 FILE ファイルのタイムスタンプから取得 REMOTE 他のエージェントが出力したEntity-blockから取得 method-typeは左側に追記されることで情報伝播を記録される。 (例) Method: REMOTE/REMOTE/GET/200 GET/200 エージェントAがGETリクエストで取得した情報を元に生成したhina-di(A)に 含まれるEntity-blockを、 REMOTE エージェントBが取得してhina-di(B)に出力し、 REMOTE そのEntity-blockをこのエージェントが取得した。 5.18 Keyword そのblockが示すコンテンツの概要を示す任意の単語(複数可)。 Keyword = "Keyword" SEPARATOR keywords CRLF keywords = word *(DELIMITER word) word = TOKEN field-valueの大文字小文字区別: あり 5.19 Image-Width そのblockが示すコンテンツが画像データの場合、その画像幅(pixel数) Image-Width = "Image-Width" SEPARATOR width CRLF width = DIGIT 5.20 Image-Height そのblockが示すコンテンツが画像データの場合、その画像高(pixel数) Image-Width = "Image-Height" SEPARATOR width CRLF width = DIGIT 6. Experimental-field 実験的field。情報伝播は保証されない。 Experimental-field = x-field-name SEPARATOR value x-field-name = "X-" WORD *( "-" WORD) value = TOKEN 7. Undefined-field 「5. 定義field」「6. Experimental-field」以外のすべてのfield。 情報伝播は保証されない。 undefined-field = undef-field-name SEPARATOR value CRLF undef-field-name = WORD *( "-" WORD) value = TOKEN 8. Character Encoding hina-diのCharacter Encodingは、Header-block内「5.6 Content-Type」で 指定されるものとする。未指定の場合は EUC-JP とする。 9. meta dataの完全性 あるコンテンツにおける取得可能な全てのmeta dataは、Entity-blockに 出力されなくてはならない。 情報取得を行わなかったfieldは、Entity-blockに存在してはならない。 10. 重複feild 1つのEntity-block内に同一fieldが複数存在してはならない。同一fieldが 複数存在するEntity-blockは破棄されなくてはならない。 10. meta dataの正当性 meta dataの情報正当性は、 ・「5.15 Authorized」 ・「5.16 Authorized-url」 によって示されるエージェントが保証する物とする。 複数のエージェントから取得した、同一「5.3 URL」のmeta dataを混合して 利用・出力してはならない。 他のエージェントより取得したmeta dataは必ずblock単位に出力しなくてはいけない。 また、その内容を改変してはならない。 ただし、「5.17 Method」は例外とする。 12. meta dataの伝播 hina-diに含まれるmeta dataは伝播させることができる。 エージェントは、「11. meta dataの正当性」を保持する限り、 他のエージェントが出力した meta dataを 自らが出力するhina-diに 含めることができる。 この時Entity-blockのMethod fieldは、「5.17 Method」に準じ処理されなくては ならない。 12.1 伝播の対象 伝播が許されるblockは、Entity-blockのみである。 他のエージェントが出力したhina-diのHeader-blockの全てまたは一部を 伝播させてはならない。 12.2 伝播の未保証 「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は含まれない。