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
© Copyright 2026 Paperzz