prefer.internal.olink — Prefer a local olink reference to an external reference


<xsl:param name="prefer.internal.olink" select="0"></xsl:param>


If you are re-using XML content modules in multiple documents, you may want to redirect some of your olinks. This parameter permits you to redirect an olink to the current document.

For example: you are writing documentation for a product, which includes 3 manuals: a little installation booklet (booklet.xml), a user guide (user.xml), and a reference manual (reference.xml). All 3 documents begin with the same introduction section (intro.xml) that contains a reference to the customization section (custom.xml) which is included in both user.xml and reference.xml documents.

How do you write the link to custom.xml in intro.xml so that it is interpreted correctly in all 3 documents?

  • If you use xref, it will fail in user.xml.

  • If you use olink (pointing to reference.xml), the reference in user.xml will point to the customization section of the reference manual, while it is actually available in user.xml.

If you set the prefer.internal.olink parameter to a non-zero value, then the processor will first look in the olink database for the olink's targetptr attribute value in document matching the current.docid parameter value. If it isn't found there, then it tries the document in the database with the targetdoc value that matches the olink's targetdoc attribute.

This feature permits an olink reference to resolve to the current document if there is an element with an id matching the olink's targetptr value. The current document's olink data must be included in the target database for this to work.


There is a potential for incorrect links if the same id attribute value is used for different content in different documents. Some of your olinks may be redirected to the current document when they shouldn't be. It is not possible to control individual olink instances.