2004年07月07日
RDFの書式を修正しました(ライブドアMAP トラックバックのRSS)
http://kokogiko.net/ldm.f
で公開しているライブドアMAP トラックバックのRSSですが、RDF的に書式がおかしいところがあったので、修正しました。
当初、五反田周辺で半径6kmのRSSだと、五反田(北緯35.62583度、東経139.71695度)あたりを中心として、3の8乗mのオーダ内、という事で、geoボキャブラリとgeo-onionボキャブラリを流用して
<channel rdf:about="...">
<go:within_3_power_8_metres>
<geo:Point>
<geo:lat>35.62583
<geo:long>139.71695
</geo:Point>
</go:within_3_power_8_metres>
<!--その他の要素-->
</channel>
といった感じの記述にしていたのですが、これだと「このRSS自体」が五反田周辺で半径6km以内に存在する事になってしまうようです。
実際には、「このRSSが取り扱っている話題」が五反田周辺で半径6km以内に存在するわけなので、これではおかしいと言う事のようです。
それならどう記述するかだけど、基本の考え方は、どのようなモデルにするかという事を先立って考える事。
今回の場合、xml-users メーリングリストで教えてくださった方の分析例を挙げると、(以下、適宜引用)
>このRSS の トピック は ある範囲A(について)である
>ある範囲A の 半径6km以内 には 位置Bがある
>位置B の 緯度 は 35.62583である
>位置B の 経度 は 139.71695である
というモデルが考えられ、これをRDFに直すと、
<channel rdf:about="...">
<foaf:topic>
<rdf:Description> <!-- 範囲Aの匿名リソース -->
<go:within_3_power_8_metres>
<geo:Point> <!-- 位置Bの匿名リソース -->
<geo:lat>35.62583
<geo:long>139.71695
</geo:Point>
</go:within_3_power_8_metres>
</rdf:Description>
</foaf:topic>
<!-- そのほか -->
</channel>
といった形になる。
でもって匿名リソースであるrdf:Description要素は省略できるので、最終的には
<channel rdf:about="...">
<foaf:topic>
<go:within_3_power_8_metres>
<geo:Point> <!-- 位置Bの匿名リソース -->
<geo:lat>35.62583
<geo:long>139.71695
</geo:Point>
</go:within_3_power_8_metres>
</foaf:topic>
</channel>
といった形が正しいみたいで、実際そのように変更しました。
ここで、同じ匿名リソースであっても、rdf:Descriptionは省略できてもgeo:Pointは省略できません。
というか、してはいけない事はないのだけれど、rdf:Descriptionは省略しても形式だけの問題で意味の欠落はないのだけど、geo:Pointは、
<geo:Point>...</geo:Point>
は
<rdf:Description><rdf:type rdf:resource="http://www.w3.org/2003/01/geo/wgs84_pos#Point"/>...</rdf:Description>
と同値なので、省略するとデータ型に関する意味的な欠落が生じてしまう、という事みたい。
また、このモデルでは、直感的には位置Bが範囲Aの外に出てしまう可能性を感じてしまいますが、既存のgeo-onionのプロパティでは二点間の距離しか定義できないので、不十分であればgeo-onionをベースに新しいボキャブラリを作るのもアリ、という事のようです。
あんまりそこまで大それた事をする気もないので、「範囲A内の全ての点に対して」半径6km以内と解釈すれば内包以外にありえないですし、今回はこの書式でいこうと思います。
ちなみに、今回はchannel要素への位置情報の付加でしたが、個々のエントリに位置を付加する場合の考え方についても教えていただきました。
が、あまりこっちで引用し過ぎてもアレなので、興味のある方はxml-usersメーリングリストの過去ログページへどうぞ。
私も今回のRSSでは個別エントリへの位置付加はできないので見合わせてますが、将来的にアンテナ奪取のRSS等も出したいと思っているので、その際は教えてもらったモデルに従って記述したいと思ってます。
#ちなみに、全然話は変わるんですけど、PerlモジュールのXML::RSSって、便利なんだけど要素の重層化ができないみたいですね…。
#今回のRSS発行でも、foaf:topic配下の要素は、全部テキストとしてデータに突っ込んだ後、出力時に<にエスケープされた<を正規表現で置き換えてやってるんですが…。
#一般的なRSSの使われ方からすれば仕方ないのかも知れないですが、RSS1.0はRDFとしての側面も持っている事を考えれば、重層化もあり得るわけなので対応して欲しかったなと。
Posted with ecto
Excerpt: いろいろ検索していたら一地域について書かれているエントリを集めたRSS ...
Weblog: weavin' in the vanguard
Tracked: 2004年07月09日 02:08
![[ここギコ!]](http://kokogiko.net/logo.png)



・国連人権委、アイヌ・琉球文化の保護を日本に勧告(ほるほる)
・GoogleMapsと連動したいならPostGISの他にmysqlという選択肢も出てきた あとジオメディアサミット関西も(okumula)
・人員がクラスタ化できている職場と言うのはうらやましい そろそろ限界です(「ま」のつく人)
・もうAmazonクレジットカードは使いません...楽天カード一本で。(名無し)
・ジオメディア忘年会 新年会から始まり東京1、2、関西と続いたジオメディア2008の締めくくり(ぴかぴか)
・GoogleMapsと連動したいならPostGISの他にmysqlという選択肢も出てきた あとジオメディアサミット関西も(kokogiko)
・GoogleMapsと連動したいならPostGISの他にmysqlという選択肢も出てきた あとジオメディアサミット関西も(かやま)
・なんか天から2兆円降ってくるらしいので みんな思い思いのところに募金なり寄付するのはどうか(大阪府民)
・なんか天から2兆円降ってくるらしいので みんな思い思いのところに募金なり寄付するのはどうか(kokogiko)