日本ソフトウェア科学会第 30 回大会 (2013 年度) 講演論文集

DITA によるソフトウェア関連文書とソースコードの統合管理環境の提案
金谷 祥平

伊藤 恵

大場 みち子

奥野 拓

一般的なソフトウェア開発では，各作業工程毎に成果物となるドキュメントを作成する．これらの多くは，ファイル
形式や記述方式が開発プロジェクト毎に異なる場合が多い．その為，前工程のドキュメントの記述内容に対して，後の工程で変更が必要となる場合，各ドキュメントの対応箇所の追跡と，それらに対する整合性確保は大きな負担となる．本研究は，ソフトウェアドキュメントに記述された情報を再利用可能な形で管理することで，ソースコード
を含む各成果物間の整合性と追跡性を確保する環境を提案する．方法として，DITA(Darwin Information Typing
Architecture) を用い，ソフトウェアドキュメントを再利用可能な情報の単位で管理する．さらに，これらの要素を入力として各要素に対応したソースコードの自動生成，構文解析による変更の追跡を行うことで，各要素の対応付けを行う．

In software development processes, several documents are created in period of each development phases.
Most of these have diﬀerent ﬁle type and writing style for every projects. Thus if a documents created in adevelopment phase are modiﬁed in later phases, developers spend time and eﬀorts on keeping integrity andtracing to correspondence of all documents. This study proposes an environment for integrity and traceability of deliverables of each phases. As an approach of this proposal, the environment manages documents asserieses of reusable information with DITA (Darwin Information Typing Architecture). For correspondenceof documents with source codes, the environment generates source codes from parts of documents whichcorresponds to program modules and traces changes with parse for source codes.

形式や文書としての体裁が開発プロジェクト毎に異な

1 はじめにる場合が多い．コンピュータでこれらの文書管理を支

1. 1 背景

援するツールとして，ファイル単位でのリポジトリ化

一般的なウォーターフォールモデルに基づくソフトを行うものはあるが，文書の内容や構造に踏み込んだ

ウェア開発では，要件定義，方式設計，詳細設計，実管理環境としては不十分である．また，ソースコード

装，テストと複数の工程を持ち，各工程毎に成果物がに関しては統合開発環境により独立して管理される存在する．このうち，実装工程の成果物はソースコー

傾向にあることから，上流のドキュメントとの間でのドである．また，要件定義から詳細設計の工程では，追跡性や整合性の面で問題が生じ易い．一方，ドキュ

ソフトウェアの機能的，非機能的仕様について後の工メントの作成方法に関しては，XML による構造化

程ほど具体的なドキュメントが作成される．そして，手法が考案されている．DITA(Darwin Information

それらは基本的に人間が読む為に作成され，ファイル

Typing Architecture) は XML に準拠した技術文書の規格である．DITA は情報をトピックという単位でProposal of an Integrated Document Management Environment for Source Codes and Software Documents Using DITA.
Shohei Kanaya
Kei ItoMichiko Oba
Taku
Okuno, 公立はこだて未来大学システム情報科学部
情報アーキテクチャ学科, Dept. of Systems Information Science，Future University Hakodate.

管理し，特殊化という仕組みを導入する事で，トピッ
クの再利用性を向上している．

1. 2 目的り，ソースコードを取り扱う Sapid と，XML ドキュ

本研究では，DITA が持つ情報の再利用性が，整合メントを扱う為の Dapid を用いて整合性を検査して性維持におけるドキュメント要素の管理に適していいる．Dapid は XML 文書を対象とし，文書中のプロると考え，これを用いてソフトウェアドキュメントとグラム断片の解析を可能としている．文書中のソース

ソースコードを統合的に管理する環境を提案する．こコード断片のマークアップを行い，Dapid を介してれにより，ドキュメントとソースコードが持つ情報を

関数名や型などの要素を取得する．また，ソースコー

関連付けし，それらの整合性・追跡性を確保すること

ド側の検査には，Sapid による構文解析を利用し，要を最終的な目標とする．

素を取得する．Sapid は C，Java，JavaScript，JSP，HTML といった複数言語のソースコードを構文要素

2 関連研究に分解し，それら構文要素と構文要素間の関連をリポ

関連研究調査にあたり，「整合性維持」と「文書構造ジトリに格納する．Dapid，Sapid により取得された化」という二つのキーワードに焦点を当て，既存ツー要素のうち，対応関係にあるものの一致を検査するこルや研究，そして，それらの課題について調査した．

とで，ドキュメントとソースコードの不整合箇所を一覧できる．

2. 1 整合性維持ツール
2. 1. 1 UModel

2. 2 整合性維持の課題

UModel とは，Altova により開発されているソフ

ソフトウェアモデルとソースコードの整合性維持がトウェアモデリングツールである [1]．UModel の主

可能なツールでは，モデリング言語を用いることで要な機能として，ソースコード自動生成とリバース

視覚的かつ正確なプログラム要素との対応付けが可

エンジニアリングがある．UModel のソースコード能である．一方で，ソフトウェア開発で作成されるド自動生成は，UML(Unified Modeling Language) でキュメント全般を管理する為の仕組みではなく，所定定義されたソフトウェアモデルを入力として，Java，のモデル以外のドキュメントに記述された内容につい

C#，VB.NET のソースコードを出力できる．

て整合性を確保することはできない．これを解決する

UML にはソフトウェアの構造を定義する静的モデ
ルと，振る舞いを定義する動的モデルがある．UModel

為には，作成されるソフトウェアドキュメント全体を構造化する必要がある．

では，静的モデルであるクラス図とコンポーネント図

また，2. 1. 2 節で述べた整合性検査ツールでは，

によりプログラム中のクラス構造とその配置を定義

XML 化されたソフトウェア関連文書についての整合し，動的モデルであるシーケンス図により各クラス性が検査可能であるが，整合性の確保までを行うこと

メソッドの振る舞いを定義する．また，リバースエンはできない．

ジニアリングの機能として，既存のソースコードを

UML モデルに変換することが可能である．
2. 1. 2 XML による整合性検査

2. 3 XML による文書構造化
ソフトウェアドキュメントには，日本語や英語の文

XML で記述されたソフトウェアドキュメントと章で記述された部分がある．これらをコンピュータにソースコードに対して，整合性を検査する研究が阿より処理する場合，XML が有効である．XML を用草らにより行われている [7]．この研究では，ソフトいる目的は，データ構造を目的に応じて拡張するこ

ウェアドキュメント中に記述されたソースコード断片と，そして，XSL 変換により HTML や PDF といっについて，実際のソースコードに書かれているプログ

た任意の形式のドキュメントとして出力することにラム要素との整合性を検査するツール chkSpdDoc にある．XML による技術文書の規格として DITA とついて述べられている．chkSpdDoc は CASE ツール

DocBook が存在する．

プラットフォーム Sapid [8] のリリースに含まれてお2. 3. 1 DocBook
DocBook は，OASIS により標準化されている XML
文書の規格である [5]．多くの技術文書に利用されており，表示形式に依存しない文章構造を定義することができるという特徴がある．RTF, man ページ，HTMLといった形式で出力できる．

2. 3. 2 DITA
DocBook 同様，OASIS によって標準化されているXML 文書の規格として DITA(Darwin Information
Typing Architecture) が普及しつつある [2]．DITA

図1

トピック間の関連

はトピックとマップという要素で構成されている．トピックとは，DITA における独立した情報の単位であが可能であるとし，DITA 適用に向けて適切なトピッ

る．トピックはコンテキストに依存せず，複数の文書

ク粒度について述べている．対象とするソフトウェア

構造に対して情報を提供する．一方で，マップにはドキュメントは，共通フレーム 2007 [6] の主ライフサ

トピックの並びや階層を定義する (図 1)．これは，出イクルプロセスにおいて，各プロセスの代表的なド力ファイルに反映される文書構造を表しており，独立

キュメントである．これらを用いることで，一般的なしたトピックに対してコンテキストを与える役割をソフトウェア開発で作成されるドキュメントの大部分持つ．

が対象となっている．

DITA を利用するメリットとして，情報の再利用性

共通フレーム 2007 のドキュメントを項目ごとに細の向上が挙げられる．従来の文書は，章・節・項と分化する場合，それらの中には再利用の可能な項目

いった構造を持ったドキュメントの単位で情報を扱と，不可能な項目が存在する．再利用可能な項目とい，文書構造の修正や，新しい文書構造の定義におは，他の項目に依存せずに内容が決定できる．一方，

いて大きなコストを要している．一方 DITA ではト

再利用が不可能な項目の場合，小さな単位での分割をピックとマップを分離する事で，トピックは文書構造行うと管理コストの増大する．この為，依存関係にあの変更の影響を受けず，マップは情報の変更の影響をる内容をひとつのトピックに纏めた方が適切である．

受けない．また，特殊化という仕組みを用いることで

2. 3. 4 DITA Open Toolkit

も再利用性を向上できる．特殊化はオブジェクト指向

DITA に準拠して作成されるトピック及びマップにおける継承に似た仕組みであり，既に定義されていは，文書に含まれる情報と，その構造を定義している要素やトピック，マップに対して，それらをより厳る．これらの情報はレイアウトや体裁とは分離され密にした要素，トピック，マップを定義することを言ている．その為，DITA によって作成されたドキュメ

う．特殊化を行った要素やトピックは，継承元と同じントを利用するには，HTML や PDF といったファように処理することが可能である．これにより，あるイルに変換する必要がある．DITA Open Toolkit(以ドキュメントを記述する為に要素の種類を追加した

下，DITA-OT) [4] はこの変換作業を行うツールであDITA コンテンツを，他のドキュメントで再利用する

る．図 2 では，A, B, C, D, E というトピックに対しことが可能である．

て，マップ 1, 2 が定義されている．DITA-OT はそ2. 3. 3 ソフトウェアドキュメントへの DITA 適用

れぞれのマップに対して XSL 変換を適用し，複数のDITA 適用に向け，ソフトウェアドキュメントの構

ファイル形式への変換を行うことができる．

造化を行う研究が坂井らにより行われている [9]．この研究では，ソフトウェアドキュメントへの DITA 適
用により，追跡性の向上とメンテナンスコストの低下

3. 2 対象とするドキュメント
共通フレーム 2007 [6] では，ソフトウェアの開発プ
ロセスを定義しており，その中の各工程で作成する成果物についても述べられている．今回管理対象とする
ドキュメントとしては，ドキュメント中に識別子名や型といったプログラム要素への言及を含むものである
必要がある．従って，実装の一つ前の工程であるソフ
トウェア詳細設計で作成されるドキュメントを対象とする．
図2

DITA-OT のイメージ

3. 3 ドキュメントの構造化
ドキュメントの修正の際に，ソースコードとの整3 提案

合性を維持する．その為，記述されたテキストの内

3. 1 統合管理環境の全体像

容がソースコードのどの要素に該当するのかという本研究で提案するドキュメント・ソースコードの

メタ情報を持たせる必要がある．2 章で述べたよう

統合管理環境の全体像を図 3 に示す．提案環境では，に，XML に準じた規格が技術文書構造化に利用されDITA で作成されたドキュメントとソースコードを取ている．XML を用いた場合，テキストをタグでマー

り扱い，それらの整合性と追跡性の確保に関する機能

クアップすることで，様々なメタ情報を含ませることを提供する．全体として，以下の主要な機能を持つ．

ができる．また，XML のタグやタグが持つ属性，発ソースコード自動生成 プログラム要素の情報を生順序や回数などを DTD として定義することで，自含む DITA コンテンツを入力としてソースコー

由に拡張が可能である．本研究では，XML 文書規格

ドを生成する．この際，プログラム要素には一意である DITA を用いてドキュメントの構造化を図る．

な id が付与されていることを前提とし，ソース

DITA を用いることにより，先に挙げた XML の利点

コード中の対応箇所にも同一の id を埋め込む．

に加え，情報と文書構造がトピック，マップという形

整合性の確保 ソースコード中に埋め込まれた idで分離されるので，情報の再利用性が高まる．これにと，ドキュメントに付与された id を利用し，ドより，整合性の検査が必要なソースコードとドキュメ

キュメント中の対応箇所を追跡する．それぞれのントの対応箇所を最小限に出来る．

対応箇所について整合性を検査する．対象となるドキュメントに DITA を適用する手法としては，のは，識別子の名称や型，修飾子など，ドキュメ

2. 3. 3 節における適切なトピック粒度を参考にし，

ント中に仕様として記述されている情報である．

ソースコード要素に対応する記述を構造化する上で整合性検査の結果，不一致が確認された場合に必要となる要素の定義を行う．

は，古い情報を自動的に修正できるようにする．
また，情報の修正にはある要素への参照部分の修3. 4 ソースコードとドキュメントの関連付け

正も含まれる．

ソースコード自動生成と，自動生成された後に編集

追跡性の確保 ユーザからどのソースコード要素

されたソースコード中の要素の取得を行う．これによとドキュメント要素が関連付けられているかを追り，ソースコード要素のドキュメント要素の対応の判跡可能とする．

別と，整合性の検査を可能とする．

3. 4. 1 DITA-OT を用いたソースコード生成
DITA-OT を用い，DITA 文書を入力としたソース
コード自動生成を行う．目的として，クラス名やメ図3

提案環境の全体像

ソッド名を初めとするプログラム要素の識別子の変</method>

更に対応することが挙げられる．ソースコード中に，プログラムの動作や構成に影響しない方法で，入力となったドキュメント要素との対応関係を記述する．
具体的には，以下のようにコメントを利用した方法が上の例の method 要素にはメソッドの定義が含まれる．id 属性が，前の例のコメントの id と対応している．このように対応関係を埋め込むことで，実装工程でプログラム要素の識別子が変更された場合でも，考えられる．

事後的にドキュメント中の対応箇所を見つけ出し，自ソースコード 1

対応関係の埋め込み例

動的に古い情報に修正を加えることで整合性維持が// #i d=m0001実現できる．また，自動生成の手段として DITA-OT

p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s )を用いることには二つの利点が存在する．一つ目は，{

このツールが DITA から複数種類のファイルを生成...

する機能を持つ為，XSL 変換の方法を定義するだけ}

で，ソースコードへの変換が実装できるという点であ上の例では，main メソッドの前にコメントを付加することで，「m0001」という対応関係を表す id を持つ
ことが示されている．この id は，自動生成の入力となるドキュメント要素にも記述されている必要があ
る．以下に例を示す．
ソースコード 2

ラムにライブラリとして組み込むことが期待できる点である．

3. 4. 2 ソースコード要素の取得
ソースコードへの変更箇所と，変更内容を取得する
為に構文解析を行う．解析には Sapid を用いること

ドキュメントの例<method i d = ’ ’ m0001 ’ ’ name= ’ ’ main ’ ’ >...

る．二点目は，オープンソースであり，自作のプログを検討している．2. 1. 2 節で述べたように，Sapid は
ソースコード中に含まれる構成要素及びそれらの関連を細粒度で解析し，リポジトリ化する．Sapid には

C 言語用の API が提供されており，リポジトリへのが「// #id=***」という形式のコメントとして付加アクセスが行える．

されていることが確認できる．

4 ソースコード自動生成実験

5 考察

XSL 変換によるソースコード自動生成の実験を行っ実験により，XSL 変換によるソースコード生成がた．この実験の目的は，提案環境の主要機能の一つで可能であることが確認できた．今回生成元として使あるドキュメントからのコード生成について，XSL 変

用した XML は DOCTYPE 宣言を含まず，完全に換による方法が有効であるかを検証することである．

DITA に準拠しているとは言えないが，特殊化の仕組みを利用して要素の定義を行えば，複数言語での4. 1 入力ドキュメントと XSL

ソースコード生成が可能になると考えられる．また，生成元となる XML ファイルは DITA の基本構造

今回 Java ソースを出力する為に class や method とに従い，一つのマップ（ソースコード 4) と一つのトいった独自の要素を利用したが，トピックにおけるピック（ソースコード 5) から成る．生成されるソー

title 要素を Java クラス名として出力するなど，既存

スコードは Java 言語で，一つのクラスと，それに関の要素の流用も存在する．既存要素をどう出力し，どする Javadoc，そして，XML 上で付与された id をういった要素を追加する必要があるのかも検討する必含むものとする．その為，ソースコード 5 は一つのク要がある．id 付与の方法に関しても，構文解析の方ラスに関する記述を想定した DITA トピックとなっ法と関連して検討する必要がある．

ている．また，class や method，field 等，DITA の基本要素には無い新しい要素を導入している．これ

6 まとめと今後の課題

らの要素は，DITA に基本的に含まれる要素を特殊化

ソフトウェアドキュメントとソースコード間の整し，DTD に定義する必要がある．ただし，今回の実合性・追跡性の確保を最終的な目標とし，それらを験の目的とは直接関係ない為，特殊化の定義は行ってDITA によるドキュメント構造化を用い，統合的に管おらず，生成元 XML ファイルの DOCTYPE 宣言も理する環境を提案した．統合管理環境構築の為には，

コメントアウトしている．また，ソースコード中に付

ソースコード自動生成が必要となることから，今回与される id はクラス・メソッド・フィールドにそれ

XSL 変換により XML 文書を Java ソースに変換する

ぞれ与えられ，XML 中の対応する要素の id 属性と実験を行った．実験の結果，ソースコード自動生成に同一のものである．

XSL 変換の仕組みが有効であることが分かった．今

本実験に使用した XSL スタイルシートをソース

後は，対象とするドキュメントについて具体例を用い

コード 3 に示す．また，XSL 変換プロセッサとして，て DITA 適用を行い，対象ドキュメントとする．ま

Saxon9.5 [3] を用いた．Saxon は DITA-OT にも使わた，提案環境の構築は DITA で用いる要素の決定とれており，DITA コンテンツの処理に適していると言

自動生成や構文解析，整合性確保の修正プロセスにつえる．

いて考案していく予定である．

4. 2 結果

参 考 文 献

自動生成の結果を付録のソースコード 6 に示す．入

[1] Altova: UML ツ ー ル, http://www.altova.com/
ja/umodel.html.
[2] DITA コンソーシアムジャパン: DITA コンソーシア
ムジャパン 公開資料, http://dita-jp.org/?cat=13.
[3] Kay, M. H.: The SAXON XSLT and XQuery Processor, http://saxon.sourceforge.net/.
[4] OASIS: The DITA Open Toolkit — DITA
XML.org, http://dita.xml.org/wiki/the-dita-open-toolkit.

力ドキュメントに記載されたクラスの情報にある四つのフィールド，三つのメソッドがそれぞれ修飾子や引数，返り値の型も含めて正しく生成されていることが分かる．また，クラス，メソッド，フィールドに対して，それぞれ元ドキュメントの id 属性と同一の値

[5] OASIS DocBook Technical Committee: DocBook.org, http://www.docbook.org/.
[6] 独立行政法人 情報処理推進機構ソフトウェア・エン
ジニアリング・センター: 共通フレーム 2007, 株式会社
オーム社, 2007.
[7] 戸板晃一, 山本晋一郎, 阿草清慈: XML を用いたソフ
トウェア関連文書とソースプログラムの整合性検査ツー
ル, (2001), pp. 129–140.
[8] 阿草清滋: Sapid Home Page (in Japanese), http://www.sapid.org/index-ja.html.
[9] 坂井麻里恵, 奥野拓: DITA 適用に向けたソフトウェ
アドキュメントの構造化, (2012).

付録: 実験用ソースコードと対象ファイル

ソースコード 3

sample01.xsl

1 <?xml version=” 1 . 0 ” e n c o d i n g=”UTF−8” ?>2 < x s l : s t y l e s h e e t version=” 2 . 0 ” xml:space=” p r e s e r v e ”
3
x m l n s : x s l=” h t t p : //www. w3 . o r g /1999/XSL/ Transform ”>
4 <x s l : o u t p u t method=” t e x t ” e n c o d i n g=”UTF−8” />5< x s l : v a r i a b l e name=” prjName ”
6s e l e c t=” /map/ t i t l e ” />7
8
< !−− r o o t −−>9<x s l : t e m p l a t e match=” / ”>
10<x s l : v a l u e −o f s e l e c t=” $ prjName ” />11
<x s l : a p p l y −t e m p l a t e s s e l e c t=”map/ t o p i c r e f ” />12</ x s l : t e m p l a t e>
13
14
< !−− t o p i c r e f −−>
15<x s l : t e m p l a t e match=” t o p i c r e f [ @type=’ concept ’ ] ”>16
< x s l : v a r i a b l e name=” t o p i c ”
17s e l e c t=” document ( @href ) ” />18
< !−− [ プ ロ ジ ェ ク ト 名 ] / [ ク ラ ス 名 ] . j a v a −−>
19< x s l : r e s u l t −document
20
h r e f=” {$ prjName }/{ t r a n s l a t e ( @href , ’ . d i t a ’ , ’ . java ’ ) } ”
21
method=” t e x t ” e n c o d i n g=”UTF−8”>2223<x s l : a p p l y −t e m p l a t e s s e l e c t=” $ t o p i c // c o n c e p t ” />24</ x s l : r e s u l t −document>25</ x s l : t e m p l a t e>
26
27
< !−− c o n c e p t −−>28<x s l : t e m p l a t e match=” c o n c e p t ”>
29// #i d=<x s l : v a l u e −o f s e l e c t=”@id” />
30
/∗∗
31
<x s l : v a l u e −o f s e l e c t=” s h o r t d e s c ” />32∗/
33
<x s l : v a l u e −o f s e l e c t=” conbody / c l a s s / @ m o d i f i e r ” /> c l a s s <x s l : v a l u e −o fs e l e c t=” t i t l e ” /> {34
<x s l : a p p l y −t e m p l a t e s s e l e c t=” conbody / c l a s s / f i e l d ” />35
<x s l : a p p l y −t e m p l a t e s s e l e c t=” conbody / c l a s s /method” />36}37</ x s l : t e m p l a t e>
38
39
< !−− f i e l d −−>40<x s l : t e m p l a t e match=” f i e l d ”>
41
/∗∗
42
<x s l : v a l u e −o f s e l e c t=”p” />43∗/
44// #i d=<x s l : v a l u e −o f s e l e c t=”@id ” />45
<x s l : v a l u e −o f s e l e c t=” @ m o d i f i e r ” /> <x s l : v a l u e −o f s e l e c t=” @type ” /> <x s l : v a l u e −o f s e l e c t=”@name” /> = <x s l : v a l u e −o f s e l e c t=” @ i n i t V a l ” /> ;46</ x s l : t e m p l a t e>
47
48
< !−− method −−>

49
50
51
52
53
54
55
56

57
58
59
60
61
62
63
64
65
66

<x s l : t e m p l a t e match=”method”>/∗∗<x s l : a p p l y −t e m p l a t e s s e l e c t=”p” /><x s l : a p p l y −t e m p l a t e s s e l e c t=”param” mode=” j a v a d o c ” /><x s l : a p p l y −t e m p l a t e s s e l e c t=” r e t u r n ” mode=” j a v a d o c ” />∗/// #i d=<x s l : v a l u e −o f s e l e c t=”@id” /><x s l : v a l u e −o f s e l e c t=” @ m o d i f i e r ” /> <x s l : a p p l y −t e m p l a t e s s e l e c t=”
r e t u r n ” mode=” code ” /> <x s l : v a l u e −o f s e l e c t=”@name” /> (<x s l : a p p l y −t e m p l a t e s s e l e c t=”param [ 1 ] ” mode=” code−p” /><x s l : a p p l y −t e m p l a t e s
s e l e c t=”param [ 2 &l t ;= p o s i t i o n ( ) ] ” mode=” code−ps ” />) {}</ x s l : t e m p l a t e>
< !−− method /param 第 一 引 数−−><x s l : t e m p l a t e match=”param” mode=” code−p”><x s l : v a l u e −o f s e l e c t=” @ m o d i f i e r ” /> <x s l : v a l u e −o f s e l e c t=” @type ” /> <x s l : v a l u e −o f s e l e c t=”@name” /></ x s l : t e m p l a t e>
< !−− method /param 第 二 以 降 −−><x s l : t e m p l a t e match=”param” mode=” code−ps ”>, <x s l : v a l u e −o f s e l e c t=” @ m o d i f i e r ” /> <x s l : v a l u e −o f s e l e c t=” @type ” /><x s l : v a l u e −o f s e l e c t=”@name” /></ x s l : t e m p l a t e>
<x s l : t e m p l a t e match=”param” mode=” j a v a d o c ”>
@param <x s l : v a l u e −o f s e l e c t=”@name” /> <x s l : v a l u e −o f s e l e c t=” . ” /></ x s l : t e m p l a t e>

67
68
69
70
71
72
< !−− method / r e t u r n −−>73<x s l : t e m p l a t e match=” r e t u r n ” mode=” code ”>
74<x s l : v a l u e −o f s e l e c t=” @type ” />75</ x s l : t e m p l a t e>
76
<x s l : t e m p l a t e match=” r e t u r n ” mode=” j a v a d o c ”>
77@return <x s l : v a l u e −o f s e l e c t=” . ” />78</ x s l : t e m p l a t e>
79 </ x s l : s t y l e s h e e t>

ソースコード 4

map01.ditamap

1 <?xml version=” 1 . 0 ” e n c o d i n g=” u t f −8” ?>2 < !−−< !DOCTYPE bookmap PUBLIC ”−//OASIS//DTD DITA BookMap//EN” ”bookmap . dtd ”>−−>
3 <map i d=” map sample ” xml:lang=” j a −j p ”>
4
< t i t l e>S a m p l e J a v a P r o j e c t</ t i t l e>
56
< t o p i c r e f h r e f=”Fan . d i t a ” typ e=” c o n c e p t ” />7
8 </map>

ソースコード 5

Fan.dita

1 <?xml version=” 1 . 0 ” e n c o d i n g=”UTF−8” ?>2 < !−−< !DOCTYPE c o n c e p t PUBLIC ”−//OASIS//DTD DITA Concept //EN” ” c o n c e p t . dtd ”>−−>
3 <c o n c e p t i d=” j c 0 1 ” xml:lang=” j a −j p ”>

4
5
6
7
8

< t i t l e>Fan</ t i t l e><s h o r t d e s c>扇風機である</ s h o r t d e s c>
<conbody>< c l a s s m o d i f i e r=” p u b l i c ”>
< f i e l d m o d i f i e r=” p u b l i c s t a t i c f i n a l ” type=” i n t ” i d=” j c 0 1 f 0 1 ” name=”
MODE TURN OFF”
9i n i t V a l=” 0 ” >10<p>モード：電源切</p>11</ f i e l d>12
< f i e l d m o d i f i e r=” p u b l i c s t a t i c f i n a l ” type=” i n t ” i d=” j c 0 1 f 0 2 ” name=”
MODE LOW”
13i n i t V a l=” 1 ” >14<p>モード：弱</p>15</ f i e l d>16
< f i e l d m o d i f i e r=” p u b l i c s t a t i c f i n a l ” type=” i n t ” i d=” j c 0 1 f 0 3 ” name=”
MODE HIGH”
17i n i t V a l=” 2 ” >18<p>モード：強</p>19</ f i e l d>20
< f i e l d m o d i f i e r=” p r i v a t e ” ty pe=” i n t ” i d=” j c 0 1 f 0 3 ” name=”mode”
21
i n i t V a l=”MODE TURN OFF” >22<p>現在のモード</p>23</ f i e l d>24<method m o d i f i e r=” p u b l i c ” r e t=” v o i d ” i d=” jc01m01 ” name=” setMode ”>
25<param type=” i n t ” name=”mode”>モード</param>
26<p>モードをセットする</p>27</method>28<method m o d i f i e r=” p u b l i c ” i d=” jc01m02 ” name=” getMode ”>
29<r e t u r n t ype=” i n t ”>MODE TURN OFF, MODE LOW, MODE HIGH</ r e t u r n>
30<p>現在のモードを返す</p>31</method>32<method m o d i f i e r=” p u b l i c ” r e t=” i n t ” i d=” jc01m03 ” name=” g e t V e l o c i t y ”>
33
<r e t u r n t ype=” i n t ”>風速 [m/ s ]</ r e t u r n>
34<p>風速を返す</p>35</method>36</ c l a s s>
37 </ conbody>38 </ c o n c e p t>

ソースコード 6

1
2
3
4
5
6
7
8
9
10
11
12
13
14

Fan.java// #i d=j c 0 1/∗ ∗扇風機である∗/
public c l a s s Fan {/∗ ∗モード：電源切∗/// #i d=j c 0 1 f 0 1
public s t a t i c f i n a l i n t MODE TURN OFF = 0 ;

15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

/∗ ∗
モード：弱
∗/
// #i d=j c 0 1 f 0 2
public s t a t i c f i n a l i n t MODE LOW = 1 ;
/∗ ∗
モード：強
∗/
// #i d=j c 0 1 f 0 3
public s t a t i c f i n a l i n t MODE HIGH = 2 ;/∗ ∗現在のモード∗/// #i d=j c 0 1 f 0 3
private i n t mode = MODE TURN OFF;/∗ ∗モードをセットする@param mode モ ー ド∗/// #i d=jc01m01
public setMode (i n t mode
) {

}
/∗ ∗
現在のモードを返す@return MODE TURN OFF, MODE LOW, MODE HIGH∗/// #i d=jc01m02
publicin t
getMode ( ) {
}
/∗ ∗
風速を返す

@return 風 速 [m/ s ]∗/// #i d=jc01m03
public

70
71
72
73
74

in t
getVelocity () {}}