カテゴリー別アーカイブ: XSL-FO・CSS

AH Formatter 有償技術サポートのご案内

こんにちは。
AH Formatter』のサポート担当です。

『AH Formatter』は販売開始から 17年を迎えました。
現在サポートを担当しておりますわたくしは一番最初の 『XSL Formatter V1』から
この製品に関わってまいりました。
早いもので 17年、国内国外問わず世界中の多くのお客様にご利用いただいております。
最近は DITA を導入したマニュアルの多言語対応として『AH Formatter』を使われるお客様も増えてまいりました。
xx年前、弊社社長から “DITA を勉強してセミナーを開きなさい” と言われたとき、
DITA ってなんぞや?から始まり、DITA ってなんて読むんだろと検索してみても
当初はお酒の情報しか出てこなかったことを思い出します(笑)

弊社サポートでは、通常の保守サポートに加え、
有償技術サポート」がございます。
XSL-FO の仕様解説や、XSLTスタイルシートの “こうしたいけどよくわからない” といった問題に
具体的なアドバイスを行っております。
わたくしの 17年のスキルが皆様のお役に立てますよう努力いたしますので
ご検討いただけますと幸いです。

AH Formatter ロゴ

 


Antenna House Formatter V6.4 のご紹介

昨年 12月に XML/HTML 自動組版ソフトのベストセラー『AH Formatter』をバージョンアップした『AH Formatter V6.4』を公開しました。早いもので現在、改訂2版の準備中です。

AH Formatter ロゴ

『AH Formatter』は XML で記述されたマニュアル、契約書、報告書・書籍などを XSL-FO または CSS を使ってレイアウト指定して、PDF に出力したり印刷するソフトウェアです。

XSL-FO は W3C が XML に対するレイアウト指定の標準として勧告している世界標準です。国内外で『AH Formatter』は最も優れた XSL-FO 準拠製品との評価を確立しており、現在、自動車、携帯電話、航空機、OA 機器のメーカ等のマニュアル制作システムなど数千社のお客様にお使いいただいています。

詳しくは製品ページをご覧ください。

AH Formatter フロー

 
続きを読む


AH Formatter によるウェブコンテンツアクセシビリティガイドライン(WCAG 2.0) PDF実装方法

AH Formatter は XSL1.1標準仕様の FOプロパティと AH Formatter 独自の拡張を実装しており、AH Formatter が出力する PDF のアクセシビリティ機能を利用することが可能です。

PDF Techniques for WCAG 2.0” は、W3C のワーキンググループの原稿であり “Web Content Accessibility Guidelines (WCAG) 2.0” の達成基準を満たしたいと考えるウェブコンテンツ制作者に情報を提供する文書です。日本語訳もあります(”「WCAG 2.0 実装方法集」の「11. PDF(PDF)」“)。原稿のテキストは、”Techniques for WCAG 2.0” からの抜粋です。

“PDF Techniques for WCAG 2.0” は Microsoft Word や Adobe Acrobat のようなアプリケーションを使ってアクセシブルな PDF を生成する方法を示しています。アンテナハウスのこのチュートリアルは同じ見出しを用いて(同じ順序で)、AH Formatter を使って同じ効果を得る方法を示しています。それぞれの見出しと、その見出しの後に加えた引用文は、関連する “PDF Techniques for WCAG 2.0″(日本語訳)からの抜粋です。引用文はそれぞれの実装方法を解釈する手助けとなるだろうと付け加えました。

ここに示されている AH Formatter の実装方法はほとんどが PDF/UA、あるいはタグ付きPDFを「PDFオプション設定ファイルダイアログ」でチェックを入れて、または “-tpdf” をコマンドラインで指定して PDF/UA あるいはタグ付きPDF することが要件となっています。

詳細は「AH Formatter によるウェブコンテンツアクセシビリティガイドライン(WCAG 2.0) PDF実装方法」をご覧ください。

 


AH Formatter 機能のご紹介:マルチメディアの参照

AH Formatter』では、V6.3 改訂1版よりマルチメディアを PDF に埋め込むかどうかが指定可能になりました。
axf:multimedia-treatment / CSS -ah-multimedia-treatment(オンラインマニュアル)

『AH Formatter』のサンプルFO集には、本機能の “relative-link(マルチメディアを相対パスで参照)” の動作が確認できるサンプル「マルチメディアの参照 (, axf:multimedia-treatment, content-type)」を掲載しております。

開発の発端は、Web に公開する PDF のファイルサイズを小さくするため、PDF に動画を埋め込まずに参照できるようにして欲しいというお客様からの要望でした。
この機能を用いて PDF を作成することで、マルチメディアを含んだ PDF のファイルサイズ軽減を実現できます。

『AH Formatter』は主にバージョンアップのたびに機能強化や新機能の追加を行っています。
“あったら便利な機能” も既に追加されていることがございますので、どうぞお気軽にサポートにお問い合わせください。
未実装の機能であれば、ご要望として承り、今後の開発の参考にさせていただきます。

『AH Formatter』の評価版は次のページよりお申し込みいただけます。ご興味のある方は是非お試しください。
AH Formatter 評価版のお申し込み

 


Table のアクセシビリティ

現在 table のアクセシビリティについての開発を行っているのですが、最近社内で XSLT 勉強会に参加しているせいか、ふと、XSLT でどうすれば自動的にアクセシビリティ対応が図れるのか気になったので検討してみたいと思います。なお、今回はアクセシビリティ関連の属性の内 scope 属性に関してのみ焦点を当てます。複雑な表の場合、headers属性の使用が推奨されていますが、現時点の私の技術力ではとても自動化などできそうにないので、今回は scope 属性に絞らせていただきました。ちなみに、scope 属性は HTML5 と同様のものだとさせて頂きます。また、XSL-FO プロセサが scope 属性に対応しているとします。

table 自体のスキーマは以下の様になっているとします。普通は、thr と tr を分けるような事はしないとおもいますが、今回は問題を簡易化にするために分けています。また、theader 内の見出しは列方向に対するもの、tbody 内の見出しは行方向に対するものとします。

table := (theader)?,(tbody)+
theader := thr
tbody := (tr)+
thr := (th)+
tr := (th)?,(td)+
th := 見出し
td := データ

また、th に対するテンプレートしか載せませんが、以下の様になっているとします。

<xsl:template match="th">
    <fo:table-cell>
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </fo:table-cell>
</xsl:template>

以下の様に theader が一行で、th が theader 内にしか存在しない場合だと簡単そうですね。

  <table>
    <theader>
      <thr>
        <th>見出し1</th>
        <th>見出し2</th>
        <th>見出し3</th>
      </thr>
    </theader>
    <tbody>
      <tr>
        <td>データ11</td>
        <td>データ12</td>
        <td>データ13</td>
      </tr>
      <tr>
        <td>データ21</td>
        <td>データ22</td>
        <td>データ23</td>
      </tr>
    </tbody>
  </table>

scope 属性を値 col で追加すればそれで対応完了です。後の事を考え、以下の様に <xsl:choose> を使い、th の祖先ノードを見て scope 属性を付与するということをします。

 <xsl:template match="th">
    <fo:table-cell>
      <xsl:choose>
        <xsl:when test="../../self::theader">
          <xsl:attribute name="scope">col</xsl:attribute>
        </xsl:when>
      </xsl:choose>
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </fo:table-cell>
</xsl:template>

次はスキーマに沿った、tbody の一列目にも th 存在する場合も考えてみます。

   <table>
    <theader>
      <thr>
        <th>見出し1</th>
        <th>見出し2</th>
        <th>見出し3</th>
      </thr>
    </theader>
    <tbody>
      <tr>
        <th>見出し11</th>
        <td>データ11</td>
        <td>データ12</td>
      </tr>
      <tr>
        <th>見出し12</th>
        <td>データ21</td>
        <td>データ22</td>
      </tr>
    </tbody>
  </table>

tbody の最初の子 th に値 row で scope 属性を与えれば良いだけなので簡単ですね。また、入力 XML がスキーマに沿わない場合に備え、<xsl:otherwise> 節を追加してエラー処理を追加するのも良いかもしれません。

 <xsl:template match="th">
    <fo:table-cell>
      <xsl:choose>
        <xsl:when test="../../self::theader">
          <xsl:attribute name="scope">col</xsl:attribute>
        </xsl:when>
        <xsl:when test="../../self::tbody and position()=1">
          <xsl:attribute name="scope">row</xsl:attribute>
        </xsl:when>
      </xsl:choose>
      <fo:block>
        <xsl:apply-templates/>
      </fo:block>
    </fo:table-cell>
</xsl:template>

今回はすごく簡単な例しか取り上げませんでしたが、次回までに私の XSLT 力が向上していたら複雑な表や、多種の表の場合を扱ってみたいと思います。恐らく多種の複雑な表を扱う場合、自動での scope 属性の付与は難しく、入力スキーマ自体に表の種類に関する情報を入れたりする必要が出てきそうです。


AH Formatter 機能のご紹介:オーバープリントの設定

AH Formatter』では、V6.2 改訂2版よりオーバープリントが指定できるようになりました。
axf:overprint / CSS -ah-overprint(オンラインマニュアル)

『AH Formatter』のサンプルFO集には、
本機能が確認できるサンプル「オーバープリントの設定例(axf:overprint)」を掲載しております。

『AH Formatter』は主にバージョンアップのたびに機能強化や新機能の追加を行っています。
“あったら便利な機能” も既に追加されていることがございますので、
お気軽にサポートにお問い合わせください。
未実装の機能であれば、ご要望として承り、今後の開発の参考にさせていただきます。

『AH Formatter』の評価版は次のページよりお申し込みいただけます。ご興味のある方は是非お試しください。
AH Formatter 評価版のお申し込み

弊社ではご検討中のお客様向けに技術相談会を行っております。お気軽にお問い合わせください。
アンテナハウス システム製品技術相談会

 


XSL-FO&AH Formatter 使いこなし技のご紹介

『AH Formatter』のサンプルページでは、
「XSL-FO&AH Formatter 使いこなし技」と称して、
XSL-FO や『AH Formatter』を使いこなすための便利な小技・裏技を紹介しています。

今のところ次の2例のみですが、
今後 XSL-FO/CSS 及び『AH Formatter』ユーザ様のお役に立つよう増やしてまいります。

表の泣き別れを float で回避する例
keep-together.within-page=”always” の指定で改ページされる fo:table-row、fo:list-item のオーバーフローを回避する例

『AH Formatter』の評価版は次のページよりお申し込みいただけます。ご興味のある方は是非お試しください。
AH Formatter 評価版のお申し込み

弊社ではご検討中のお客様向けに技術相談会を行っております。お気軽にお問い合わせください。
アンテナハウス システム製品技術相談会

 


AH Formatter 機能のご紹介:<fo:page-sequence> の入れ子

AH Formatter V6.3』では、<fo:flow> 直下に <fo:page-sequence> を記述して入れ子にできるように拡張されました。
入れ子の <fo:page-sequence>(オンラインマニュアル)

また、<fo:flow> を省略した空の <fo-page-sequence> が許容されようになりました。

『AH Formatter』のサンプルページには、
本機能が確認できるサンプル「fo:page-sequence の入れ子と空の fo:page-sequence の設定例(fo:page-sequence)」を掲載しております。
オンラインマニュアルと併せてご覧ください。

『AH Formatter』の評価版は次のページよりお申し込みいただけます。ご興味のある方は是非お試しください。
AH Formatter 評価版のお申し込み

弊社ではご検討中のお客様向けに技術相談会を行っております。お気軽にお問い合わせください。
アンテナハウス システム製品技術相談会

 


AH Formatter 機能のご紹介:axf:border-wave-form

AH Formatter V6.3』では、border-style=”wave” の形状(波長と線幅)を axf:border-wave-form で指定できるようになりました。
axf:border-wave-form / CSS -ah-border-wave-form(オンラインマニュアル)

AH Formatter 組版例
– axf:border-wave-form を利用した組版例 –

『AH Formatter』のサンプルページには、
本機能が確認できるサンプル「波枠線と形状の指定例(border-style=”wave”)」を掲載しております。
オンラインマニュアルと併せてご覧ください。

『AH Formatter』の評価版は次のページよりお申し込みいただけます。ご興味のある方は是非お試しください。
AH Formatter 評価版のお申し込み

弊社ではご検討中のお客様向けに技術相談会を行っております。お気軽にお問い合わせください。
アンテナハウス システム製品技術相談会


XSLTを学ぶ (2) ノードツリーとノードの親子、子孫関係

前回([1])はXPathでは7つのノードが定義されている、と説明しました。このうち重要なのは、ルートノード、要素ノード、属性ノード、テキストノードです。この4種類のノードについてもう少し詳しく見てみましょう。

例えば次のようなXML文書があったとします。このXMLの文書要素はdocです。

<!–?xml version=”1.0″?–>
 <doc>
  <body>
   <p s=”man1″>Hello! How are you?</p>
   <p s=”man2″>I am fine, thank you.</p>
  </body>
 </doc>

このXMLをXPathのノードツリーとして表しますと次のようになります。
XSLT

ノードには親子(parent, child)になるものがあります。ノードツリーで実線でしめした箇所が親子関係になります。子孫(descendant)ノードとはあるノードの子供と子供の子孫ノードです。

兄弟(sibling)ノードは同じ親の子供ノードです。

親になれるノードはルートノードと要素ノードのみです。子供になれるノードは要素ノードとテキストノードです。ルートノードは最上位ですので親をもちません。逆にテキストノードは最下位ですので子を持ちません。

やっかいなのは属性ノードです。要素には関連する属性があります。要素ノードはそれらの属性ノードの親です。しかし、属性ノードは要素の子ではないと規定されています。また属性ノードは子を持ちません。

属性ノードとして扱われるのは、要素に明示的に指定されているもの、または、DTDでデフォルト値が明示的に規定されているものです。DTDで値が#IMPLEDになっていて要素に指定されていない属性や、xml:lang、xml:spaceのようなある要素に指定されているとき、その子孫に継承することになっている属性は、その子孫では属性ノードとして扱われません。

テキストノードは、要素の内容の文字列をできるだけ長くなるように結合したものです。従って、テキストノードには、直前・直後の兄弟はありません。

要素ノードの文字列値とは、要素ノードの子孫であるテキストノードを、XML文書に現れる順に結合したものです。ルートノードの文字列置はXML文書のすべてのテキストです。

[1] XSLTを学ぶ (1) XMLのツリーモデルとXPath/XSLTのツリーモデルではルートの意味が違う
[2] XPath データモデル

★AH Formatter XML関連出版物の紹介

次回:
XSLTを学ぶ(3)パスとは

初回:
XSLTを学ぶ(1)XMLのツリーモデルとXPath/XSLTのツリーモデルではルートの意味が違う


Pages: 1 2 3 4 5 Next