Tutorial 8

XP
TUTORIAL 8
CREATING ELEMENT GROUPS
New Perspectives on XML, 2nd Edition
Tutorial 8
1
XP
OBJECTIVES
• Work with step patterns to create complex node
sets
• Create moded templates so that different code can
be applied to the same nodes
• Access node sets using ID attributes and keys
• Access secondary source documents
New Perspectives on XML, 2nd Edition
Tutorial 8
2
WORKING WITH LOCATIONXP
PATHS
• Location path:
– Expression that defines a path for the processor to
navigate
• Default navigation direction:
– Descendants only
New Perspectives on XML, 2nd Edition
Tutorial 8
3
XP
STEP PATTERNS
• Allow processor to navigate node tree in different
directions
• Syntax: axis::node-test[predicate]
• Sample: child::property[city=”Cutler”]
New Perspectives on XML, 2nd Edition
Tutorial 8
4
XP
STEP PATTERN AXES
Page 456
New Perspectives on XML, 2nd Edition
Tutorial 8
[age
XP
STEP PATTERN AXES CHARTS
Page 458
New Perspectives on XML, 2nd Edition
Tutorial 8
6
XP
WORKING WITH AXES
Page 458
New Perspectives on XML, 2nd Edition
Tutorial 8
7
ELIMINATING DUPLICATES XP
USING STEP PATTERNS
• Selecting duplicates:
– listings/property[city=preceding::property/city]
• Excluding duplicates:
– listings/property[not(city=preceding::property/city)]
<xsl:apply-templates
select=“listings/property[not(city=preceding::property/city)]”>
<xsl:sort select=“city”/> |
</xsl:apply-templates>
New Perspectives on XML, 2nd Edition
Tutorial 8
8
XP
SELECTING DUPLICATE CITIES
New Perspectives on XML, 2nd Edition
Tutorial 8
9
XP
SELECTING FIRST OCCURANCE
OF EACH CITY
New Perspectives on XML, 2nd Edition
Tutorial 8
10
XP
CREATING MODED TEMPLATES
• Apply different styles to the same node set in the
source document
• Syntax:
<xsl:template match=“node-set” mode=“mode”>
styles
</xsl:template>
• Sample:
<xsl:template match=“property” mode=“cityList”>
<xsl:value-of select = “city” />
</xsl: template
New Perspectives on XML, 2nd Edition
Tutorial 8
11
XP
CALLING A MODED TEMPLATE
• Syntax: <xsl:apply-templates select=“node-set”mode=“mode”>
• Sample:
<xsl:apply-templates
select=“listings/property[not(city=preceding::property/city)]”
mode=“cityList”>
• When the XSLT processor encounters this
element, it applies the template for the property
node set under the cityList mode.
New Perspectives on XML, 2nd Edition
Tutorial 8
12
XP
USING A MODED TEMPLATE
Page 464
New Perspectives on XML, 2nd Edition
Tutorial 8
13
XP
WORKING WITH IDS
• Using predicates to match data:
– Sample: //property[@rln=”r317087”]
– Can be inefficient
– Processor searches document for matching node named
property with specified rln attribute
– Result not stored anywhere
• Using IDs and keys results in more efficient
searches
New Perspectives on XML, 2nd Edition
Tutorial 8
14
XP
WORKING WITH IDS
• ID is declared in DTD:
– Syntax:
<!ATTLIST element attribute ID #REQUIRED> or
<!ATTLIST element attribute ID #IMPLIED>
– Sample: <!ATTLIST property rln ID #REQUIRED>
• Requires the processor to verify that all attributes
declared as IDs have unique values
• All ID values must be unique even if they belong
to different elements
New Perspectives on XML, 2nd Edition
Tutorial 8
15
XP
WORKING WITH IDS
• Processor creates an index of IDs
• Xpath function to search the ID index is :
– Syntax: id(value)
– Sample: id(“r317087”)
New Perspectives on XML, 2nd Edition
Tutorial 8
16
XP
PROBLEMS WITH IDS
• When using non-validating parser, id() function
returns empty result
• IDs can only be attributes
• IDs must be unique across all elements
• ID values must be valid XML names without
spaces or special characters
New Perspectives on XML, 2nd Edition
Tutorial 8
17
XP
WORKING WITH KEYS
• Keys:
– Are declared in the style sheet, not in the DTD of the
source document
– Have names as well as values, allowing the style sheet
author to create multiple distinct keys
– Can be associated with node sets that contain attribute
and element values
– Can have values that are not limited to XML names
New Perspectives on XML, 2nd Edition
Tutorial 8
18
XP
CREATING A KEY
• Syntax:
<xsl:key name=“name”match=“node-set” use=”expression”/>
• Sample:
<xsl:key name=“rlns”match=“//property” use=“@rln”/>
• The rlns key creates an index of all of
the rlns attributes in the source
document.
Attribute of the
property element
New Perspectives on XML, 2nd Edition
Tutorial 8
19
XP
USING KEY() FUNCTION
• Syntax: key(“name”,“value”)
• Sample: key(“rlns”,“r317087”)
which is equivalent to
//property[rln=“r31787”]
• Keys can point to more than one node
– Keys are not required to be unique
New Perspectives on XML, 2nd Edition
Tutorial 8
20
XP
GENERATING IDS
• Create a unique id for a node
• Syntax: generate-id(node-set)
• Generated ids are constrained to be:
– Same for the same node set
– Different for different node sets
• Can be used to test for equality:
– generate-id($nodes1)=generate-id($nodes2)
New Perspectives on XML, 2nd Edition
Tutorial 8
21
ORGANIZING NODES WITH XP
MUENCHIAN GROUPING
• First formulated by Steve Muench of the Oracle
Corporation
• Uses key() and generate-id() to create groups of
nodes
• Worth considering when you need to organize
data from a large source document
New Perspectives on XML, 2nd Edition
Tutorial 8
22
WORKING WITH MULTIPLEXP
SOURCES
• Create a reference to another source document within a
Optional
style sheet:
– Syntax: document(object, base)
– Example: document(“firms.xml”)
• Object is either:
Not supported by some browsers
– URI of another XML source document, or
– Node in the current source document that contains the URI of an
external document that you want to access
– E.g., <xmlDoc>firms.xml</xmlDoc>
• Base:
– Defines base URI for resolving relative references
– (element containing the URI of the source
document
nd
New Perspectives on XML, 2 Edition
Tutorial 8
23
WORKING WITH MULTIPLEXP
SOURCES
New Perspectives on XML, 2nd Edition
Tutorial 8
24
WORKING WITH MULTIPLEXP
SOURCES
• Referencing elements:
– document(“firms.xml”)/firms/city
• Good practice:
– Create a variable for external document
– Keep track of context node
– Store values to be matched between documents in
variables
– Detailed example on pages 486-491
New Perspectives on XML, 2nd Edition
Tutorial 8
25
WORKING WITH MULTIPLEXP
SOURCES
New Perspectives on XML, 2nd Edition
Tutorial 8
26
XP
PLACING DATA INTO A STYLE
SHEET
• Data element = data placed within a style sheet
• Some authors use data elements instead of
external XML data sources because it is easier to
manage a single file rather than several files.
• Data can be placed directly in style sheet
• Easier to manage a single file
• Data should be placed in its own namespace
• Data must be direct child of <xsl:stylesheet>
New Perspectives on XML, 2nd Edition
Tutorial 8
27
XP
PLACING DATA INTO A STYLE
SHEET
• Example:
<xsl:stylesheet version=“1.0”
xmlns:xsl=“http:/www.w3.org/1999/XSL/Transform”
xmlns:data=“http://wwwdata_elements.com>
<data:agents>
<data: agent id=“a2140”>
<data:name>Karen Fawkes</data:name>
<data:phone>(608) 555-3414</data:phone>
<data:e-mail>[email protected]</data:email>
…
</data:agents>
New Perspectives on XML, 2nd Edition
Tutorial 8
28
XP
PLACING DATA INTO A STYLE
SHEET
• To access stylesheet data:
– Syntax: document(‘ ’)
XSLT processors interpret the empty
text string as a relative URL and
access the current style sheet file
– Sample: document(‘ ’)/xsl:stylesheet/data:agents/data:agent
Reference data agent elements
New Perspectives on XML, 2nd Edition
Tutorial 8
29
XP
INSERTING CODE SNIPPETS
• Can be used to contain standard heading or banner
• HTML code placed in XHTML file
• To use:
– <xsl:copy-of select=“document('heading.html')” />
• Code snippets can be easily modified without
having to edit the style sheets directly
New Perspectives on XML, 2nd Edition
Tutorial 8
30
XP
SUMMARY
• Step patterns can be used with location paths to
search the document in different orders
• Moded templates are used to define different
instructions to be used with the same node pattern
• IDs and keys are used to create more efficient
searches
• IDs can be generated using generate-id
New Perspectives on XML, 2nd Edition
Tutorial 8
31
XP
SUMMARY
• Muenchian grouping uses key() and generate-id()
to efficiently group nodes
• Multiple XML documents can be used by a
stylesheet and opened with the document()
function
• Data can be inserted directly into the stylesheet
• Code snippets can be placed in XHTML files and
imported using document()
New Perspectives on XML, 2nd Edition
Tutorial 8
32