RDFを吐くプログラムをつくってて、ちょっとハマッたのでメモ。
例えば
<rdf:li rdf:resource=”http://www.example.net/hoge.php?id=12345&cmd=add” />
というような書き方をすると、RDFとして認識してくれない。
というより、XMLとしてエラーになるようだ。
試しに、Firefoxに食わせてみると
XML パースエラー: 整形式になっていません
というようなエラーが出る。
この原因は、どうも “&” という文字にあるらしい。
XML文中にこの文字があると、その先を別の文字への置き換えとみなそうとするらしい。
< とか > とか " とか ' というやつね。
上記の場合、”&cmd=” などという定義はないので、そこでエラーになる。
XML文中に現れる “&” は、全て “&” に置換する必要がある。
URLも全てこれに置き換えないといけないというのは参ったですよ。
だって、別のURLになっちゃうじゃん?って思うでしょ。
でも “&” って書けば、ちゃんと “&” で認識してくれる。
PHPでやる場合、文字列の部分は htmlspecialchars をかけてやればOK。
これは罠だ。