Example: Flagging with @outputclass
This section is non-normative.
In this scenario, the @outputclass attribute in a DITAVAL document is
used to enable CSS based flagging.
An additional expectation for this scenario is that the processor rendering DITA content
preserves @outputclass values as CSS @class tokens in HTML5.
For example, the phrase <ph outputclass="bird">eagle</ph> might be
rendered in HTML5 as <span class="bird">eagle</span>.
The following code sample illustrates a simple DITAVAL document that sets up two rules for
flagging using @outputclass.
<val>
<prop action="flag" att="product" val="myProduct" outputclass="myProductToken"/>
<prop action="flag" att="product" val="myOtherProduct" outputclass="myOtherProductToken"/>
</val>
Now, assume the following DITA content is processed using the rules from that DITAVAL
document:
<ol>
<li>This list item applies to all content</li>
<li product="myProduct">This list item is specific to my product</li>
<li product="myProduct" outputclass="example">This list item is an example of an edge case</li>
<li product="myOtherProduct">This list item is specific to my OTHER product</li>
<li product="myProduct myOtherProduct">This list item is specific to both of my products</li>
</ol>Based on the rules from that DITAVAL document, the topic content is processed as follows:
- The first item does not specify any conditional processing attributes, and is handled normally.
- The second item specifies
product="myProduct". Based on the DITAVAL document, this results in a setting onoutputclass="myProductToken". The content is processed as if the original element was:<li product="myProduct" outputclass="myProductToken">. - The third item specifies
product="myProduct", but already has an@outputclassattribute specified in the source. Based on the DITAVAL document, the content is processed as if the original element was:<li product="myProduct" outputclass="myOtherProductToken example">. Note that the value supplied by the DITAVAL document is placed before any value already in the source. - The fourth item specifies
product="myOtherProduct". Based on the DITAVAL document, this results in a setting onoutputclass="myOtherProductToken". The content is processed as if the original element was:<li product="myOtherProduct" outputclass="myOtherProductToken">. - The fifth item specifies both products with
product="myProduct myOtherProduct". Based on the DITAVAL document, this results in a setting of eitheroutputclass="myProductToken myOtherProductToken"oroutputclass="myOtherProductToken myProductToken". The order of the two tokens is unspecified; if a processor chooses the first, the content is processed as if the original element was:<li product="myProduct myOtherProduct" outputclass="myProductToken myOtherProductToken">.
With the expectation that the processor maps
@outputclass values onto the
HTML @class attribute, the rendered HTML5 result would look like
this:<ol>
<li>This list item applies to all content</li>
<li class="myProductToken">This list item is specific to my product</li>
<li class="myProductToken example">This list item is an example of an edge case</li>
<li class="myOtherProductToken">This list item is specific to my OTHER product</li>
<li class="myProductToken myOtherProductToken">This list item is specific to both of my products</li>
</ol>