February 25, 2004

YAMLで文書処理!

[ yaml]
YAML で文書処理をしてみた。
HTMLやXMLより書きやすく、見やすい。
HTML や DocBook への変換もできるので実用性も問題なし。
この手の「簡単フォーマット」は、SOX, SDOC, xWiki など乱立気味ですが、
  • SOXはXML記述用でドキュメント作成には向かない。
  • SDOCはXMLなので閉じタグが面倒。JAVAでしか動かない。
  • xWikiではネストした章節構造が実現されていない。(headerのレベル設定しかできないので、DocBookのような章節構造に変換するには、別途パーザを作らないといけないのがネック(T_T))
といったところで、どれも帯に短し襷(たすき)に長し。
YAML系とアウトライン・テキストの"something in between" あたりが正解ではないか、と思っています。

まずはこんな感じで。これなら簡単にDocBookが作れます。
---
- articleinfo:
    title: >
        YAMLで文書処理
    author: >
        随風老師
    releaseinfo: >
        lastmod: 2004-02-25

- s:
    -
        id: readmefirst
        title: >
            はじめに
    - p: >
        DocBook でいえば sect1。
        改行は無視されます。
    - p: |
        DocBook でいえば sect1。
        こちらでは、改行は保存されます。
    - s:
        - title: >
            サブセクションのタイトル§1
        - nested
    - s: 
        - title: >
            §2
        - p: >
            2重にネストした段落。
            DocBook でいえば sect2。
            本文。
    - p: |
        ネスト一段復帰。
        改行は保存されます。
        インデントは無視されます。
    - p: >
        sect1の段落。
        改行とインデントは無視されます。
    - p: |
        それなりに快適。
        これはいけそう!!
- s:
    -
        id : discussion
        title: >
            YAMLで文書処理
    - p: >
        DocBookも、
        こんなに簡単に作れます。
---

このソースをDocBookに変換すると…
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE book
  PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
  "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">

<article>
    <articleinfo>
      <author>随風老師
      </author>

      <title>YAMLで文書処理
      </title>

      <releaseinfo>lastmod: 2004-02-25
      </releaseinfo>
    </articleinfo>

    <sect1 id="readmefirst">
        <title>はじめに
        </title>

        <para>DocBook でいえば sect1。 改行は無視されます。
        </para>

        <para>DocBook でいえば sect1。
こちらでは、改行は保存されます。
        </para>

        <sect2>
            <title>サブセクションのタイトル§1
            </title>
nested        </sect2>

        <sect2>
            <title>§2
            </title>

            <para>2重にネストした段落。 DocBook でいえば sect2。 本文。
            </para>
        </sect2>

        <para>ネスト一段復帰。
改行は保存されます。
インデントは無視されます。
        </para>

        <para>sect1の段落。 改行とインデントは無視されます。
        </para>

        <para>それなりに快適。
これはいけそう!!
        </para>
    </sect1>

    <sect1 id="discussion">
        <title>YAMLで文書処理
        </title>

        <para>DocBookも、 こんなに簡単に作れます。
        </para>
    </sect1>
</article>

これをDocBook XSLTでHTML に変換。
> xsltproc --output db0.html --stringparam section.autolabel 1 --stringparam section.label.includes.component.label 1 html/docbook.xsl db0.xml
できたものがこちら

目次も自動生成され、セクションのナンバリングもDocBook XSLTにお任せです。

WindowsでもLinuxでもOK。これは良いですねえ。

あとは、リストと表組みを作れば完成形。乞うご期待。