itemgroupとは何か?

むかしtask/taskbody/steps/stepの実装をしようとしたとき、要素モデルの中にitemgroupが出てきて「こりゃなんだ?」と言われたことがありました.プラグインでは、itemgroupを基本的にブロック要素でレイアウトしようとしたのですが(実際そうしないと見た方も区切りがわからなくて困ってしまうのですが)質問した方はその根拠がわかっていなかったようです.

確かにDITA 1.2の仕様書を見るとstep(手順)のコンテンツモデルは次のようになっています.

( (note or hazardstatement) (any number) then cmd then (choices or choicetable or info or itemgroup or stepxmp or substeps or tutorialinfo) (any number) then (stepresult) (optional) ) 

そして興味深いことに、infoのクラス属性は"- topic/itemgroup task/info "、stepxmpは"- topic/itemgroup task/stepxmp "、tutorialinfoは"- topic/itemgroup task/tutorialinfo "、stepresultは"- topic/itemgroup task/stepresult "とすべてitemgroupの特殊化したものなのです.

実は質問をした方も良くわかっていなかったようなのですが、itemgroupはそもそもli(list item)やdd(定義の説明)を整理分割するためのものです.DITA 1.2の定義で見ますと、

3.1.6.6 itemgroup

The <itemgroup> element can be used to sub-divide or organize elements that occur inside a list item, definition, or parameter definition.

The <itemgroup> element is particularly useful as a basis for specialization, where it can be used to group content within specialized list items or definitions. For example, in the OASIS task specialization, many elements within the <step> element are specialized from <itemgroup>.

のようになっています.stepのinfoやstepxmp、tutorialinfo、stepresultは元をただせば皆liのコンテンツを「意味を持たせた塊」に分割するものだったということです.

では同じところに並んでいてcmd(手順で何をするかという指示)はなぜ、クラス属性が"- topic/ph task/cmd "でインラインなのでしょう?それはitemgroupは、次のようにコンテンツモデルが広すぎてこちらを採用してしまうと記述があいまいになってしまうからなのだと思います.

( text data or dl or parml or fig or syntaxdiagram or imagemap or image or lines or lq or note or hazardstatement or object or ol or p or pre or codeblock or msgblock or screen or simpletable or sl or table or ul or boolean or cite or keyword or apiname or option or parmname or cmdname or msgnum or varname or wintitle or ph or b or i or sup or sub or tt or u or codeph or synph or filepath or msgph or systemoutput or userinput or menucascade or uicontrol or q or term or abbreviated-form or tm or xref or state or data or data-about or foreign or unknown or draft-comment or fn or indextermref or indexterm or required-cleanup) (any number) 

cmdは的確に読み手が行うことを指示しなければなりません.ここにテーブル(table)や図(fig)やリスト(ol/ul)が入ってしまっては困るのです.なのでコンテンツモデルも次のように少ないのです.

( text data or boolean or cite or keyword or apiname or option or parmname or cmdname or msgnum or varname or wintitle or ph or b or i or sup or sub or tt or u or codeph or synph or filepath or msgph or systemoutput or userinput or menucascade or uicontrol or q or term or abbreviated-form or tm or xref or state or data or data-about or foreign or unknown or image or draft-comment or fn or indextermref or indexterm or required-cleanup) (any number)

itemgroupはstepの元となるliでもコンテンツモデルに入っていますが、普通olやulのliをオーサリングする場合、その中を意味手的に分割するということはあまり意識しないのではないかと思います.

しかしtaskのstepとなると、意味合いを明確にしなければなりません.このためitemgroupを特殊化した要素を使用しているのでしょう.

最初にcmdで何を行うかの指示を記述し、infoで補助情報を記述する、stepresultでsetpの実行結果を記述するという具合です.

こうしてclass属性を見て追ってみるだけでも、DITAはよく考えぬかれた結果が集約されているもだなあと思います.

※ DITAは現在1.3が最新ですが、要素が増えた関係でコンテンツモデルが見づらくなっているため1.2の仕様を参照しました.