Home > Articles

  • Print
  • + Share This
Like this article? We recommend

Linking Scenario

To demonstrate XLink a little further, we will look at a typical scenario that would benefit immensely from a more sophisticated linking model, showing how XLink and XPointer might be used.

Jack is undertaking an online correspondence course about XML and linking. The course includes support for richly linked course content, discussion forums, and interactive group work. Jack is completing some work for the course. After logging in to the main site, he goes to the course material for the relevant session on linking concepts. The material provides an initial discussion of some basic concepts and then directs Jack to study a set of readings that have been published elsewhere on the Web (and that predate the course material—hence, the authors of these readings are oblivious to the existence of the course that Jack is taking).

Jack follows the link to the first article and commences reading. While reading the material, he comes across the term transclusion. He clicks on this word, and a window pops up providing Jack with a definition of transclusion provided by his instructor.

Adding Links to Read-Only Material

In this case, the course instructor has added links for definitions to material over which she has no control—material that (as far as the instructor is concerned) is read-only. With conventional HTML pages, links must be embedded into the source material, which, in this case, cannot be modified. As such, the only ways of achieving this using standard Web servers and HTML pages are either to save the pages locally and modify them to include the new links (which is inefficient and has copyright problems), or to extend the server functionality to allow it to obtain other pages, modify them dynamically to add new links, and then deliver the modified pages (effectively, a link-adding proxy—again, rather complex to manage).

This difficulty is a consequence of having to embed links in the source material. A much simpler approach is to define links independently of the source material. A user could specify (or have specified for him) a set of pages to view and the list of links to use with this content (potentially stored completely independently from the content). As a result, authors could add their own links in content over which they have no control. Indeed, different lists of links could be created for different users or different situations. As will be shown later, XLink explicitly supports this type of functionality through third-party links and external linkbases.

Jack reads the definition and then closes the pop-up window. He continues reading, only to come across the phrase "Ted Nelson's definition of transclusion includes the concept of contexts." Again, Jack selects transclusion, but this time a menu pops up providing Jack with the choice of four link destinations. The first choice is the definition, which he has already seen.

Generic Links

This part of the scenario describes a link that had the same link anchor text as the previous example (transclusion). We can create this situation by simply adding a new link anchor (and associated link) for each occurrence of the relevant phrase, but this could become extremely cumbersome and difficult to maintain if the word occurred often.

Generic links solves this problem. By defining a link that has as its source anchor any occurrence of the relevant text, we effectively create a link that is much easier to maintain. Again, this is relatively easy to implement in XML. For example, the following XPointer refers to any occurrence of the text transclusion within element content in a document (though it won't match attribute values and any XML markup such as element or attribute names):


This XPointer can then be used to create a link from all occurrences of this text to the relevant definition of the text in a file containing a list of definitions. For example, the following third-party extended link provides a link from all occurrences of the words transclude, transclusion, and transcluding within the link.xml file to an appropriate definition in the defs.xml file (note that this link can stored in a third file unrelated to either):

<extendedlink xlink:type="extended">
<loc xlink:type="locator"
<loc xlink:type="locator"
<loc xlink:type="locator"
<loc xlink:href="defs.xml#xpointer(//defn[phrase='transclude'])"

<go xlink:type="arc"

The second destination is to Ted Nelson's definition (in its original source), and the third and fourth destinations relate to two different discussions of the relationship between transclusion and context.

Overlapping Anchors

The example described is more complex than just using generic anchors. In this case, Jack is given a choice of four possible destinations. These destinations could be generated from several sources. The first destination given is generated from the fact that the selected word (transclusion) has a generic link to a definition of the phrase (as described above).

The second destination (to Ted Nelson's original definition and discussion of transclusion) might have been generated from an outbound link embedded in the content itself. For example, the source content for the page might have looked something like:

<p id="p23">...so let us consider the issue of context. 
<simplelink xlink:href="Nelson.htm" xlink:show="new"> 
Ted Nelson's definition of transclusion</simplelink> 
includes the concept of contexts. What this means is that...

In this example, the phrase "Ted Nelson's definition of transclusion" is the anchor for a simple link. But the word transclusion within this phrase is also the anchor for a generic link; when it is selected, the user is given the choice of destination to follow.

The situation can become more complex still if we add another third-party link with an anchor that overlaps. For example, we could define the following link (abbreviated for clarity):

<extendedlink xlink:type="extended">
 <loc xlink:href="doc0.xml#xpointer(string-range(id('p23'),
      'transclusion includes the concept of contexts'))"
 <loc xlink:href="doc1.xml"
 <loc xlink:href="doc2.xml"

<go xlink:from="phrase"

This creates a link from the phrase "transclusion includes the concept of contexts" within the specified document to two possible destinations. In other words, we have overlapping anchors. We also have a link that has two possible destinations (which, in this case, the user can choose from). In summary, we have the following:

  • A generic (external) link that creates an anchor from "Ted Nelson's definition of transclusion includes the concept of contexts" for a link to the instructor's definition of transclusion.

  • An embedded link that creates an anchor from "Ted Nelson's definition of transclusion includes the concept of contexts" for a link to Ted Nelson's original definition of transclusion.

An external link that creates an anchor from "Ted Nelson's definition of transclusion includes the concept of contexts" for a link to two different discussions of transclusion and context.

When Jack selects the word transclusion, he is given the choice of which of the four possible destinations he wants to view.

Jack finishes reading the article and returns to the main page for the current week's course material. He continues to read several additional articles, including a very recent essay. A few days later, he returns to the course material and navigates to a discussion that compares the articles. The discussion includes fragments from most of the articles.

Transclusion: Supporting Composition

This fragment of the scenario is a true example of transclusion. The document Jack is viewing could be constructed manually, but it makes more sense to build it directly from the original sources. For example, consider the following XML fragment:

Another definition of links has been provided by Joe Bloggs. 
Joe has stated that:
<simplelink xlink:href="bloggs.xml#xpointer(id('quote32')"
      xlink:show="embed" xlink:actuate="onLoad"/>

In this case, the content from the remote resource is embedded directly in the document. The show="embed" tag means that the content is viewed directly in the source document rather than being viewed independently. The actuate="onLoad" means that the embedding should occur immediately upon loading the source document.

Jack notices that the discussion compares several definitions of the term link, but the definition from the recent essay seems different than what he remembers. He selects the definition and, from the main menu, chooses to see the original source. A second window pops up, showing the definition in its original context of the essay. Jack notices that the definition has indeed been changed in the original material.

Transclusion: Supporting Access to Source

In the "embedding" example just described, the reader does not need to know that the content has been embedded from a different source. However, in the true spirit of transclusion, it is useful for the reader to be aware of this so that he can view the material in its original context, if desired. In this case, Jack has seen a quote and wants to see its original source. He selects the quote and then selects the appropriate menu option (which is, of course, dependent upon the particular implementation).

The browser could then retrieve the Bloggs.xml document and highlight the section indicated by the XPointer xpointer(id("quote32")). In effect, Jack is able to see the transcluded content in its original context.

Jack then returns to the original discussion of links and chooses to see an animation showing how a Web server might support generic links. While watching the animation, he sees a Web server interacting with a linkbase. He is unsure what a linkbase is. Next to the animation is a list of components shown within the animation (Server, Linkbase, Web Page, Network, and so on). Jack clicks Linkbase" and the list of words remains, but the single word Linkbase is replaced by a short description of the linkbase.

Link Semantics: Embedding Content

This part of the scenario illustrates an alternative use of embedding content. In this case, we have a list of words that forms the basis for anchors. When a word is selected, the relevant arc is traversed. Rather than causing a new document to be viewed (either in a new window or replacing the existing document), the content is embedded in the existing document. For example, consider the following fragment:

     xlink:show="embed" xlink:actuate="onRequest">Server

     xlink:show="embed" xlink:actuate="onRequest">LinkBase

Each word is an anchor for a link. The link, however, creates embedded content only when it is activated. Thus, when Jack selects a component name, the name is replaced by the description of that component. Effectively, this has implemented a partial folding editor.

The animation is also paused.

Link Semantics: Controlling Context

This final fragment of the scenario illustrates an even more complex situation. In this case, the document contains several media components. When we activate a link in one component of the document (by selecting a text name), we want to cause a change in the behavior of another component of the document (for example, pausing an animation). The current version of XLink does not allow behavior such as this to be explicitly specified, but it does provide an "extension" mechanism. XLink supports the show="other" attribute value and explicitly states that this could be used to instruct an application to look for other markup determining the presentation. We could then include suitable markup to explicitly define the behavior described above, possibly by appropriate use of style sheets (and, in particular, using the multi-switch and multi-property-set XSL-FO formatting object) or suitable scripting.

Jack reads this and then clicks the description. The description is again replaced by the single word, restoring the list to its original state. The animation recommences, and Jack continues watching, but now with a better understanding of the interaction being shown.

  • + Share This
  • 🔖 Save To Your Account

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information

To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.


Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.


If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information

Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.


This site is not directed to children under the age of 13.


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information

If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information

Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents

California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure

Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact

Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice

We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020