2004年 11月 27日

FOAF Explorer でのエラー

なんかエラーでるので原因を特定すると、foaf:nick に rdf:Alt があるとエラーになる。FOAF Explorer の XSLT を見てみると <xsl:template mode="title" match="*"> というテンプレートの中身が悪さしてる。xsl:choose で選択しているので上のほうに書いてある要素で rdf:Alt を含まなければエラーにならないんじゃないかと思ってやってみたらヒット。foaf:name は書いていなかったので適当に書いておいた。この回避法だと foaf:name を既に書いていてエラーが出る場合無理。あっちの対策を待ちましょうみたいな?

でもこっちで回避するより何かフィードバック送ったほうがいいだろうなぁ。っていっても既に誰か送ってると思うんだけど……むしろエンジンのエラーな気がする。

XSLT での name()

マジメな実装をするなら name() を select や @test で使う機会はまずないはず。 (もちろん name() をそのまま出力する用途では使うけど) そのかわりにちゃんと namespace-uri()local-name() を使うはずだから。

今まで name() を使うときなんかひっかかりつつ使っていたけどやっと変なことに気付いた。

2004年 11月 25日

xsl:param にノード集合を渡す。

予め xmlns:t="http://temporary/" とかやっておく。既存の空間が利用できるならそれ使ってもいいと思う。

<xsl:call-template name="tempfoo">
<xsl:with-param name="foo" xmlns="http://temporary/">
<foo>Foo</foo>
<foo>Bar</foo>
</xsl:with-param>
</xsl:call-template>
<xsl:template name="tempfoo">
<xsl:param name="foo"/>
<ol>
<xsl:for-each select="$foo/t:foo">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ol>
</xsl:template>
<ol>
<li>Foo</li>
<li>Bar</li>
</ol>

渡すほうに名前空間を指定しない場合は、(あたりまえだけど) デフォルトの空間になる。でもそのまま template のほうで接頭辞なしでアクセスしようとしても無理。

できないと思ってた方法ができると分かって、いろいろ楽できる! 諦めかけていたなか光をくれた (謎) 哀さん にありがとう

namazu スタイルシートをつくるときに、一個の option 要素ごとに selected を入れるかの if を作るのが面倒でごちゃごちゃやってた。だいぶスッキリしていい感じ。

ソース間違ってたのをちょっと修正。

2004年 08月 28日

閉じタグを省略すると上手くいかない要素

XSLT とかやると空要素は勝手に省略されるわけですが、一部要素で不具合があるわけです。具体的には textarea, script なんですけれども。これ内容に <xsl:value-of select="/.."/> とでも書いておけば省略されないことを発見。value-of 使えばいいらしい。sab なんとかでしかできないだろうけど。