8. General use of get
Prev | Chapter 2. Writing macro-commands | Next

## 8. General use of get

At this point of the tutorial, you'll need to know the XPath standard to understand what follows.

The following macro is used to display in an external image viewer, the image referenced in the `fileref` attribute of explicitly or implicitly selected DocBook elements `graphic` or `imagedata`.

The image viewer used by this macro is an external program called gimp. It is launched using command start.

    <command name="startImageViewer">
      <macro>
        <sequence>
          <get context="$implicitElement/@fileref"
               expression="uri-to-file-name(resolve-uri(.))" />
          <command name="start" parameter='gimp "%_"' />
        </sequence>
      </macro>
    </command>

The above macro shows how to use get at its best:

1. First the `context` attribute, common to all XPath-based constructs get, set, test and match, is evaluated as a node set, using the document as a context node.

2. The `expression` attribute, common to get, set and test, is evaluated as a string using the context node found in previous step.

   If get, set, test or match have no `context` attribute, the context node used to evaluate `expression` is the document node itself (that is, XPath "`/`").

The `context` attribute contains "`$implicitElement/@fileref`" which means attribute `fileref` of explicitly or implicitly selected element, because `implicitElement` is a predefined variable mapped to explicitly or implicitly selected element (more info. about this in next section).

The `expression` attribute contains "`uri-to-file-name(resolve-uri(.))`". "`.`" is the `fileref` attribute node. resolve-uri() and uri-to-file-name() are two non-standard XPath functions which are used to resolve a relative URL and then to convert this URL to a file name (xv will not work if passed an URL).

Prev | Up | Next
7. Simple use of named variables | Home | 9. Variables mapped to the selection in XXE