<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Automatic Links</title>
<link rel="stylesheet" type="text/css" href="http://projectmallard.org/index.css">
<script type="text/javascript" language="javascript" src="jquery.js"></script><script type="text/javascript" language="javascript" src="jquery.syntax.js"></script><script type="text/javascript" language="javascript">jQuery(document).ready( function () { jQuery.syntax({root: '', blockLayout: 'plain'}, function (options, html, container) { html.attr('class', container.attr('class')); return html; }); });</script><script type="text/javascript" language="javascript"><script type="text/javascript" language="javascript">
yelp_paint_zoom = function (zoom, zoomed) {
  var ctxt = zoom.children('canvas')[0].getContext('2d');
  ctxt.strokeStyle = ctxt.fillStyle = '#2e3436'
  ctxt.clearRect(0, 0, 10, 10);
  ctxt.strokeRect(0.5, 0.5, 9, 9);
  if (zoomed) {
    ctxt.fillRect(1, 1, 9, 4);
    ctxt.fillRect(5, 5, 4, 4);
    zoom.attr('title', zoom.attr('data-zoom-out-title'));
  }
  else {
    ctxt.fillRect(1, 5, 4, 4);
    zoom.attr('title', zoom.attr('data-zoom-in-title'));
  }
}
$.fn.yelp_auto_resize = function () {
  var fig = $(this);
  if (fig.is('img'))
    fig = fig.parents('div.figure').eq(0);
  if (fig.data('yelp-zoom-timeout') != undefined) {
    clearInterval(fig.data('yelp-zoom-timeout'));
    fig.removeData('yelp-zoom-timeout');
  }
  var imgs = fig.find('img');
  for (var i = 0; i < imgs.length; i++) {
    var img = $(imgs[i]);
    if (img.data('yelp-load-bound') == true)
      img.unbind('load', fig.yelp_auto_resize);
    if (!imgs[i].complete) {
      img.data('yelp-load-bound', true);
      img.bind('load', fig.yelp_auto_resize);
      return false;
    }
  }
  $(window).unbind('resize', yelp_resize_imgs);
  var zoom = fig.children('div.inner').children('a.zoom');
  for (var i = 0; i < imgs.length; i++) {
    var img = $(imgs[i]);
    if (img.data('yelp-original-width') == undefined) {
      img.data('yelp-original-width', img.width());
    }
    if (img.data('yelp-original-width') > img.parent().width()) {
      if (img.data('yelp-zoomed') != true) {
        img.width(img.parent().width());
      }
      zoom.show();
    }
    else {
      img.width(img.data('yelp-original-width'));
      zoom.hide();
    }
  }
  /* The image scaling above can cause the window to resize if it causes
   * scrollbars to disappear or reapper. Unbind the resize handler before
   * scaling the image. Don't rebind immediately, because we'll still get
   * that resize event in an idle. Rebind on the callback instead.
   */
  var reresize = function () {
    $(window).unbind('resize', reresize);
    $(window).bind('resize', yelp_resize_imgs);
  }
  $(window).bind('resize', reresize);
  return false;
};
yelp_resize_imgs = function () {
  $('div.figure img').parents('div.figure').each(function () {
    var div = $(this);
    if (div.data('yelp-zoom-timeout') == undefined)
      div.data('yelp-zoom-timeout', setTimeout(function () { div.yelp_auto_resize() }, 1));
  });
  return false;
};
$(document).ready(function () {
  $('div.figure img').parents('div.figure').each(function () {
    var fig = $(this);
    var zoom = fig.children('div.inner').children('a.zoom');
    zoom.append($('<canvas width="10" height="10"/>'));
    yelp_paint_zoom(zoom, false);
    zoom.data('yelp-zoomed', false);
    zoom.click(function () {
      var zoomed = !zoom.data('yelp-zoomed');
      zoom.data('yelp-zoomed', zoomed);
      zoom.parent().find('img').each(function () {
        var zimg = $(this);
        zimg.data('yelp-zoomed', zoomed);
        if (zoomed)
          zimg.width(zimg.data('yelp-original-width'));
        else
          zimg.width(zimg.parent().width());
        yelp_paint_zoom(zoom, zoomed);
      });
      return false;
    });
  });
  yelp_resize_imgs();
  $(window).bind('resize', yelp_resize_imgs);
});
Node.prototype.is_a = function (tag, cls) {
  if (this.nodeType == Node.ELEMENT_NODE) {
    if (tag == null || this.tagName.toLowerCase() == tag) {
      if (cls == null)
        return true;
      var clss = this.className.split(' ');
      for (var i = 0; i < clss.length; i++) {
        if (cls == clss[i])
          return true;
      }
    }
  }
  return false;
};
function yelp_init_media (media) {
  var control;
  var controlsDiv;
  var playControl;
  var rangeControl;
  var currentSpan;
  for (controlsDiv = media.nextSibling; controlsDiv; controlsDiv = controlsDiv.nextSibling)
{
    if (controlsDiv.is_a('div', 'media-controls'))
      break;
}
  if (!controlsDiv)
    return;
  for (control = controlsDiv.firstChild; control; control = control.nextSibling) {
    if (control.nodeType == Node.ELEMENT_NODE) {
      if (control.is_a('button', 'media-play'))
        playControl = control;
      else if (control.is_a('input', 'media-range'))
        rangeControl = control;
      else if (control.is_a('span', 'media-current'))
        currentSpan = control;
    }
  }

  var ttmlDiv;
  for (ttmlDiv = controlsDiv.nextSibling; ttmlDiv; ttmlDiv = ttmlDiv.nextSibling)
    if (ttmlDiv.is_a('div', 'media-ttml'))
      break;

  var playCanvas;
  for (playCanvas = playControl.firstChild; playCanvas; playCanvas = playCanvas.nextSibling)
    if (playCanvas.is_a('canvas', null))
      break;
  var playCanvasCtxt = playCanvas.getContext('2d');
  var paintPlayButton = function () {
    playCanvasCtxt.fillStyle = '#2e3436'
    playCanvasCtxt.clearRect(0, 0, 20, 20);
    playCanvasCtxt.beginPath();
    playCanvasCtxt.moveTo(5, 5);
    playCanvasCtxt.lineTo(5, 15);
    playCanvasCtxt.lineTo(15, 10);
    playCanvasCtxt.lineTo(5, 5);
    playCanvasCtxt.fill();
  }
  var paintPauseButton = function () {
    playCanvasCtxt.fillStyle = '#2e3436'
    playCanvasCtxt.clearRect(0, 0, 20, 20);
    playCanvasCtxt.beginPath();
    playCanvasCtxt.moveTo(5, 5);
    playCanvasCtxt.lineTo(9, 5);
    playCanvasCtxt.lineTo(9, 15);
    playCanvasCtxt.lineTo(5, 15);
    playCanvasCtxt.lineTo(5, 5);
    playCanvasCtxt.fill();
    playCanvasCtxt.beginPath();
    playCanvasCtxt.moveTo(11, 5);
    playCanvasCtxt.lineTo(15, 5);
    playCanvasCtxt.lineTo(15, 15);
    playCanvasCtxt.lineTo(11, 15);
    playCanvasCtxt.lineTo(11, 5);
    playCanvasCtxt.fill();
  }
  paintPlayButton();

  var mediaChange = function () {
    if (media.ended)
      media.pause()
    if (media.paused) {
      playControl.setAttribute('value', playControl.getAttribute('data-play-label'));
      paintPlayButton();
    }
    else {
      playControl.setAttribute('value', playControl.getAttribute('data-pause-label'));
      paintPauseButton();
    }
  }
  media.addEventListener('play', mediaChange, false);
  media.addEventListener('pause', mediaChange, false);
  media.addEventListener('ended', mediaChange, false);

  var playClick = function () {
    if (media.paused || media.ended)
      media.play();
    else
      media.pause();
  };
  playControl.addEventListener('click', playClick, false);

  var ttmlNodes = [];
  var ttmlNodesFill = function (node) {
    var child;
    if (node != null) {
      for (child = node.firstChild; child; child = child.nextSibling) {
        if (child.nodeType == Node.ELEMENT_NODE) {
          if (child.is_a(null, 'media-ttml-node'))
            ttmlNodes[ttmlNodes.length] = child;
          ttmlNodesFill(child);
        }
      }
    }
  }
  ttmlNodesFill(ttmlDiv);

  var timeUpdate = function () {
    rangeControl.value = parseInt((media.currentTime / media.duration) * 100);
    var mins = parseInt(media.currentTime / 60);
    var secs = parseInt(media.currentTime - (60 * mins))
    currentSpan.innerText = mins + (secs < 10 ? ':0' : ':') + secs;
    for (var i = 0; i < ttmlNodes.length; i++) {
      if (media.currentTime >= parseFloat(ttmlNodes[i].getAttribute('data-begin')) &&
          (!ttmlNodes[i].hasAttribute('data-end') ||
           media.currentTime < parseFloat(ttmlNodes[i].getAttribute('data-end')) )) {
        if (ttmlNodes[i].tagName == 'span')
          ttmlNodes[i].style.display = 'inline';
        else
          ttmlNodes[i].style.display = 'block';
      }
      else {
        ttmlNodes[i].style.display = 'none';
      }
    }
  };
  media.addEventListener('timeupdate', timeUpdate, false);

  var rangeChange = function () {
    media.currentTime = (parseInt(rangeControl.value) / 100.0)  * media.duration;
  };
  rangeControl.addEventListener('change', rangeChange, false);
};
document.addEventListener("DOMContentLoaded", function () {
  var vids = document.getElementsByTagName('video');
  for (var i = 0; i < vids.length; i++)
    yelp_init_media(vids[i]);
}, false);
</script><script type="text/javascript" language="javascript">
$(document).ready(function () {
  $('input.facet').change(function () {
    var control = $(this);
    var content = control.closest('div.body,div.sect');
    content.find('a.facet').each(function () {
      var link = $(this);
      var facets = link.parents('div.body,div.sect').children('div.contents').children('div.facets').children('div.facet');
      var visible = true;
      for (var i = 0; i < facets.length; i++) {
        var facet = facets.slice(i, i + 1);
        var facetvis = false;
        var inputs = facet.find('input.facet:checked');
        for (var j = 0; j < inputs.length; j++) {
          var input = inputs.slice(j, j + 1);
          var inputvis = false;
          var key = input.attr('data-facet-key');
          var values = input.attr('data-facet-values').split(' ');
          for (var k = 0; k < values.length; k++) {
            if (link.is('a[data-facet-' + key + ' ~= "' + values[k] + '"]')) {
              inputvis = true;
              break;
            }
          }
          if (inputvis) {
            facetvis = true;
            break;
          }
        }
        if (!facetvis) {
          visible = false;
          break;
        }
      }
      if (!visible)
        link.hide('fast');
      else
        link.show('fast');
    });
  });
});
</script></script><script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#username=shaunm"></script><script type="text/javascript">
var addthis_config = {
  data_track_clickback: true,
  ui_508_compliant: true
}
var addthis_share = {
  description: "Control where and how automatic links are displayed."
}
</script>
</head>
<body>
<div class="header">
<a href="http://projectmallard.org/index.html"><img class="header-icon" src="http://projectmallard.org/mallard-header.png"></a><div style="clear:both"><div class="linktrails"><div class="linktrail">
<a class="linktrail" href="http://projectmallard.org/index.html">Mallard</a> » <a class="trail" href="http://projectmallard.org/1.0/index.html">Mallard 1.0 DRAFT</a> » </div></div></div>
</div>
<div class="body">
<div class="hgroup"><h1 class="title">Automatic Links</h1></div>
<div class="contents">
<p class="p">Mallard features an automatic linking system that allows pages and sections to
declare links both to and from other pages and sections. Links are declared with
a <span class=" code"><a href="http://projectmallard.org/1.0/mal_info_link.html" title="">link</a></span> element inside an
<span class=" code"><a href="http://projectmallard.org/1.0/mal_info.html" title="">info</a></span> element. These links are then collected
and displayed on pages. The <span class=" code">links</span> element allows you to control
how automatic links are displayed.</p>
<p class="p">Some types of <span class=" code">links</span> elements are implicitly added if they
are absent. See the descriptions of the different types of links for
details on implicit links.</p>
<p class="p">A <span class=" code">links</span> element belongs only to the page or section that is
its direct parent.</p>
</div>
<div class="sect" id="notes">
<div class="hgroup"><h2 class="title">Notes</h2></div>
<div class="contents"><div class="list"><ul class="list">
<li class="list"><p class="p">The <span class=" code">links</span> element can contain an optional
    <span class=" code"><a href="http://projectmallard.org/1.0/mal_block_title.html" title="">title</a></span> element.</p></li>
<li class="list"><p class="p">The <span class=" code">links</span> element can occur in
    <span class=" code"><a href="http://projectmallard.org/1.0/mal_page.html" title="">page</a></span> and <span class=" code"><a href="http://projectmallard.org/1.0/mal_section.html" title="">section</a></span>
    elements, either where <span class=" link"><a href="http://projectmallard.org/1.0/mal_block.html" title="">block content</a></span>
    occurs, or following any subsections.</p></li>
<li class="list">
<p class="p">The <span class=" code">type</span> attribute specifies the type of links to be
      inserted. Links types may be added by extensions. This specification
      requires the following types:</p>
<div class="table"><table class="table">
<tr>
<td><p class="p"><span class=" code">"topic"</span></p></td>
<td><p class="p">see <span class=" link"><a href="#topic" title="">Topic Links</a></span></p></td>
</tr>
<tr>
<td><p class="p"><span class=" code">"guide"</span></p></td>
<td><p class="p">see <span class=" link"><a href="#guide" title="">Guide Links</a></span></p></td>
</tr>
<tr>
<td><p class="p"><span class=" code">"seealso"</span></p></td>
<td><p class="p">see <span class=" link"><a href="#seealso" title="">See-Also Links</a></span></p></td>
</tr>
<tr>
<td><p class="p"><span class=" code">"prevnext"</span></p></td>
<td><p class="p">see <span class=" link"><a href="#prevnext" title="">Previous and Next Links</a></span></p></td>
</tr>
<tr>
<td><p class="p"><span class=" code">"series"</span></p></td>
<td><p class="p">see <span class=" link"><a href="#series" title="">Series Links</a></span></p></td>
</tr>
<tr>
<td><p class="p"><span class=" code">"section"</span></p></td>
<td><p class="p">see <span class=" link"><a href="#section" title="">Section Links</a></span></p></td>
</tr>
</table></div>
</li>
<li class="list"><p class="p">The <span class=" code">style</span> attribute takes a space-separated list of
    style hints.  Processing tools should adjust their behavior according to
    those style hints they understand.</p></li>
<li class="list"><p class="p">The <span class=" code">groups</span> attribute takes a space-separated list
    of link groups. Links groups are used by <span class=" link"><a href="#topic" title="">topic
    links</a></span>.</p></li>
<li class="list"><p class="p">The <span class=" code">links</span> element can have attributes from external
    namespaces.  See <span class=" link"><a href="http://projectmallard.org/1.0/mal_external.html" title="">External Namespaces</a></span> for more information
    on external-namespace attributes.</p></li>
</ul></div></div>
</div>
<div class="sect" id="examples">
<div class="hgroup"><h2 class="title">Examples</h2></div>
<div class="contents">
<p class="p">Insert all topic links for a page or section:</p>
<div class="example"><div class="code"><pre class="contents ">&lt;links type="topic"/&gt;</pre></div></div>
<p class="p">Separate topic links by group, giving a title to each group:</p>
<div class="example"><div class="code"><pre class="contents ">&lt;links type="topic" groups="#first"&gt;
  &lt;title&gt;First Things First&lt;/title&gt;
&lt;/links&gt;
&lt;links type="topic" groups="#default"&gt;
  &lt;title&gt;Topics&lt;/title&gt;
&lt;/links&gt;
&lt;links type="topic" groups="#last"&gt;
  &lt;title&gt;In Other News&lt;/title&gt;
&lt;/links&gt;</pre></div></div>
<p class="p">Provide quick links to the sections in a page:</p>
<div class="example"><div class="code"><pre class="contents ">&lt;page id="index"&gt;
  &lt;links type="section"/&gt;
  &lt;section id="first"&gt;
    &lt;title&gt;First&lt;/title&gt;
  &lt;/section&gt;
  &lt;section id="second"&gt;
    &lt;title&gt;Second&lt;/title&gt;
  &lt;/section&gt;
  &lt;section id="third"&gt;
    &lt;title&gt;Third&lt;/title&gt;
  &lt;/section&gt;
&lt;/page&gt;</pre></div></div>
</div>
</div>
<div class="sect" id="topic">
<div class="hgroup"><h2 class="title">Topic Links</h2></div>
<div class="contents">
<p class="p">A <span class=" code">links</span> element with type <span class=" code">"topic"</span> inserts topic links
  from a guide page or section. A guide has a topic link to another node if either
  of the following conditions is true:</p>
<div class="list"><ul class="list">
<li class="list"><p class="p">The guide has an informational link with type <span class=" code">"topic"</span>
    whose <span class=" code">xref</span> attribute points to the target node.</p></li>
<li class="list"><p class="p">The target node has an informational link with type
    <span class=" code">"guide"</span> whose <span class=" code">xref</span> attribute points
    to the guide.</p></li>
</ul></div>
<p class="p">Topic links are the inverse of guide links.</p>
<p class="p">There may be more than one topic <span class=" code">links</span> element in a single guide,
  each one displaying links from a different list of groups. The groups for a
  <span class=" code">links</span> element are taken from the <span class=" code">groups</span> attribute,
  which is treated as a space-separated list. The groups are then augmented as
  follows:</p>
<div class="list"><ul class="list">
<li class="list"><p class="p">If no topic <span class=" code">links</span> elements contain the group
    <span class=" code">#first</span>, it is prepended to the list of groups of the first
    topic <span class=" code">links</span> element in the guide.</p></li>
<li class="list"><p class="p">If no topic <span class=" code">links</span> elements contain the group
    <span class=" code">#default</span>, it is appended to the list of groups of the last
    topic <span class=" code">links</span> element in the guide.</p></li>
<li class="list"><p class="p">If no topic <span class=" code">links</span> elements contain the group
    <span class=" code">#last</span>, it is appended to the list of groups of the last
    topic <span class=" code">links</span> element in the guide.</p></li>
<li class="list"><p class="p">If both <span class=" code">#default</span> and <span class=" code">#last</span> are added
    implicitly, <span class=" code">#last</span> comes after <span class=" code">#default</span>.</p></li>
</ul></div>
<p class="p">Each topic link for the guide has an associated group, taken from the
  <span class=" code">group</span> attribute of the <span class=" code">link</span> element that declared
  the link. If the <span class=" code">link</span> element does not declare a group, or if its
  group is not in the list of all groups for the guide, its group is
  <span class=" code">#default</span>.</p>
<p class="p">A topic <span class=" code">links</span> element shows only those links with a group that
  matches one of the values in its groups list. Links are sorted first by the
  position of their group in the groups list for the <span class=" code">links</span> element.
  They are then sorted by their <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#sort" title="">sort titles</a></span>.</p>
<p class="p">The link text for a topic link is taken from the title of the target node,
  as follows:</p>
<div class="list"><ol class="list" style="list-style-type:numbered">
<li class="list"><p class="p">If the target node has a <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#link" title="">link
    title</a></span> with the <span class=" code">role</span> attribute set to <span class=" code">"topic"</span>,
    that title is used.</p></li>
<li class="list"><p class="p">Otherwise, if the target node has a <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#link" title="">link
    title</a></span> without a <span class=" code">role</span> attribute, that title is used.</p></li>
<li class="list"><p class="p">Otherwise, the primary title of the target node is used.</p></li>
</ol></div>
<p class="p">Topic links are valid for guide pages and sections in guide pages. If a
  guide page or section has topic links, but does not have a topic <span class=" code">links</span>
  element, the topic links are inserted implicitly as if there were a topic
  <span class=" code">links</span> element after all child block content, but before any
  subsections. The implicit <span class=" code">links</span> element has the default
  groups list <span class=" code">"#first #default #last"</span>.</p>
<div class="note"><div class="inner"><div class="contents"><p class="p">Previous draft revisions of this specification did not contain the
    <span class=" code">links</span> element, and placed the <span class=" code">groups</span> attribute
    on the <span class=" code">page</span> or <span class=" code">section</span> element. When implicitly
    adding topic links, processing tools may recognize the <span class=" code">groups</span>
    attribute on those elements to support older documents.</p></div></div></div>
</div>
</div>
<div class="sect" id="guide">
<div class="hgroup"><h2 class="title">Guide Links</h2></div>
<div class="contents">
<p class="p">A <span class=" code">links</span> element with type <span class=" code">"guide"</span> inserts guide links
  to guide pages or sections. A node has a guide link to a guide if either of the
  following conditions is true:</p>
<div class="list"><ul class="list">
<li class="list"><p class="p">The node has an informational link with type <span class=" code">"guide"</span>
    whose <span class=" code">xref</span> attribute points to the target guide.</p></li>
<li class="list"><p class="p">The target guide has an informataional link with type
    <span class=" code">"topic"</span> whose <span class=" code">xref</span> attribute points to
    the node.</p></li>
</ul></div>
<p class="p">Guide links are the inverse of topic links.</p>
<p class="p">A guide <span class=" code">links</span> element shows all guide links for the enclosing
  page or section. Links are sorted by the <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#sort" title="">sort
  title</a></span> of their target guides.</p>
<p class="p">The link text for a guide link is taken from the title of the target node,
  as follows:</p>
<div class="list"><ol class="list" style="list-style-type:numbered">
<li class="list"><p class="p">If the target node has a <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#link" title="">link
    title</a></span> with the <span class=" code">role</span> attribute set to <span class=" code">"guide"</span>,
    that title is used.</p></li>
<li class="list"><p class="p">Otherwise, if the target node has a <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#link" title="">link
    title</a></span> without a <span class=" code">role</span> attribute, that title is used.</p></li>
<li class="list"><p class="p">Otherwise, the primary title of the target node is used.</p></li>
</ol></div>
<p class="p">Guide links are valid on all pages and sections. If a node has guide links, but
  does not have a guide <span class=" code">links</span> element, the guide links are inserted
  implicitly as if there were a guide <span class=" code">links</span> element at then end of the
  node, after any block content and subsections.</p>
</div>
</div>
<div class="sect" id="seealso">
<div class="hgroup"><h2 class="title">See-Also Links</h2></div>
<div class="contents">
<p class="p">See-also links are links from nodes to any other nodes. A node has a see-also
  link to another node if either of the following two conditions is true:</p>
<div class="list"><ul class="list">
<li class="list"><p class="p">The node has an informational link with type <span class=" code">"seealso"</span>
    whose <span class=" code">xref</span> attribute points to the target node.</p></li>
<li class="list"><p class="p">The target node has an informational link with type <span class=" code">"seealso"</span>
    whose <span class=" code">xref</span> attribute points to the source node.</p></li>
</ul></div>
<p class="p">See-also links always reciprocate; that is, if <span class=" var">A</span> has a see-also link
  to <span class=" var">B</span>, <span class=" var">B</span> always has a see-also link back to <span class=" var">A</span>.</p>
<p class="p">A <span class=" code">links</span> element with type <span class=" code">"seealso"</span> inserts the
  see-also links for the containing node. Links are sorted by the <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#sort" title="">sort title</a></span> of their target nodes.</p>
<p class="p">The link text for a see-also link is taken from the title of the target node,
  as follows:</p>
<div class="list"><ol class="list" style="list-style-type:numbered">
<li class="list"><p class="p">If the target node has a <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#link" title="">link
    title</a></span> with the <span class=" code">role</span> attribute set to <span class=" code">"seealso"</span>,
    that title is used.</p></li>
<li class="list"><p class="p">Otherwise, if the target node has a <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#link" title="">link
    title</a></span> without a <span class=" code">role</span> attribute, that title is used.</p></li>
<li class="list"><p class="p">Otherwise, the primary title of the target node is used.</p></li>
</ol></div>
<p class="p">See-also links are valid on all pages and sections. If a node has see-also
  links, but does not have a see-also <span class=" code">links</span> element, the see-also
  links are inserted implicitly as if there were a see-also <span class=" code">links</span>
  element at then end of the node, after any block content and subsections.</p>
</div>
</div>
<div class="sect" id="prevnext">
<div class="hgroup"><h2 class="title">Previous and Next Links</h2></div>
<div class="contents">
<p class="p">Previous and next links are links between pages that allow you to create
  simple linear series of pages within a Mallard document. Previous and next
  links are only expected to be supported on pages.</p>
<p class="p">A page has a next link to another page if it has an informational link
  with type <span class=" code">"next"</span> whose <span class=" code">xref</span> attribute points to
  that target page. Previous links are not declared explicitly. Instead, a
  page implicitly has a a previous link to a target page if the target page
  has a next link to it. If more than one page declares a next link to the
  same target, the behavior is undefined.</p>
<p class="p">A <span class=" code">links</span> element with type <span class=" code">"prevnext"</span> inserts
  previous and next links for the containing page. Link text may be standard
  strings like “Previous” and “Next”. When link text is taken from the title
  of the target page, it is taken as follows:</p>
<div class="list"><ol class="list" style="list-style-type:numbered">
<li class="list"><p class="p">If the target node has a <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#link" title="">link
    title</a></span> without a <span class=" code">role</span> attribute, that title is used.</p></li>
<li class="list"><p class="p">Otherwise, the primary title of the target node is used.</p></li>
</ol></div>
<p class="p">No link title roles are currently recommended for previous and next links.</p>
<p class="p">Previous and next links are valid for all pages. If a page has previous
  or next links, but does not have a <span class=" code">links</span> element with type
  <span class=" code">"prevnext"</span>, the previous and next links are inserted implicitly.
  Previous and next links may be displayed in a navigation bar in a header or
  footer. Some implementations may have other presentations.</p>
</div>
</div>
<div class="sect" id="series">
<div class="hgroup"><h2 class="title">Series Links</h2></div>
<div class="contents">
<p class="p">A <span class=" code">links</span> element with type <span class=" code">"series"</span> inserts links
  to all pages within a linear series created by next links. The sequence of links
  is such that each target page has a next link to the next target. The current
  page is shown at its place in the series without being linked to, to give users
  context. Implementations should be careful to detect cycles in next links.</p>
<p class="p">The link text for a series link is taken from the title of the target node,
  as follows:</p>
<div class="list"><ol class="list" style="list-style-type:numbered">
<li class="list"><p class="p">If the target node has a <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#link" title="">link
    title</a></span> with the <span class=" code">role</span> attribute set to <span class=" code">"series"</span>,
    that title is used.</p></li>
<li class="list"><p class="p">Otherwise, if the target node has a <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#link" title="">link
    title</a></span> without a <span class=" code">role</span> attribute, that title is used.</p></li>
<li class="list"><p class="p">Otherwise, the primary title of the target node is used.</p></li>
</ol></div>
<p class="p">Since next links are only valid on pages, series links are also only valid
  on pages. If a page does not contain a series <span class=" code">links</span> element, the
  series links are not displayed. Series links are not implicit.</p>
</div>
</div>
<div class="sect" id="section">
<div class="hgroup"><h2 class="title">Section Links</h2></div>
<div class="contents">
<p class="p">A <span class=" code">links</span> element with type <span class=" code">"section"</span> inserts links
  to the child sections of the containing node. By default, only the direct child
  sections should be shown, but tools may use a style hint to create a tree of
  links to nested sections.</p>
<p class="p">The link text for a section link is taken from the title of the target
  section, as follows:</p>
<div class="list"><ol class="list" style="list-style-type:numbered">
<li class="list"><p class="p">If the section has a <span class=" link"><a href="http://projectmallard.org/1.0/mal_info_title.html#link" title="">link title</a></span>
    without a <span class=" code">role</span> attribute, that title is used.</p></li>
<li class="list"><p class="p">Otherwise, the primary title of the section is used.</p></li>
</ol></div>
<p class="p">No link title roles are currently recommended for section links.</p>
<p class="p">Section links are valid for any page or section that contains child
  sections. If a page or section does not contain a section <span class=" code">links</span>
  element, the section links are not displayed. Section links are not
  implicit.</p>
</div>
</div>
<div class="sect" id="processing">
<div class="hgroup"><h2 class="title">Processing Expectations</h2></div>
<div class="contents">
<p class="p">A <span class=" code">links</span> element is displayed as a block, usually with each
  link as a block or list item. Some types of links may be formatted differently,
  and formatting may depend on style hints. Links should be clearly formatted
  to separate them from surrounding content and other types of links.</p>
<p class="p">When present, the <span class=" code">title</span> element should be displayed in a way
  that makes it clear that it is the title of the <span class=" code">links</span> element.
  If a <span class=" code">title</span> element is not present, a title may be automatically
  generated for certain types of links.</p>
<p class="p">If there are no links to display for a <span class=" code">links</span> element, then
  the element as a whole is not displayed, including its title.</p>
<p class="p">If links for a node are displayed after child sections of that node, they
  should be separated using a header or other formatting to make it clear that
  they do not belong to the child section.</p>
</div>
</div>
<div class="sect" id="schema">
<div class="hgroup"><h2 class="title">Schema</h2></div>
<div class="contents">
<p class="p">The formal definition of the Mallard language is maintained in
<span class=" link"><a href="http://www.relaxng.org/" title="http://www.relaxng.org/">RELAX NG</a></span>
<span class=" link"><a href="http://www.relaxng.org/compact-20021121.html" title="http://www.relaxng.org/compact-20021121.html">Compact Syntax</a></span>
in code blocks within this specification.  This is the formal definition
for the <span class=" code">links</span> element.  The namespace declarations for this
definition are on the page <span class=" link"><a href="http://projectmallard.org/1.0/mal_page.html" title="">Pages</a></span>.</p>
<div class="synopsis"><div class="inner"><div class="contents"><div class="code"><pre class="contents ">mal_links = element links {
  attribute type { xsd:NMTOKEN },
  attribute style { xsd:NMTOKENS } ?,
  attribute groups { xsd:NMTOKENS } ?,
  <span class=" link"><a href="http://projectmallard.org/1.0/mal_external.html" title="">mal_attr_external</a></span> *,

  <span class=" link"><a href="http://projectmallard.org/1.0/mal_block_title.html" title="">mal_block_title</a></span> ?
}</pre></div></div></div></div>
</div>
</div>
<div class="sect sect-links">
<div class="hgroup"><h2>Further Reading</h2></div>
<div class="contents"><div class="links guidelinks">
<div class="title"><h3><span class="title">More About</span></h3></div>
<ul><li class="links"><a href="http://projectmallard.org/1.0/index.html">Mallard 1.0 DRAFT</a></li></ul>
</div></div>
</div>
</div>
<div class="footer">
<div class="addthis_toolbox addthis_default_style addthis_right">
<a class="addthis_button_delicious"></a><a class="addthis_button_digg"></a><a class="addthis_button_identica"></a><a class="addthis_button_reddit"></a><a class="addthis_button_stumbleupon"></a><a class="addthis_button_more"></a>
</div>
<div class="addthis_toolbox addthis_default_style addthis_left"><a class="addthis_button_w3validator"></a></div>
<div class="footer-badge">
<div>Powered by</div>
<a href="http://projectmallard.org/index.html"><img alt="Mallard" width="80" height="15" src="http://projectmallard.org/mallard-badge.png"></a>
</div>
</div>
</body>
</html>