Title: 朝日奈アンテナ meta data format version 2.2 (HINA/2.2)

Document revision 0.13 2002/07/19

1 概要

本文書は、更新時刻取得エージェント「朝日奈アンテナ」における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)によって記述される。

3.2 データタイプ

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)

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はあり。ただし個別に指定があるものはそれに従う。

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はコンテンツそれ自身が持つ情報を保持する。 ただし「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

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

5.3 URL

コンテンツを明示する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提供エージェント(及びその管理者)によって保証される。

  1. URL最後が"/"で終えることができる場合、この"/"を省略してはならない
  2. URLがファイル名で終わりかつそのファイルが省略できる場合、このファイル名を省略しなくてはならない。
例: 次の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

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として使用していることを意味する。 「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>

5.6 Content-Type

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

5.7 Date

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"

5.8 Title

コンテンツのタイトル。

Title	 = "Title" SEPARATOR TOKEN CRLF

5.9 Author-Name

コンテンツの著者名。

Author-Name  = "Author-Name" SEPARATOR TOKEN CRLF

5.10 Expires

そのblockの情報の有効期限。

Expires  = "Expires" SEPARATOR rfc1123-date CRLF

5.11 Expire

そのblockの情報の有効期限。Expiresと同一の情報を記載する。 Expire は下位互換性のために記述される。

Expire  = "Expire" SEPARATOR rfc1123-date CRLF

5.12 Last-Modified

そのblockが示すコンテンツの更新時刻。

Last-Modified  = "Last-Modified" SEPARATOR rfc1123-date CRLF

5.13 Last-Modified-Detected

そのblockのmeta dataの情報取得。

Last-Modified-Detected  = "Last-Modified-Detected" SEPARATOR rfc1123-date CRLF

5.14 Server

そのblockが示すコンテンツのmeta dataを取得に使用されたサーバ名。

Server  = "Server" SEPARATOR TOKEN CRLF

5.15 Authorized

そのblockが示すコンテンツのmeta dataを取得したエージェント名。

Authorized  = "Authorized" SEPARATOR TOKEN CRLF WORD

5.16 Authorized-url

「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>

5.17 Method

その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をこのエージェントが取得した。

5.18 Keyword

そのblockが示すコンテンツの概要を示す任意の単語(複数可)。

Keyword   = "Keyword" SEPARATOR keywords CRLF
keywords  = word *(DELIMITER word)
word      = TOKEN

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。情報伝播は保証されない。 コンテンツ自身が持つ情報以外の情報をEntity-blockに記述する場合、このfieldを使用すること。

例) 「5.9 Author-Name」とは異なる著者の呼称、エージェント独自提供情報など

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 重複field

1つのEntity-block内に同一fieldが複数存在してはならない。同一fieldが複数存在するEntity-blockは破棄されなくてはならない。

11 不正field

どのfieldにもあてはまらないfieldを持つEntity-blockおよび不正なfield記述を持つEntity-Blockは破棄されなくてはならない。

12 meta dataの正当性

meta dataの情報正当性は、

によって示されるエージェントが保証する物とする。 複数のエージェントから取得した、同一「5.3 URL」のmeta dataを混合して利用・出力してはならない。

他のエージェントより取得したmeta dataは必ずblock単位に出力しなくてはいけない。また、その内容を改変してはならない。 ただし、「5.17 Method」は例外とする。

13 meta dataの伝播

hina-diに含まれるmeta dataは伝播させることができる。 エージェントは、「12. meta dataの正当性」を保持する限り、他のエージェントが出力した meta dataを 自らが出力するhina-diに含めることができる。 この時Entity-blockのMethod fieldは、「5.17 Method」に準じ処理されなくてはならない。

13.1 伝播の対象

伝播が許されるblockは、Entity-blockのみである。 他のエージェントが出力したhina-diのHeader-blockの全てまたは一部を伝播させてはならない。

13.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は含まれない。

14 Appendix

14.1 関連用語

朝日奈アンテナ

hina-diをNativeとするmet1a data取得エージェント。

meta data

著者、タイトル、更新時刻など、コンテンツそのものに関する情報。

メタデータ

meta dataのこと。

hina-di

朝日奈アンテナ ver.2.x系におけるmeta data転送フォーマット。

hina.txt

朝日奈アンテナ ver.1.x系で使用されていたmeta data転送フォーマット。hina-diと比べると扱う情報の汎用性が低いがその分軽量である。ver.2.x系ではobsolute。

DI

DIXSで使用されるmeta data転送形式。Document Informationの略。hina-diはDIの影響を受けているので似ているが別物であるので注意。

15 更新履歴