朝顔日記

続 rNote 用の xml をローカルで閲覧

2005-01-12

前回の ローカルで書いた rNote 用の xml をどうやって閲覧しよう? では、xml ファイルの始めのほうに以下のような記述をすることで、ローカルの xml な日記ファイルを閲覧できるようにしました。


<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="../../xml2html.xsl" type="text/xsl"?>

しかし、xml ファイルの方にスタイルシートの指定があるのはどうも美しくない気がして、違う方法を考えてみました。んで、考えたのが以下の php を間にかませる方式です。


<?php
header("Content-Type: application/xhtml+xml; charset=utf-8");

$xml_file = "file://".$_REQUEST["url"];
$xsl_file = "file://d:/web/noasobi/diary/entries/xml2html.xsl";
$xslt = xslt_create();
$data = xslt_process($xslt, $xml_file, $xsl_file);
xslt_free($xslt);
print($data);
?>

これを、ローカルなサーバ経由で見るようにすれば、xml にスタイルシートを指定する必要は無くなります。しかし、これを編集中のエディタからどうやってブラウザに渡したらいいでしょう?

悩むことしばし。なんかどっかで似たようなことしていたなぁと気がつきました。xyzzy から ローカルの cgi 版の htmllint に渡す lisp があるではありませんか。OKUBO Hiroshi さんとこの、browserex のおまけ(?)の lisp です。以下のように書き換えました。


 (defvar *preview-url* "http://127.0.0.1/noasobi/diary/preview.php?url=")
  (defun preview-diary ()
    (interactive)
    (let ((file (get-buffer-file-name)))
      (when file
        (shell-execute (concat *preview-url* file) t))))
  (define-key ed::*html+-mode-map* '(#\C-c #\C-l) 'preview-diary)

preview.phpは、rnote.php と同じ階層にあるので、前回やった css やイメージのパスを変換する必要はなくなったので、変換用の xml2html.xsl もシンプルになりました。


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:x="http://www.w3.org/1999/xhtml"
  xmlns:rn="http://rinn.e-site.jp/rnote/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns="http://www.w3.org/1999/xhtml">
  <xsl:output method="xml"
    encoding="UTF-8"
    omit-xml-declaration="no"
    doctype-public="-//W3C//DTD XHTML 1.1//EN"
    doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
    indent="yes"
    media-type="application/xml"/>
  <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" href="style/base.css" type="text/css" />
        <link rel="stylesheet" href="style/firefox.css" type="text/css" media="screen,projection" title="Firefox" />
        <link rel="alternate stylesheet" href="style/pink.css" type="text/css" title="ピンク" />
        <title>朝顔日記 - <xsl:value-of select="child::rn:rNote/child::rn:Title"/></title>
      </head>
      <body>
        <div class="content">
          <h1>朝顔日記</h1>
          <div class="section">
            <h2><xsl:value-of select="child::rn:rNote/child::rn:Title" /></h2>
            <p class="date"><xsl:value-of select="child::rn:rNote/child::rn:Date" /></p>
            <div class="section">
              <xsl:copy-of select="child::rn:rNote/child::x:Text/self::node()" />
            </div>
          </div>
        </div>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

これで、無事 xyzzy から ローカルな rNote 用の xml が閲覧できるようになりました。なお、これをするには、ローカルで Sablotron が動く必要があります。

「続 rNote 用の xml をローカルで閲覧」へコメントをつける

書き込み時の挙動について
URI らしき文字列には自動的にリンクが張られます。また "<" や、">" は実体参照化されます。
スパム対策のため、リファラを切っていると投稿できません。

この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050112a.html