2007年 09月 19日

xml-stylesheet に絶対URIかいたりできない

クロスドメイン制約なのかなぁ

GRDDL によってできそうなこと

http://www.w3.org/TR/2007/NOTE-grddl-scenarios-20070406/ こういうのあるけど、もっとてっとりばやくおもしろいのできないと広まんないよなぁ。

いろいろ考えてみたけど消してしまった。

microformats 解釈するアグリゲータっていまあるのかな。Technorati はやってるのかな。おもすぎてつかえないけど……

なんていうか、サービス側が対応しない限りけっこうめんどうくさいようだよなぁ。
GRDDL は XHTML (に限らないけど) と XSLT と 1:1 でしか基本的に関連付けられないから (みおとしてるのかな?)、「flickr.com のユーザページの XSLT 書いたよー」っつっても、関連付けはできない。理想的なのは、誰かが XSLT を書いたら、どっかにある RDF サーバに

<http://flickr.com/photos/cho45/> <grddl:transformation> <http://example.com/flickr-user-photos.xsl> .

とかいうトリプル投げて、それを使えるようにすることだけど、ユーザ名のところは可変だから、ワイルドカードがいる。そのへんってどうするんだろう? GRDDL はこういうのできないっぽいよね。名前空間への関連付けはこれじゃないっぽいし……

あと GRDDL とはあんまり関係ないけど、一度世界に放たれた RDF トリプルってどうやって回収するんだろう。そのトリプルが間違っている場合どうなるんだろう。
P2P みたいに拡散するから回収できないよね。「このトリプルは無効だ」っていうトリプルを送りつけるのかな。そもそもなんか勘違いしてる気もする。
SPARQL とかってどうなってるんだろ。全然追ってないな。

wiki によるプログラミングみたいなのは、RDF つかうとほんとはもっと簡単になるよね。それぞれのユーザが自分のもってるスペースに RDF 断片をおいておけば、あとはアグリゲータが回収して (このアグリゲータはそのソフトウェアだけのためではなく、RDF データをとにかく集めまくってサービスしてる)、スクリプト側からは、そのサーバにクエリをなげるだけでいい。
でも中央集権っぽいアグリゲータになってしまうとあれだから (そういう巨大な RDF サーバがあると便利だけど)、ユーザがそれぞれ RDF サーバになって、御互いにクエリ投げあうのがいいんだろうなぁ。自分で設定をすると、他の人にも設定が反映される。いくつかのホストにトリプルなげつけて、拡散させる。
性善的すぎる。

集めてなにかする、っていうのは、広まらないと意味がない。広まっていないうちから楽しいことってなんだろうなぁ。

2007年 09月 18日

xh2rdf.xsl でプロパティにクラスをつっこみたい。

なんか用語が正しくない気がするけど、あとで調べる。(とかいって調べないんだろうなぁ……)
なにをやりたいかっていうと

<div class="foaf.maker">
	<address class="foaf.Person">
		by <a href="http://www.lowreal.net/" class="foaf.website">
			<img src="http://www.lowreal.net/images/lowreal.net-logo-white1.gif" alt="lowreal.net"/>
		</a>
		<span class="foaf.name">佐藤広央</span>

		<a href="mailto:cho45@lowreal.net" class="foaf.mbox">cho45@lowreal.net</a>
	</address>
</div>

っていう断片は、

    <http://xmlns.com/foaf/0.1/maker> [
        a <http://xmlns.com/foaf/0.1/Person>;
        <http://xmlns.com/foaf/0.1/website> <http://www.lowreal.net/>;
        <http://xmlns.com/foaf/0.1/name> "佐藤広央";
        <http://xmlns.com/foaf/0.1/mbox> <mailto:cho45@lowreal.net>
    ] .

として欲しいわけですよ。

でも xh2rdf.xsl は、@href がなければプロパティノードをリテラル扱いして文字列にしてしまうので、うまくいかない。
XSLT は一個修正するといろんなところで影響でそうであんま書きかえたくないんだけど、以下のようなパッチを書いてみた。

--- xh2rdf.xsl.orig	2007-09-18 01:49:17.000000000 +0900
+++ xh2rdf.xsl	2007-09-18 01:54:56.000000000 +0900
@@ -1,4 +1,3 @@
-<?xml-stylesheet href="/parts/xsltdoc.xsl" type="text/xsl" media="screen"?>
 <!DOCTYPE xsl:stylesheet [
 <!ENTITY classnames "concat('|',@class,'|')">
 <!ENTITY localnames "concat('|',local-name(),'|')">
@@ -725,7 +724,19 @@
   <xsl:if test="@xml:lang">
    <xsl:attribute name="xml:lang"><xsl:value-of select="@xml:lang"/></xsl:attribute>
   </xsl:if>
+  <xsl:variable name="propclass" select=".//h:*[
+   contains(&blockelt;, &localnames;) and
+   contains('ABCDEFGHIJKLMNOPQRSTUVWXYZ', substring(@class,substring-after(@class, '.'),1))]"/>
   <xsl:choose>
+   <!--@ __ typed node in child element (子要素にクラスっぽいのがあればそれをプロパティの値に。
+    ただし複数の @class には対応していない) -->
+   <xsl:when test="$propclass">
+    <xsl:for-each select="$propclass"> <!-- カレントノードの変更 -->
+     <xsl:call-template name="gen-class-elt">
+      <xsl:with-param name="c" select="@class"/>
+     </xsl:call-template>
+    </xsl:for-each>
+   </xsl:when>
    <!--@ __ if no @href, a literal property (@hrefがないときはリテラルプロパティ、@hrefがあれば、さらにノード要素/属性も生成する。). -->
    <xsl:when test="not(@href)">
     <xsl:call-template name="get-label"/>

これで一応少くとも上で書いたような XHTML は期待する RDF にできた。

自分のところに XSLT おきたくなかったのに、結局読んでると書きかえたくなる罠。GPL って再配布するときどうすればいいんだっけ……条項添付したりしないといけないよなぁ。あとこの XSLT 自体にもメタデータがあって、ライセンス明示があるんだけど、GPL って書きかえた場合なんか署名に修正が必要なんだっけ……

実際こんな変態的な埋め込みするくらいなら、

<a href="foaf への URI" class="foaf.maker">...</a>

とだけ書いて、リンク先に foaf を書いたほうがいいよなぁ。でも一個先にあるのはまたリクエスト増えていやな感じもする。

Firefox 内だけで GRDDL る userChrome.js


RDF/XML への変換までをできるようにしてみた。(あんま実益がないけど)

http://coderepos.org/share/browser/lang/javascript/userchrome/grddl.uc.js

  • 複数の XSLT を列挙する処理が中途半端
  • RDF/XML にしたあと、RDF 処理機にいれて about="" とかの修正をしたほうがいい
  • まだちゃんと仕様よんでない (どうやって関連付けるかだけ読んだ)
  • GRDDL がありそうな文書のときはステータスアイコンを変えたい

chrome 内からだと XHR はドメイン超えれる (そりゃ、どこ基準なのか謎いからそうなのだろうけど)。でも、セキュリティエラーはでる。

2007年 09月 17日

GRDDL, http://purl.org/net/ns/metaprof

自分で XSLT かくのも profile かくのも面倒だし、既に完成度の高いものがあるのでそれをつかう。
http://www.kanzaki.com/parts/xh2rdf.xsl で変換する。

XSLT よんだり http://www.w3.org/2007/08/grddl/ で実際に変換したりしながら、RDF のグラフがちゃんと生成される XHTML を書いてみる。

基本的にてきとーに microformats と同じように書けばいいけど、プロパティ定義じゃなくてインスタンス定義 (なんていうんだっけ。正確にいうと rdf:type 付き rdf:Description ?) の書きかたでまよった。例えば、cc:Work なリソース定義を XHTML 内に書くときどうすればいいのかなぁ、XSLT で RDF スキーマよんでるわけじゃないだろうしなぁ、というアレだけど、クラスは大文字から始まるのは慣習 (でいいんだよね) になっているので、大文字からはじまる場合はインスタンス定義とみなして、その子孫要素のそれっぽいのをそのインスタンスのプロパティにしてくれるみたいだ。

<div class="cc.Work">
	<p class="image"><img src="/images/washer-logo.png" alt="logo" /></p>
	<p>
		<span class="dc.title">ロゴ</span><a href="http://creativecommons.org/licenses/by/3.0/deed.ja" class="cc.license">Creative Commons by</a>

		のもとに配布されるもので、
		原著者 (<span class="dc.creater">佐藤広央</span>) のクレジットとライセンスを入れさえすれば、例え商用であっても利用可能です。
		詳しくは Creative Commons のサイトを参照ください。
	</p>
</div>

しかし a 要素と例外処理がしてある cite 要素以外の場合は rdf:about を生成できないっぽい。うーん。XSLT 書きかえるのはいいけど、いまいちいいアイデアがないなぁ……

http://www.w3.org/2007/08/grddl/?docAddr=http%3A%2F%2Fwasher-in-the-rye.com%2F&output=textxml

Turtle でだすと日本語が \uxxxx の形になってしまう。http://www.w3.org/2007/08/grddl/?docAddr=http%3A%2F%2Fwasher-in-the-rye.com%2F&output=turtleplain

Turtle のほうが断然読みやすいだけにこれはもったいない……

http://www.kanzaki.com/works/2005/rap/graph-check で可視化してみた。

dtstart dtend のグラフってこれでいいのかな

libxml ruby

XML::Parser.default_load_external_dtd = false

なんかいやっても、なんかいやっても

p XML::Parser.default_load_external_dtd #=> true

さぁあやるかーっておもったらいきなりハマった……カタログつくっても、オレオレDTDとか使ってるとまた HTTP アクセス発生しまくるだろうしなぁ……

DTD を正規表現でとっぱらうというアイデア

2007年 09月 16日

ちんこちんこちんこ

洗濯機洗濯機

ぐりぐり

gerry++