Listing 2: Transform for converting standard WSDL to RDF form
<?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:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:x="http://namespaces.ogbuji.net/articles"
>
<xsl:output method='xml' indent='yes'/>
<!-- template 2.1 -->
<xsl:template match='wsdl:definitions'>
<xsl:copy>
<xsl:apply-templates select='@*'/>
<xsl:apply-templates select='*'/>
<rdf:RDF>
<xsl:apply-templates select='*' mode='convert-to-rdf'/>
</rdf:RDF>
</xsl:copy>
</xsl:template>
<!-- template 2.2 -->
<xsl:template match='wsdl:message|wsdl:portType|wsdl:binding|wsdl:service|wsdl:port' mode='convert-to-rdf'>
<xsl:copy>
<xsl:attribute name='rdf:ID' namespace='http://www.w3.org/1999/02/22-rdf-syntax-ns#'><xsl:value-of select='@name'/></xsl:attribute>
<xsl:apply-templates select='@*' mode='convert-to-rdf'/>
<xsl:apply-templates select='*'/>
<xsl:apply-templates select='*' mode='convert-to-rdf'/>
</xsl:copy>
</xsl:template>
<!-- template 2.3 -->
<xsl:template match='wsdl:operation|wsdl:part|soap:*|mime:*|http:*' mode='convert-to-rdf'>
<xsl:copy>
<xsl:apply-templates select='@*' mode='convert-to-rdf'/>
<xsl:apply-templates select='*'/>
<xsl:apply-templates select='*' mode='convert-to-rdf'/>
</xsl:copy>
</xsl:template>
<!-- template 2.4 -->
<xsl:template match='wsdl:input|wsdl:output|wsdl:fault' mode='convert-to-rdf'>
<xsl:copy>
<xsl:attribute name='rdf:resource' namespace='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
<xsl:value-of select="substring-after(@message, ':')"/>
</xsl:attribute>
<xsl:apply-templates select="@*[not(name(.)='message')]" mode='convert-to-rdf'/>
<xsl:apply-templates select='*'/>
<xsl:apply-templates select='*' mode='convert-to-rdf'/>
</xsl:copy>
</xsl:template>
<!-- template 2.4 -->
<xsl:template match='wsdl:message|wsdl:portType|wsdl:binding|wsdl:service|wsdl:operation|wsdl:port|wsdl:part|wsdl:input|wsdl:output|wsdl:fault|soap:*'/>
<!-- Lookup table for WSDL namespaces -->
<xsl:key name='ns-to-prefix' match='x:ns-to-prefix' use='@uri'/>
<x:ns-to-prefix uri='http://schemas.xmlsoap.org/wsdl/' prefix='wsdl'/>
<x:ns-to-prefix uri='http://schemas.xmlsoap.org/wsdl/soap/' prefix='soap'/>
<x:ns-to-prefix uri='http://schemas.xmlsoap.org/wsdl/mime/' prefix='mime'/>
<x:ns-to-prefix uri='http://schemas.xmlsoap.org/wsdl/http/' prefix='http'/>
<xsl:variable name='load-lookup-table' select="document('')"/>
<!-- template 2.5 -->
<xsl:template match='@*' mode='convert-to-rdf'>
<!-- attach the prefix that goes with the element's namespace -->
<xsl:attribute name="{concat(key('ns-to-prefix', namespace-uri(..))/@prefix, ':', name(.))}"
namespace='{namespace-uri(.)}'>
<xsl:value-of select='.'/>
</xsl:attribute>
</xsl:template>
<!-- template 2.6 -->
<xsl:template match='*' mode='convert-to-rdf'/>
<!-- template 2.7 -->
<xsl:template match='*|@*'>
<xsl:copy>
<xsl:apply-templates select='@*|node()'/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
|
