Example: <ditavalref> error conditions
The following map fragment contains several error conditions that result in name clashes:
<topicref href="a.dita" keys="a"> <ditavalref href="one.ditaval"/> <ditavalref href="two.ditaval"/> <topicref href="b.dita" keys="b"/> </topicref> <topicref href="a.dita"/> <topicref href="c.dita" keys="c"> <ditavalref href="one.ditaval"> <ditavalmeta> <dvrResourceSuffix>-token</dvrResourceSuffix> </ditavalmeta> </ditavalref> <ditavalref href="two.ditaval"> <ditavalmeta> <dvrResourceSuffix>-token</dvrResourceSuffix> </ditavalmeta> </ditavalref> </topicref>
In this sample, the effective map that results from evaluating the filter conditions has several clashes. In some cases the same document must be processed with conflicting conditions, using the same URI. In addition, because no key scope is added or modified, keys in the branch are duplicated in such a way that only one version is available for use. When the branches are evaluated to create distinct copies, the filtered branches result in the following equivalent map:
<topicref href="a.dita" keys="a"> <!-- a.dita to be filtered by one.ditaval --> <topicref href="b.dita" keys="b"/> <!-- b.dita to be filtered by one.ditaval --> </topicref> <topicref href="a.dita" keys="a"> <!-- a.dita to be filtered by two.ditaval; key "a" ignored --> <topicref href="b.dita" keys="b"/> <!-- b.dita to be filtered by two.ditaval; key "b" ignored --> </topicref> <topicref href="a.dita"/> <topicref href="c-token.dita" keys="c"> <!-- c-token.ditaval to be filtered by one.ditaval --> </topicref> <topicref href="c-token.dita" keys="c"> <!-- c-token.ditaval to be filtered by two.ditaval, key "c" ignored --> </topicref>
The equivalent map highlights several problems with the original source:
- The key names "a" and "b" are present in a branch that will be duplicated. No key scope is introduced for either version of the branch, meaning that the keys will be duplicated. Because there can only be one effective key definition for "a" or "b", it only is possible to reference one version of the topic using keys.
- The key name "c" is present on another branch that will be duplicated, resulting in the same problem.
- The file
c.dita
is filtered with two sets of conditions, each of which explicitly maps the filtered resource toc-token.dita
. This is an error condition that should be reported by processors. - In situations where resource names map directly to output file names, such as an HTML5
rendering that creates files based on the original resource name, the following name
conflicts also occur. In this case a processor would need to report an error, use
an
alternate naming scheme, or both:
a.dita
generatesa.html
using three alternate set of conditions. One version usesone.ditaval
, one version usestwo.ditaval
, and the third version uses no filtering.b.dita
generatesb.html
using two alternate set of conditions. One version usesone.ditaval
, and the other version usestwo.ditaval
.