Home
Servlet
JDBC
EJB
XML
JSP
RMI
JavaIDL
Protocols
UML
Books
Contact
|
Introduction
Extensible Markup Language (XML) like HTML uses tags. In HTML, where the tag tells the browser how to represent the data, but in XML the tags are just delimiters and XML tags are well formed. By this way XML represents only content. This leverage the use of data present in the XML, developer now can use this data to interpret and present the data completely specific to the application requirement. XML documents are used to exchange data between dissimilar environment. XML is platform independent and well supported. To learn more about XML click here. As I said earlier, XML is the best choice to exchange data between dissimilar environment it is important to know how to transform XML. These transformation may involve translating to other formats (HTML, WML, comma delimited text file...) or translating the XML vocabularies. Here we can see various transforming techniques.
XSL Transformations (XSLT) is a part of Extensible Stylesheet Language (XSL). XSL in addition to XSLT includes vocabulary for specifying formatting. XSLT is written in XML. XSLT processor transforms the XML document based on the XSL stylesheet into requested format. This is achieved by building the document tree and manipulating the tree structure to get the desired format. By this way the elements in the original XML document can be interchanged or translated. The example below uses the Xalan-J(XSLT Processor). You can get information about Xalan-J from here.
Example
Scenario:
A search request generates the following XML,
<?xml version="1.0" ?>
<linkmanager>
<linkset name="Search results">
<link ref="search1.com">
<desc>The first one</desc>
</link>
<link ref="search2.com">
<desc>The second one</desc>
</link>
</linkset>
<linkset name="Related links">
<link ref="relate1.com" status="best">
</link>
<link ref="relate2.com" status="better">
</link>
<link ref="relate3.com" status="good">
</link>
</linkset>
</linkmanager>
If there is no description(desc), use the link reference(ref) as the
description. If there is a status(more related to the search criteria) about the link distinguish them using the font color(red for more related, orange for medium related and green for average related).
Basically the XML document need to translated as follows,
<html>
<head>
<title>Linkmanager Listing</title>
</head>
<body>
<h3>Search results</h3>
<ul>
<li>
<a href="http://search1.com">
The first one</a>
</li>
</ul>
<ul>
<li>
<a href="http://search2.com">
The second one</a>
</li>
</ul>
<h3>Related links</h3>
<ul>
<li>
<a href="http://relate1.com">
<font color="red">relate1.com
</font>
</a>
</li>
</ul>
<ul>
<li>
<a href="http://relate2.com">
<font color="orange">relate2.com
</font>
</a>
</li>
</ul>
<ul>
<li>
<a href="http://relate3.com">
<font color="green">relate3.com
</font>
</a>
</li>
</ul>
</body>
</html>
The following XSL stylesheet does the work.
<?xml version="1.0"?>
1. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL
/Transform" version="1.0">
2. <xsl:output method="html" indent="yes"/>
3. <xsl:strip-space elements="*"/>
<!--======================================-->
<!-- Root Element Template -->
<!-- This template specifies what creates -->
<!-- the root element of the result tree. -->
<!-- In this case, it tells the XSL -->
<!-- processor to start with the -->
<!-- <linkmanager> element. -->
<!--======================================-->
4. <xsl:template match="/">
5. <xsl:apply-templates select="linkmanager"/>
</xsl:template>
<!--==================================================-->
<!-- <linkmanager> template -->
<!-- This template creates the <html> structure. -->
<!-- Other templates fill in the rest of the document.-->
<!--==================================================-->
6. <xsl:template match="linkmanager">
<html>
<head>
<title>
7. <xsl:text>Linkmanager Listing</xsl:text>
</title>
</head>
<body>
8. <xsl:apply-templates select="linkset"/>
</body>
</html>
</xsl:template>
<!--===============================================-->
<!-- <linkset> template -->
<!-- This template processes <linkset> tags. -->
<!--===============================================-->
9. <xsl:template match="linkset">
<h3>
10. <xsl:value-of select="./@name" />
</h3>
11. <xsl:apply-templates select="link"/>
</xsl:template>
<!--======================================-->
<!-- <link> template -->
<!-- This template generates output for a -->
<!-- <link> element. -->
<!--======================================-->
12. <xsl:template match="link">
<ul>
<li>
13. <xsl:element name="a">
14. <xsl:attribute name="href">
15. <xsl:text>http://</xsl:text>
16. <xsl:value-of select="./@ref"/>
</xsl:attribute>
17. <xsl:choose>
18. <xsl:when test='./@status'>
19. <xsl:element name="font">
20. <xsl:attribute name="color">
20. <xsl:choose>
21. <xsl:when test="./@status = 'best'">
22. <xsl:text>red</xsl:text>
</xsl:when>
23. <xsl:when test="./@status = 'better'">
24. <xsl:text>orange</xsl:text>
</xsl:when>
25. <xsl:when test="./@status = 'good'">
26. <xsl:text>green</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:attribute>
27. <xsl:choose>
28. <xsl:when test="not(desc)">
29. <xsl:value-of select="./@ref"/>
</xsl:when>
30. <xsl:otherwise>
31. <xsl:value-of select="./desc"/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:when>
32. <xsl:otherwise>
33. <xsl:value-of select="./desc"/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</li>
</ul>
</xsl:template>
</xsl:stylesheet>
Click here, to view the generated HTML page
This transformation can be done at command level or write a servelt to generate dynamically.
I will write on this ASAP.
more to come.....
|
Click on the image to order the book from Amazon.com
Proffesional XML - Mark Birbeck et. al.
Search books!
|