XPointers provide a number of convenient extensions to
XPath. One of the simplest is the shorthand
pointer . A shorthand pointer is similar to an HTML named
anchor; that is, a shorthand pointer identifies the element it's
pointing to by that element's ID. The ID is supplied by an ID type attribute of the
element being pointed at rather than by a special a
element with a name
attribute. To link to an element with a
shorthand pointer, append the usual fragment separator
# to the URL followed by the ID of the element to
which you're linking. For example,
http://www.w3.org/TR/1999/REC-xpath-19991116.xml#NT-AbsoluteLocationPath
links to the element in the XPath 1.0 specification that has an ID
type attribute with the value
NT-AbsoluteLocationPath.
The ID attribute is an attribute declared to have an ID type in
the document's DTD. It does not have to be named ID
or id
.
Shorthand pointers cannot be used to link to elements in documents
that don't have DTDs because such a document cannot have any ID type
attributes.
The inability to use IDs in documents without DTDs is a major
shortcoming of XML. Work is ongoing to attempt to remedy this,
perhaps by defining a generic ID attribute such as xml:id
or by defining a namespace that
identifies ID type attributes.
For example, suppose you wanted to link to the Motivation and
Summary section of the Namespaces in XML
recommendation at http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml.
A quick peek at the source code of this document reveals that it has
an id
attribute with the value
sec-intro
and that indeed this
attribute is declared to have an ID type in the associated DTD. Its
start-tag looks like this:
<div1 id='sec-intro'>
Thus,
http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml#sec-intro
is a URL that points to this section. The name does not need to be
(and indeed should not be) enclosed in xpointer( )
to make this work. Just the ID
value is sufficient. This is basically just a convenient shorthand for
an XPointer built around an XPath expression using the id( )
function. The same URL could have been written as
http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml#xpointer(id(sec-intro)).