<?xml version="1.0" encoding="euc-jp"?>
<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:ums="http://ums.isas.jaxa.jp/0.4"
    xmlns:lxslt="http://xml.apache.org/xslt"
    xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
    extension-element-prefixes="redirect" >

  <!--
  出力ファイルの振り分けの実装に関しての設計ノート (XALAN-J XSL拡張を使用)
                                                                  20050702 -KM-
                                                                  20050824 -MT-
  XALAN-J の選定理由。(比較対象 : JAVA 作りこみ。
  出力ファイルの指定が入れ子になる場合でも、正しく取り扱い
  が出来るため。極端な場合あるファイルに入れ子の別のファイルを
  していし、その中に再び元のファイルを指定することができる。
  そのようなことが必要となることは、mapping definition  自身
  ではまずありえない。が、ファイルタグ一般としては起こりうる
  ことなのでそうする。-->

  <template match="/">
    <!-- ここに mapping definition からファイル名を抽出し列挙する。
    mapping definition に同一ファイル名称が複数回登場する場合マージすること。
    ただし、現時点では文字列として同一なもののマージのみで構わない。-->
    <!-- ファイルの先頭に１回の出力は、この部分で出力する。 -->
    <redirect:open file="doc1.out"/>
    <redirect:write file="doc1.out">
    <!--
import xxx;
  or
#include <xxx.h>
    -->
    </redirect:write>

    <redirect:open file="doc2.out"/>
    <redirect:write file="doc2.out">
    <!--
import xxx;
  or
#include <xxx.h>
    -->
    </redirect:write>

    <redirect:open file="doc3.out"/>
    <redirect:write file="doc3.out">
    <!--
import xxx;
  or
#include <xxx.h>
    -->
    </redirect:write>

    <for-each select="ums:grammar/ums:start">
      <apply-templates select="*|text()|comment()"/>
    </for-each>

    <!-- ここに mapping definition からファイル名を抽出し列挙する。
    mapping definition に同一ファイル名称が複数回登場する場合マージすること。
    ただし、現時点では文字列として同一なもののマージのみで構わない。-->

    <redirect:close file="doc1.out"/>
    <redirect:close file="doc2.out"/>
    <redirect:close file="doc3.out"/>

  </template>

  <!-- ここに mapping definition からファイル名を抽出し列挙する。
  mapping definition に同一ファイル名称が複数回登場する場合マージすること。
  ただし、現時点では文字列として同一なもののマージのみで構わない。-->

  <template match="ums:file[@name = 'doc1.out']">
    <redirect:write file="doc1.out">
      <apply-templates/>
    </redirect:write>
  </template>

  <template match="ums:file[@name = 'doc2.out']">
    <redirect:write file="doc2.out">
      <apply-templates/>
    </redirect:write>
  </template>

  <template match="ums:file[@name = 'doc3.out']">
    <redirect:write file="doc3.out">
      <apply-templates/>
    </redirect:write>
  </template>

  <include href='file://localhost/duplicate.xsl' />

 </stylesheet>
