ではどのような場合に不具合が出るのでしょうか?例えば@outputclassは様々な用途に使用されます.でも悩みの種は@outputclassは検証されない点です.subjectSchemaにより検証されれば、スキーマ/DTDを直すことなしに目的の結果を得ることができます.これはいいかもしれません.
考えた例は次のようなものです.
fig/@outputclass="none/left/right"
figgroup/@outputclass="auto/left/right"
と制限したいとします.そうすると作るsubjectSchemaは次のようなものになります.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE subjectScheme PUBLIC "-//OASIS//DTD DITA Subject Scheme Map//EN" "subjectScheme.dtd">
<subjectScheme>
<subjectHead>
<subjectHeadMeta>
<navtitle> Constraint @outputclass for fig </navtitle>
</subjectHeadMeta>
</subjectHead>
<subjectdef keys="floatLeft">
<subjectdef keys="left">
<topicmeta>
<navtitle>Floats left</navtitle>
</topicmeta>
</subjectdef>
</subjectdef>
<subjectdef keys="floatRight">
<subjectdef keys="right">
<topicmeta>
<navtitle>Floats right</navtitle>
</topicmeta>
</subjectdef>
</subjectdef>
<subjectdef keys="outputclassFig">
<subjectdef keys="none">
<topicmeta>
<navtitle>No float</navtitle>
</topicmeta>
</subjectdef>
<subjectdef keyref="floatLeft"/>
<subjectdef keyref="floatRight"/>
</subjectdef>
<subjectdef keys="outputclassFigGroup">
<subjectdef keys="auto">
<topicmeta>
<navtitle>Auto (Same as previous)</navtitle>
</topicmeta>
</subjectdef>
<subjectdef keyref="floatLeft"/>
<subjectdef keyref="floatRight"/>
</subjectdef>
<enumerationdef>
<elementdef name="fig"/>
<attributedef name="outputclass"/>
<subjectdef keyref="outputclassFig"/>
</enumerationdef>
<enumerationdef>
<elementdef name="figgroup"/>
<attributedef name="outputclass"/>
<subjectdef keyref="outputclassFigGroup"/>
</enumerationdef>
</subjectScheme>
何故"floatLeft"や"floatRight"のようなキー定義を作るのは仕方がないのです.あくまでもキー定義なので、
<subjectdef keys="outputclassFig">
<subjectdef keys="outputclassFigGroup">
に同じキーを定義すると動作がおかしくなってしまうのです.ところがoXygenで出される候補を見ると、次のようにfloatLeftもfloatRightも出てしまうのです.これは望まれた結果ではないのですが、よくよくsubjectSchmeを考えてみるとあくまでもkeys/keyrefの機構をつかっているので止むを得ないのかもしれません.あげくの果てにDITA-OT 2.3.1でpublishすると画面のようにエラーメッセージが出ます.こちらもいまいちです.
これはoXygenのフォーラムに出しましたが、Raduは[dita-comment]に質問を出してくれました.
Validating @outputclass by subjectScheme
Gathering restricted values using a subject scheme map
という訳で、残念ながら当面@outputclassをsubjectSchemで検証するというのは決着が付くまで無理ではないかと思います.