427 lines
19 KiB
Plaintext
427 lines
19 KiB
Plaintext
朝日奈アンテナ meta data format version 2.2 (HINA/2.2)
|
||
|
||
Document revision 0.12
|
||
2001/11/07
|
||
|
||
|
||
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 = <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のそれは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はコンテンツそれ自身が持つ情報を保持する。
|
||
ただし「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
|
||
|
||
field-valueの大文字小文字区別: あり
|
||
|
||
5.3 URL
|
||
|
||
コンテンツを明示するURL。他のコンテンツ情報との区別はこのfieldで行う。
|
||
このfieldは必須である。このfieldは、Blockの先頭に置くものとする。
|
||
このfieldは
|
||
・"http://"及びドメイン部は大文字小文字区別なし
|
||
・ドメイン部以降は区別あり
|
||
とする。ドメイン部以降も大文字小文字の区別が無い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にはaを設定しなくてはならない。
|
||
a. http://www.hoge.jp/foo/
|
||
b. http://www.hoge.jp/foo
|
||
c. 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として
|
||
使用していることを意味する。
|
||
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>
|
||
|
||
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 = <Content-Type described in RFC1521>
|
||
|
||
field-valueの大文字小文字区別: RFC1521に準拠
|
||
|
||
5.7 Date
|
||
|
||
hina-diもしくはそのblockを出力した時刻
|
||
|
||
Date = "Date" SEPARATOR rfc1123-date CRLF
|
||
rfc1123-date = <rfc1123-date described on "3.3 Date/Time Formats" in RFC2616>
|
||
|
||
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 = <rfc1123-date described on "3.3 Date/Time Formats" in RFC2616>
|
||
|
||
field-valueの大文字小文字区別: RFC2616に準拠
|
||
|
||
5.11 Expire
|
||
|
||
そのblockの情報の有効期限。Expiresと同一の情報を記載する。
|
||
Expire は下位互換性のために記述される。
|
||
|
||
Expire = "Expire" SEPARATOR rfc1123-date CRLF
|
||
rfc1123-date = <rfc1123-date described on "3.3 Date/Time Formats" in RFC2616>
|
||
|
||
field-valueの大文字小文字区別: RFC2616に準拠
|
||
|
||
5.12 Last-Modified
|
||
|
||
そのblockが示すコンテンツの更新時刻
|
||
|
||
Last-Modified = "Last-Modified" SEPARATOR rfc1123-date CRLF
|
||
rfc1123-date = <rfc1123-date described on "3.3 Date/Time Formats" in RFC2616>
|
||
|
||
field-valueの大文字小文字区別: RFC2616に準拠
|
||
|
||
5.13 Last-Modified-Detected
|
||
|
||
そのblockのmeta dataの情報取得
|
||
|
||
Last-Modified-Detected = "Last-Modified-Detected" SEPARATOR rfc1123-date CRLF
|
||
rfc1123-date = <rfc1123-date described on "3.3 Date/Time Formats" in RFC2616>
|
||
|
||
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
|
||
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>
|
||
|
||
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 = <URI described on "???????" in RFC 2396>
|
||
|
||
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。情報伝播は保証されない。
|
||
コンテンツ自身が持つ情報以外の情報を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. 重複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は含まれない。
|
||
|