Listing 1: Simple transform to extract summary of services
<?xml version="1.0"?>
<xsl:stylesheet
version='1.0'
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:es="http://www.snowboard-info.com/EndorsementSearch.wsdl"
xmlns:esxsd="http://schemas.snowboard-info.com/EndorsementSearch.xsd"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:x="http://namespaces.ogbuji.net/articles"
>
<xsl:output method='html'/>
<!-- template 1.1 -->
<xsl:template match='/'>
<HTML>
<HEAD>
<TITLE>Service summary: <xsl:value-of select='wsdl:definitions/@name'/></TITLE>
<META HTTP-EQUIV="content-type" content="text/html" charset="UTF-8"/>
</HEAD>
<BODY STYLE="background: #ffffff">
<H1>Service summary: <xsl:value-of select='wsdl:definitions/@name'/></H1>
<HR/>
<xsl:apply-templates select="wsdl:definitions/wsdl:service"/>
</BODY>
</HTML>
</xsl:template>
<!-- Lookup table 1.1: messages -->
<xsl:key name='message' match="wsdl:definitions/wsdl:message" use='@name'/>
<!-- Lookup table 1.2: portTypes -->
<xsl:key name='portType' match="wsdl:definitions/wsdl:portType" use='@name'/>
<!-- Lookup table 1.3: bindings -->
<xsl:key name='binding' match="wsdl:definitions/wsdl:binding" use='@name'/>
<!-- Lookup table 1.4: services -->
<xsl:key name='service' match="wsdl:definitions/wsdl:service" use='@name'/>
<!-- Lookup table 1.5: the transport for each binding -->
<xsl:key name='bindtrans'
match="wsdl:definitions/wsdl:binding/*[local-name()='binding']"
use='../@name'/>
<!-- template 1.2 -->
<xsl:template match='wsdl:service'>
<TABLE>
<THEAD>Service: <xsl:value-of select='@name'/></THEAD>
<TBODY>
<TR>
<TD COLSPAN='3' STYLE="background: #ccffff">
<I><xsl:value-of select='wsdl:documentation'/></I>
</TD>
</TR>
<xsl:for-each select='wsdl:port'>
<xsl:variable name='binding-local-name'
select="substring-after(@binding, ':')"/>
<xsl:variable name='binding-uri'
select="namespace-uri(key('bindtrans', $binding-local-name))"/>
<TR>
<TD>Port: </TD>
<TD STYLE="background: #ffccff"><xsl:value-of select="*[local-name()='address']/@location"/></TD>
<TD STYLE="background: #ff66ff">
<xsl:value-of select="key('ns-to-binding', $binding-uri)/@binding"/>
</TD>
</TR>
</xsl:for-each>
</TBODY>
</TABLE>
</xsl:template>
<!-- Lookup table 1.6: WSDL binding types -->
<xsl:key name='ns-to-binding' match='x:ns-to-binding' use='@uri'/>
<x:ns-to-binding uri='http://schemas.xmlsoap.org/wsdl/soap/' binding='SOAP'/>
<x:ns-to-binding uri='http://schemas.xmlsoap.org/wsdl/mime/' binding='MIME'/>
<x:ns-to-binding uri='http://schemas.xmlsoap.org/wsdl/http/' binding='HTTP'/>
<xsl:variable name='load-lookup-table' select="document('')"/>
</xsl:stylesheet>
|