XPointer, XInclude, and XML Base 73Definitions point A point location identifies a container node along with an index to its child data.. The fol-lowing describes how various XPath-isms
Trang 162 Essential XML Quick Reference
num-Examples
number('xml') NaN
number(price) Returns the numerical value of the string-value of the first
child price element
item[position()=1] Returns the first child item element.price[position()=last() ] Returns the last child price element
round(10 div 3) 3
round(price) Returns the rounded-off value of the first child price element
Trang 2starts-with('$12.05', '$') Returns true.
starts-with(title, 'Essential') Returns true if the first child title
element starts with 'Essential'; false otherwise
starts-with(price, 5) Returns true if the first child price
element starts with the number 5; false otherwise
starts-with('true/false', true()) Returns true
Type Description
node-set The string-value of the node in the node-set that is first in document
order If the node-set is empty, an empty string is returned
boolean true is converted to the string 'true' and false is converted to
'false'.number The number is represented in decimal form preceded with a minus
symbol (-) if the number is negative A decimal point is not included for integer values If the number is NaN, the string 'NaN' is returned If the number is positive or negative zero, the string '0'
is returned If the number is positive infinity, the string 'Infinity'
is returned If the number is negative infinity, the string '-Infinity' is returned
other Is converted to a in a way that is dependent on that type
Trang 364 Essential XML Quick Reference
Examples
3.4.21 string-length
number string-length(string?)
Description
string-length returns the number of characters in the string If the argument
is omitted, it defaults to the string-value of the context node
string-length(customer) Returns the length of the string-value of the first
child customer element
substring('goodbye',4,2) 'db'
substring('goodbye',5) 'bye'
Trang 4concat(substring(lastname,
1,6),'.gif')
Returns a file name, which is the concatenation
of the first six letters of the lastname child ment with '.gif' (for example, 'skonna.gif')
ele-substring-after('dm:invoice', ':') 'invoice'
substring-after('1972-10-30', '-') '10-30'
substring-after(filename, '.') Returns the filename element’s
file extension (for example, .gif)
substring-before('dm:invoice', ':') 'dm'
substring-before('1972-10-30', '-') '1972'
substring-before(filename, '.') Returns the filename element’s
value excluding the extension
Trang 566 Essential XML Quick Reference
charac-Examples
sum example Description
sum(/items/i) Returns 9.0, assuming the following XML document:
<items> <i>1.0</i><i>3.0</i><i>5.0</i>
</items>.sum(/items/i) div
Trang 8Chapter 4
XPointer, XInclude, and XML Base
The XML Pointer Language (XPointer) version 1.0 defines syntax for using ment identifiers with XML resources This makes it possible to extend XPath tosupport interdocument (as opposed to just intradocument) addressing XPointeralso provides a more flexible syntax for addressing portions of an XML documentthat are not addressable in XPath (for example, points and ranges)
frag-XML Inclusions (XInclude) version 1.0 defines the syntax for general-purpose frag-based inclusions XInclude functionality is similar to that provided by external enti-ties or #include in C++ The difference is that XInclude works at the Infosetlevel rather than during preprocessing XInclude leverages URI references as well
XML-as XPointer fragments to identify resources for inclusion
When multiple XML resources are used to build a logical XML document, tions arise when resolving relative URIs XML Base defines this process along with
ques-a syntques-ax for explicitly controlling the bques-ase URI of elements in ques-a document
The rest of this chapter presents the syntax for these three specifications:XPointer, XInclude, and XML Base At the time of writing, these three specifica-tions were still under development at the W3C See Section 4.4 for the version ofeach specification used in this chapter
An XPointer expression is attached to a URI reference as a fragment identifier.The context of an XPointer expression is always initialized to the root node of theidentified XML resource XPointer provides three types of expressions: full XPoint-ers, bare names, and child sequences
Skonnard.book Page 69 Monday, October 1, 2001 8:57 AM
Trang 970 Essential XML Quick Reference
scheme-Scheme name Description
xpointer(xptr-expr) XPointer expression provides access to nodes in an
XML document as well as arbitrary non-node locations (based on XPath)
xmlns(prefix=nsURI) Expression defines a namespace declaration in scope
for the fragment parts to the right In the event that more than one xmlns part to the left of an xpointerpart specifies the same prefix, the rightmost one of these is used for that xpointer part
Figure 4–1 Full XPointer example.
Trang 10XPointer, XInclude, and XML Base 71
Examples
Simple full XPointer expression
Identifies the concept elements in xslt.xml that belong to no namespaceand that have an id attribute equal to 'template'
Full XPointer expression with namespaces
Identifies the concept elements in xslt.xml that belong to the ple:dm2 namespace and that have an id attribute from the urn:ids-r-usnamespace equal to 'template'
urn:exam-Full XPointer expression with multiple XPointer parts
Identifies the concept elements in xslt.xml that have an attribute of type IDequal to 'template' If the DTD/schema isn’t available, the first fragment partfails and the second is evaluated, which simply identifies all elements with an idattribute equal to 'template'
d:concept[@x:id='template'])
xslt.xml#xpointer(id('template'))xpointer(//
*[@id='template'])
xslt.xml#xpointer(id('prod1'))xslt.xml#prod1
Skonnard.book Page 71 Monday, October 1, 2001 8:57 AM
Trang 1172 Essential XML Quick Reference
These expressions are equivalent The first is a full XPointer expression whereasthe second is an XPointer bare name
in the child sequence can be either a bare name (see previous section) or thestring '/1', which identifies the document element
Example
Equivalent expressions
All of these expressions are equivalent The first is a full XPointer expression thatuses XPath The second is the equivalent XPointer child sequence The thirdexpression uses a bare name to identify the seventh child of the second child ofthe document element by ID followed by a relative child sequence
4.1.4 XPointer extensions to XPath
Description
In XPath, location path expressions produce node-sets XPointer, on the otherhand, is capable of identifying portions of a document that cannot be modeledwith XPath node-sets As a result, XPointer generalizes XPath’s notion of nodeand node-set with location and location-set XPointer locations consist ofpoints, ranges, and XPath nodes XPointer location-sets are a collection oflocations
Trang 12XPointer, XInclude, and XML Base 73
Definitions
point
A point location identifies a container node along with an index to its child data If
the node can have children (for example, element nodes), the index refers to a
position within the child node’s collection (called a node-point) If the node cannot
have children (for example, text nodes), the index refers to an offset within the
node’s character data (called a character-point) The following describes how
var-ious XPath-isms are evaluated for a point location:
range
A range location consists of two points: a start point and an end point Everything
within these two points (in document order) is part of the range location The
fol-lowing describes how various XPath-isms are evaluated for a range location:
Concept Description
expanded name None
string-value Empty
axes The child, descendant, attribute, and namespace axes
are empty The self axis contains the point itself whereas the parent axis contains the node-point’s container node The ancestor axis contains the node-point’s container node and its ancestors A node-point’s siblings are the children of the con-tainer node that are before or after the node-point while a char-acter point doesn’t have any siblings
Concept Description
expanded name None
string-value If the points are both character-points and the container nodes
of the points are the same, then the string-value consists of the characters between the two points Otherwise, the string-value consists of the characters that are in text nodes between the two points
axes The axes of a range location are the axes of its start point
Skonnard.book Page 73 Monday, October 1, 2001 8:57 AM
Trang 1374 Essential XML Quick Reference
4.1.5 XPointer node tests
Description
XPointer extends the XPath node type identifiers (to account for point and range
locations) for performing node tests by type
Example
Identifying the points in a range
4.1.6 XPointer function library
Description
XPointer adds several functions to the XPath core function library that must be
supported by XPointer implementations These additional functions support
work-ing with point and range locations in XPointer expressions Like the XPath
func-tions, the XPointer functions don’t belong to a namespace, so their names don’t
need to be qualified with a namespace prefix XPointer processors may extend
this library by using namespace-qualified function names
4.1.6.1 end-point
location-set end-point(location-set)
Description
For each location in the argument location-set, end-point adds a location of
type point to the resulting location-set The end point of a location is evaluated
according to location type as follows:
Node test (by type) Description
point() Identifies locations of type point
range() Identifies locations of type range
xpointer(range(//intro)/point)())
range The end point of the range
Skonnard.book Page 74 Monday, October 1, 2001 8:57 AM
Trang 14XPointer, XInclude, and XML Base 75
Identifying the element containing the expression
Identifying an ancestor of the containing element
4.1.6.3 origin
location-set origin()
Description
The origin function enables addressing relative to out-of-line links such as defined
in XLink This allows XPointers to be used in applications to express relative tions when links do not reside directly at one of their end points The function
loca-attribute, namespace Error
root, element The container node is the same as the node in
ques-tion The index is the number of child nodes
text, comment,
processing instruction
The container node is the same as the node in question The index is the length of the node’s string-value
Trang 1576 Essential XML Quick Reference
returns a location-set with a single member, which locates the element from which
a user or program initiated traversal of the link
Examples
Identifying the origin element that linked to this document
Identifying the descendants of the origin element
loca-xpointer(origin())
xpointer(origin()/descendant::node())
range Identical to the range
attribute/namespace The container node of the start point and the end point
of the covering range is the attribute or namespace location, the index of the start point of the covering range is zero, and the index of the end point of the cov-ering range is the length of the string-value of the attribute or namespace location
root node The container node of the start point and the end point
of the covering range is the root node, the index of the start point of the covering range is zero, and the index
of the end point of the covering range is the number of children of the root location
point The start and end points of the covering range are the
point itself
other The container node of the start point and the end point
of the covering range is the parent of the location, the index of the start point of the covering range is the num-ber of preceding sibling nodes of the location, and the index of the end point is one greater than the index of the starting point
Trang 16XPointer, XInclude, and XML Base 77
Examples
Identifying the covering range of each intro element
Identifying the covering range of each id attribute
Identifying ranges that span the children of each intro element
Identifying ranges that span the text within the intro elements
Trang 1778 Essential XML Quick Reference
Identifying a set of ranges
Identifies a set of ranges, where each range starts from an intro element to itsfirst child section element
xpointer(//intro/range-to(section[1])
range The start point of the range
attribute, namespace Error
root, element, text,
Trang 18XPointer, XInclude, and XML Base 79
Examples
Identifying the third occurrence of 'Infoset' in intro elements
Identifying a set of string ranges
Identifies a set of string ranges spanning the substring 'fos' within all rences of 'Infoset' in intro elements
XInclude provides an alternative to external general entities that uses normal XMLsyntax and that works at the Infoset level, not the serialized entity level XInclude
is the moral equivalent of the EntityReference node type from the DOM, because
it exists solely as a placeholder for the content that it references An aware processor will silently replace the XInclude reference with the content that
XInclude-it references This is similar to the way entXInclude-ity references are expanded, the ence being that XInclude processing occurs after parsing, not during parsing
differ-As an example, if elements in the included document belong to no namespace,they will still belong to no namespace even if the including document has a defaultnamespace declaration on the root element Again, XInclude defines how tomerge the Infosets of both documents after parsing has taken place
The XInclude namespace only consists of a single element, include, which can
be used in conjunction with any other namespace
Trang 1980 Essential XML Quick Reference
parse='(xml|text)' The attribute is an enumerated value of either xml
(default) or text, indicating how the referenced data
is to be included xml causes the referenced data to
be interpreted as XML (à la parsed entities), and the referenced Infoset is merged at this location textindicates that the referenced data should be included
as a single text node
<! intro.txt >
The XML Pointer Language (XPointer) 1.0 defines
syntax for using fragment identifiers with XML
xptr-refs.xml#xpointer(//desc/text())'/></title> <intro>
<xinc:include href='intro.txt' parse='text'/>
</intro>
<xinc:include href='xptr-refs.xml'/>
</chapter>
Trang 20XPointer, XInclude, and XML Base 81
The logical resulting document could be serialized as follows:
When multiple XML resources are used to build a logical XML document (for ple, via external entities, XInclude, and so on), questions arise about how toresolve relative URIs XML Base defines this process along with a syntax forexplicitly controlling the base URI of elements in a document
exam-By default, relative URIs found in a document are resolved relative to the originalentity’s base URI For example, an entity located at http://www.develop.com/exmlref/xptr.xml will have a base URI of http://www.develop.com/exmlref/ All relative URIs found in that entity will be resolved relative to itsbase URI Because this may not always be desirable, XML Base provides thexml:base attribute for explicitly overriding the base URI of any element in adocument
The XML Pointer Language (XPointer) 1.0 defines
syntax for using fragment identifiers with XML
Trang 2182 Essential XML Quick Reference
a URI reference as defined in IETF RFC 2396 (http://www.ietf.org/rfc/
rfc2396.txt) In namespace-aware XML processors, the xml prefix is matically bound to http://www.w3.org/XML/1998/namespace If thexml:base value is itself a relative URI, it’s also resolved with respect to the cur-rent in-scope base URI (either explicitly set through an ancestor xml:baseattribute or inherited from the owner entity)
auto-Example
Using XML Base to modify an element’s base URI
The three relative URIs used in this document are resolved to
http://www.w3.org/TR/xptr (current version)
XML Inclusions (XInclude) Version 1.0 Working draft 26 October 2000
Available at http://www.w3.org/TR/2000/WD-xinclude-20001026 and
http://www.w3.org/TR/xinclude (current version).