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の影響を受けているので似ているが別物であるので注意。