2013年5月3日金曜日

[Saxon]Linux (Fedora)

インストール
# yum install saxon

動作確認
Example: test.xml
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="test.xsl" type="text/xsl" ?>
<document>
  <header>はじめての XML, XSLT</header>
  <paragraph>XML ,XSLT テスト</paragraph>
</document>

Example: test.xsl
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="document">
    <html><xsl:apply-templates/></html>
  </xsl:template>
  <xsl:template match="header">
    <h1><xsl:value-of select="."/></h1>
  </xsl:template>
  <xsl:template match="paragraph">
    <p><xsl:value-of select="."/></p>
  </xsl:template>
</xsl:stylesheet>
saxon.jar を使って test.html を生成
$ java -jar /usr/share/java/saxon.jar -s:test.xml -xsl:test.xsl -o:test.html
Warning: at xsl:stylesheet on line 2 column 81 of test.xsl:
  Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor


DocBook で使う
DocBook の Style Sheet は /usr/share/sgml/docbook/xsl-stylesheets/xhtml/docbook.xsl にインストールされている
Example: test.xsl
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "/usr/share/sgml/docbook/xml-dtd-4.5/docbookx.dtd">
<article>
  <title>Hello, world</title>
  <sect1>
    <title>Hello, world</title>
    <para>Hello, world</para>
    <sect2>
      <title>こんにちは</title>
      <para>日本語表示できますか?</para>
    </sect2>
  </sect1>
</article>
$ java -jar /usr/share/java/saxon.jar -s:hello.xml -xsl:/usr/share/sgml/docbook/xsl-stylesheets/xhtml/docbook.xsl -o:hello.html
Warning: at xsl:stylesheet on line 4 column 317 of docbook.xsl:
  Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor


Ant (build.xml)
src ディレクトリにある原稿 xml を SAXON を通して DocBook の HTML ファイルを生成する build.xml は以下の通り。
<?xml version="1.0" encoding="UTF-8"?>

<project name="saxonTest" basedir="." default="html">
  <property name="BUILD" location="build"/>
  <property name="SRC" location="src"/>
  <property name="DOCBOOK_PUBLIC_ID" value="-//OASIS//DTD DocBook XML V4.5//EN"/>
  <property name="DOCBOOK_DTD" value="/usr/share/sgml/docbook/xml-dtd-4.5/docbookx.dtd"/>
  <property name="DOCBOOK_XSL" location="/usr/share/sgml/docbook/xsl-stylesheets/xhtml/docbook.xsl"/>
  <property name="SAXON_LOC" location="/usr/share/java/saxon.jar"/>

  <target name="init">
    <tstamp/>
    <mkdir dir="${BUILD}"/>
  </target>

  <target name="html" depends="init">
    <xmlvalidate warn="false">
      <xmlcatalog>
        <dtd publicId="${DOCBOOK_PUBLIC_ID}"
             location="${DOCBOOK_DTD}"/>
      </xmlcatalog>
      <fileset dir="${SRC}">
        <include name="*.xml"/>
      </fileset>
    </xmlvalidate>
    <xslt basedir="${SRC}"
          destdir="${BUILD}"
          style="${DOCBOOK_XSL}"
          extension=".html"
          includes="*.xml">
      <classpath>
        <pathelement location="${SAXON_LOC}"/>
      </classpath>
      <factory name="net.sf.saxon.TransformerFactoryImpl"/>
      <xmlcatalog>
        <dtd publicId="${DOCBOOK_PUBLIC_ID}"
             location="${DOCBOOK_DTD}"/>
      </xmlcatalog>
    </xslt>
  </target>

  <target name="clean">
    <delete dir="${BUILD}"/>
  </target>
</project>
<xslt> の中で <factory name="net.sf.saxon.TransformerFactoryImpl"/> を指定していないと TraXLiaison を使用してエラーとなる。明示的に SAXON を使うために factory name で指定しておくこと。
$ ant -verbose
Apache Ant(TM) version 1.8.2 compiled on February 10 2011
Trying the default build file: build.xml
Buildfile: /home/user/Develop/docbook/saxonTest/antTest/build.xml
(略)
[xmlvalidate] 2 file(s) have been successfully validated.
     [xslt] Using class org.apache.tools.ant.taskdefs.optional.TraXLiaison
     [xslt] Transforming into /home/user/Develop/docbook/saxonTest/antTest/build
     [xslt] Processing /home/user/Develop/docbook/saxonTest/antTest/src/hello.xml to /home/user/Develop/docbook/saxonTest/antTest/build/hello.html
     [xslt] Loading stylesheet /usr/share/sgml/docbook/xsl-stylesheets/xhtml/docbook.xsl
Apache resolver library not found, internal resolver will be used
     [xslt] : Warning! file:/usr/share/sgml/docbook/xsl-stylesheets/xhtml/autoidx.xsl: line 502: 属性 'href' がエレメントの外側です。
(略)
     [xslt] : Error! null
     [xslt] Failed to process null

BUILD FAILED

0 件のコメント:

コメントを投稿