Processing xrefs and conrefs within a conref
- Direct URI reference (but not a same-topic fragment identifier )
- When the address is a direct URI reference of any form other than a same-topic fragment identifier, processors MUST resolve it relative to the source document that contains the original URI reference.
- Same-topic fragment identifier
- When the address is a same-topic fragment identifier, processors MUST resolve it relative to the location of the content reference (referencing context).
- Key reference
- When the address is a key reference, processors MUST resolve it relative to the location of the content reference (referencing context).
When resolving key references or same-topic fragment identifiers, the phrase location of the content reference means the final resolved context. For example, in a case where content references are chained (topic A pulls from topic B, which in turn pulls a reference from topic C), the reference is resolved relative to the topic that is rendered. When topic B is rendered, the reference is resolved relative to the content reference in topic B; when topic A is rendered, the reference is resolved relative to topic A. If content is pushed from topic A to topic B to topic C, then the same-topic fragment identifier is resolved in the context of topic C.
The implication is that a content reference or cross reference can resolve to different targets in different use contexts. This is because a URI reference that contains a same-topic fragment identifier is resolved in the context of the topic that contains the content reference, and a key reference is resolved in the context of the key scope that is in effect for each use of the topic that contains the content reference.
note
Example: Resolving conrefs to elements that contain cross references
Consider the following paragraphs in paras-01.dita
that are intended
to be used by reference from other topics:
<topic id="paras-01"><title>Reusable paragraphs</title> <body> <p id="p1">See <xref href="#paras-01/p5"/>.</p> <p id="p2">See <xref href="topic-02.dita#topic02/fig-01"/>.</p> <p id="p3">See <xref href="#./p5"/>.</p> <p id="p4">See <xref keyref="task-remove-cover"/>.</p> <p id="p5">Paragraph 5 in paras-01.</p> </body> </topic>
The paragraphs are used by content reference from other topics, including the
using-topic-01.dita
topic:
<topic id="using-topic-01"><title>Using topic one</title> <body> <p id="A" conref="paras-01.dita#paras-01/p1"/> <p id="B" conref="paras-01.dita#paras-01/p2"/> <p id="C" conref="paras-01.dita#paras-01/p3"/> <p id="D" conref="paras-01.dita#paras-01/p4"/> <p id="p5">Paragraph 5 in using-topic-01</p> </body> </topic>
Following resolution of the content references and processing of the
<xref> elements in the referenced paragraphs, the rendered cross
references in using-topic-01.dita
are shown
in the following table.
Paragraph | Value of @id attribute on conrefed paragraph | <xref> within conrefed paragraph | Resolution |
---|---|---|---|
A | p1 | <xref href="#paras-01/p5"/> |
The cross reference in paragraph p1 is a direct URI reference that does not
contain a same-topic fragment identifier. It can be resolved only to paragraph p5
in
paras-01.dita , which contains the content "Paragraph 5 in
paras-01".
|
B | p2 | <xref href="topic-02.dita#topic02/fig-01"/> |
The cross reference in paragraph p2 is a direct URI reference. It can be resolved
only to the element with id="fig-01" in
topic-02.dita .
|
C | p3 | <xref href="#./p5"/> |
The cross reference in paragraph p3 is a direct URI reference that contains a
same-topic fragment identifier. Because the URI reference contains a same-topic
fragment identifier, the reference is resolved in the context of the referencing topic
( If |
D | p4 | <xref keyref="task-remove-cover"/> |
The cross reference in paragraph p4 is a key reference. It is resolved to whatever resource is bound to the key name "task-remove-cover" in the applicable map context. |
Example: Resolving conrefs to elements that contain key-based cross references
Consider the following map, which uses the topics from the previous example:
<map> <topicgroup keyscope="product-1"> <topicref keys="task-remove-cover" href="prod-1-task-remove-cover.dita"/> <topicref href="using-topic-01.dita"/> </topicgroup> <topicgroup keyscope="product-2"> <topicref keys="task-remove-cover" href="prod-2-task-remove-cover.dita"/> <topicref href="using-topic-01.dita"/> </topicgroup> </map>
The map establishes two key scopes: "product-1" and "product-2". Within the map branches,
the key name "task-remove-cover" is bound to a different topic. The topic
using-topic-01.dita
, which includes a conref to a paragraph that
includes a cross reference to the key name "task-remove-cover", is also referenced
in each
branch. When each branch is rendered, the target of the cross reference is different.
In the first branch with the key scope set to "product-1", the cross reference from
paragraph p4 is resolved to prod-1-task-remove-cover.dita
. In the
second branch with the key scope set to "product-2", the cross reference from paragraph
p4
is resolved to prod-2-task-remove-cover.dita
.