weavin'

2005-08-190106

[][][] Multiple Accounts in Autodiscovery

昨日書こうと思っててすっかり忘れてたことを。はてなだけではなく、別のアカウント情報をAutodiscoveryにて埋め込む方法と、注意点についてです。

Account Autodiscoveryの仕様がまとまってはてなポイントを贈るなんてページができたのはいいんですが、複数のアカウントを記述する方法が書かれていないんですよ。これだとはてなの外にこの仕様が広がらないので、なんか面白くありません。というわけでここに書いてみます。

とりあえずソースをごらんくださいな。

<rdf:RDF
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:foaf="http://xmlns.com/foaf/0.1/">

<rdf:Description rdf:about="http://example.com/permalink">
  <foaf:maker rdf:parseType="Resource">

    <!-- ひとつめ -->
    <foaf:holdsAccount>
      <foaf:OnlineAccount foaf:accountName="kotastyle">
        <foaf:accountServiceHomepage rdf:resource="http://www.hatena.ne.jp/"/>
      </foaf:OnlineAccount>
    </foaf:holdsAccount>

    <!-- ふたつめ -->
    <foaf:holdsAccount>
      <foaf:OnlineAccount  foaf:accountName="kota">
        <foaf:accountServiceHomepage rdf:resource="http://example.com/"/>
      </foaf:OnlineAccount>
    </foaf:holdsAccount>

    <!-- みっつでもよっつでもいつつでも -->

  </foaf:maker>
</rdf:Description>
</rdf:RDF>

というわけで、複数のアカウント情報を記述する場合には、foaf:holdsAccountのブロックをアカウントの数だけfoaf:makerに用意しなければなりません。

「なんでふたつのfoaf:OnlineAccountを、一緒にひとつのfoaf:holdsAccountに入れられないのか」という疑問を持った方、するどいです。でもだめなんです、XML的には不思議じゃないんですが、RDF的に困るのです。

具体的な説明をすると混乱する人しか出ないような気がするので、ちょっとつっこんで理解したい方は、神崎先生の書かれた複数の知人を示すときの注意点をお読みください。文中のfoaf:knowsをfoaf:holdsAccountに、foaf:Personをfoaf:OnlineAccountに読み替えると、疑問への答えとなりますので。

というわけで、アカウントの数だけfoaf:holdsAccountを記述してください。Autodiscoveryを解析して実装する方々も、この点に関してはご注意を。

そうそう、先ほどの例は僕が一番スマートに思うものを書いたのですが、実はアカウントの数だけrdf:RDFなブロックを記述しても、意味的におかしいところはないのですよ(実装がどうなのかは知りませんが)。ただ、面倒なので複数のfoaf:holdsAccountでAutodiscoveryを記述するのをおすすめしたいです。

はてな側にもこれをどこかに書いておいて欲しいなとおもったり。

2005-08-020104

[][][]Account Autodiscovery Meets XHTML2

さてさて、Account Autodiscoveryの話題が落ち着いたらしいですね。XHTML文書中にそのままRDF/XMLな文を埋め込むのはどうなのかなあと思ったりしますが、まあコメントよりはいいかとも思ったり。

というわけでXHTML 2.0だとどうなるかを書いてみました。ソースを書くのに思ったより時間がかかってしまったので、「説明お願い」とか言われたら詳しく書くことにします。ではソースをどうぞ。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 2.0//EN"
  "http://www.w3.org/MarkUp/DTD/xhtml2.dtd">
<html xmlns="http://www.w3.org/2002/06/xhtml2/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.w3.org/2002/06/xhtml2/
                      http://www.w3.org/MarkUp/SCHEMA/xhtml2.xsd"
  xmlns:foaf="http://xmlns.com/foaf/0.1/">
<head>
  <title>Embedding Account Autodiscovery in XHTML2 Documents</title>
  <link rel="foaf:maker">
    <link property="foaf:holdsAccount">
      <meta property="foaf:accountName" content="hatena"/>
      <link property="foaf:accountServiceHomepage"
        href="http://www.hatena.ne.jp/"/>
    </link>
  </link>
</head>
<body></body>
</html>

長く見えるのですが、head要素内の情報(title以外)がAccount AutodiscoveryのRDF版と等価です。そのはず。

現在のドラフト(2005年5月27日版)にあるMetainformation ModuleMetainformation Attributes Moduleに沿って書いてあるので、これからの変更により変わっていくかもしれません。

とりあえず、XTHML2でのメタデータ表現はこうなるぞってのを書いてみたかったので書いてみました。ではでは。

追記追記。dc:creatorからfoaf:makerになったので、変更しました。

2005-07-160102

[][] Geographical Information in Hatena Map & GeoURL Feeds

はてなの RSS (RDF/XML) には,いつもがっかりにて、はてなマップのRSSが持つ問題についてまとめられています。同じ事を書こうと思ってたのですが遅くなってしまったので、位置情報についての補足なんかを。

はてなマップのRSSには、各itemにgeo:latとgeo:longで位置情報が記述されているのですが、現在の記述ではRDFを解釈すると不都合が起こる場合があります。「株式会社はてな」のキーワードを例に取ってみます。

<item rdf:about="http://d.hatena.ne.jp/keyword/%b3%f4%bc%b0%b2%f1%bc%d2%a4%cf%a4%c6%a4%ca">
  <title>株式会社はてな</title>
  <link>http://d.hatena.ne.jp/keyword/%b3%f4%bc%b0%b2%f1%bc%d2%a4%cf%a4%c6%a4%ca</link>
  <description>人力検索サイトはてなの開発・運用やWEBおよび携帯コンテンツの企画立案、開発をやってます。 
2004年2月1日をもって有限会社から株式会社に組織変更をおこない「 ...</description>

  <geo:lat>35.6512</geo:lat>
  <geo:long>139.6980</geo:long>
</item>

RDFの解釈ではキーワード「株式会社はてな」のURLが主語となり、title, link, description, geo:lat, geo:longは「キーワードのURLが指すもの」のプロパティとなります。「キーワードのURLが指すもの」は一般には「リソース」となるのですが、いくつかのボキャブラリによりRDFが構成されている場合、各ボキャブラリのスキーマによりリソースの存在範囲が制限される場合があります。

さて、「株式会社はてな」というキーワードURLは、geo:latおよびgeo:longという二つのプロパティを持っています。Geo Vocabularyのスキーマでは、「geo:latおよびgeo:longをプロパティに持つリソースは、geo:SpatialThingというクラスのインスタンスになる。」と定義されているのです。

geo:SpatialThingの定義にはAnything with spatial extentとあり、これは位置や大きさを持つ(空間に存在する)ものを意味します。つまりキーワードのURLが指すリソースは、空間的に存在するものに限定されちゃうんですよ。

はい、ここで問題がでてきます。キーワード「株式会社はてな」のURLが表すリソースは、キーワードについて解説した「Web上の文書」であり、空間的に存在しないものなんです。つまり、空間的に存在しないものが、緯度経度をもつという矛盾が生じるのです。

はてなフォトライフの写真がはてなマップ上にある場合も同様で、デジタル画像が緯度経度を持つことになります。言葉を読むとそうおかしくないのですが、デジタル画像は「撮影した地点の緯度および経度の情報」を持っているのであり、画像そのものに緯度経度があるわけではありません。なので、こちらもおかしなことになります。

というわけで、問題とならないようなフィードを考えてみます。

<item rdf:about="http://d.hatena.ne.jp/keyword/%b3%f4%bc%b0%b2%f1%bc%d2%a4%cf%a4%c6%a4%ca">
  <title>株式会社はてな</title>
  <link>http://d.hatena.ne.jp/keyword/%b3%f4%bc%b0%b2%f1%bc%d2%a4%cf%a4%c6%a4%ca</link>
  <description>人力検索サイトはてなの開発・運用やWEBおよび携帯コンテンツの企画立案、開発をやってます。
 2004年2月1日をもって有限会社から株式会社に組織変更をおこない「 ...</description>

  <foaf:topic parseType="Resource">
    <geo:lat>35.6512</geo:lat>
    <geo:long>139.6980</geo:long>
  </foaf:topic;>
</item>

foaf:topicにparseType="Resource"をつけて、geo:latとgeo:longを囲ってやります。ほかにもいろいろな書き方がありますが、多分この変更が一番楽で、マークアップの変更による影響が少ないものかと思われます。

<dcterms:spatial parseType="Resource">
<!-- 又は<dc:coverage parseType="Resource"> -->
  <geo:lat>35.6512</geo:lat>
  <geo:long>139.6980</geo:long>
</dcterms:spatial;>

FOAFって人についてでしょ?」みたいなステレオタイプを持っていて、なんとなくfoaf:topicを使いたくない場合は、まあdcterms:spatial又はそのスーパープロパティなdc:coverageあたりがいいかなと。

さてさて、このRSSを見て思い出したのは位置情報を含めたGeoURLのRSSフィードです。もしかして、これを参考にしたのかな。

GeoURLは緯度と経度情報を埋め込んだWebサイトのデータベースなのですが、出力されるRSSフィードは現在のはてなマップフィードによく似た構造となってます。

<item rdf:about="http://ericrichardson.com/">
  <title>eWorld: eric richardson meets the web</title>
  <link>http://ericrichardson.com/</link>
  <description>About 9.4 km away. Near Los Angeles.</description>

  <geourl:longitude>-118.25201</geourl:longitude>
  <geourl:latitude>34.0456</geourl:latitude>
</item>

geourl:longitudeおよび、geourl:latitudeという独自のプロパティを用いて、緯度と経度情報を記述してあります。どのような定義をしてあるかがわからないので果たしてこれは良いのか悪いのかわかりませんが、「リソースに関連した緯度および経度」というものをそれぞれ表していると考えて納得できます(バッドノウハウ)。

はてなもフォトライフのRSSでhatena:imageurlとか独自の語彙を定義してあるくらいなんで、位置情報に関しても同じ事をすればよかったのに。やってることにconsistencyをあんまり持たないのが悪くもはてなだなあと思ったり思わなかったり。

まあそんなことはさておいて、ぼちぼち RSS 2.0 に移行時かなとか破壊的なことは言わないで(「移行」とか言うのは「がっかり」しちゃいます)、ちょこっと追加はいかがかしら。

追記。はてなマップのRSSはてなマップのRSS配信開始についてにトラックバックを送ったんですが、届いてないようなのでリンク張ってみますよ。言及リンクないとできなくなったとかかしら。

さらに追記。うまく送ることができました、IEで。なんでだー

2005-07-060100

[][][] RDF's Gone?

5 Jul 2005 - Vladimir Vukićevićより。Firefoxの新しいブックマークシステムについてです。

Gone is RDF; it serves no purpose other than template generation (and code obfuscation) in the current code, and the template generation will be handled nicely in the future with Neil’s new-world templating.

というわけで、RDFはそのうちMozillaから消えてしまうのかなと。ブックマークなどに関しては、RDFを使えば一番良いところで使われてないのが非常に残念。フレキシブルすぎるのかしら。

あ、データベースみたいなものがGecko 1.9から準備されるからそれを使うのかなぁ。それだったらRDFとかじゃなくても安心安心。

2005-02-170077

[] WD - SPRAQL Query Language

SPARQLの新しいドラフトが出ました。CVSのChange Logからめぼしいものをピックアップ、、、なんてできないくらい前回のドラフトから変わっています。

えーと、変更点がDave BeckettのWeblogに載っていたのでそちらをご参考に。構文の変更や追加が結構行われていますね。

それでもってRascal RDF Query Demoも若干アップデートされた模様。

© 2004 kota.