You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ag...@apache.org on 2009/02/05 08:21:18 UTC
svn commit: r741031 [2/3] - in /qpid/trunk/qpid/java/management/client: ./
console/ console/css/ console/definitions/ console/fragments/ console/images/
Added: qpid/trunk/qpid/java/management/client/console/wsdl-viewer.xsl
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/management/client/console/wsdl-viewer.xsl?rev=741031&view=auto
==============================================================================
--- qpid/trunk/qpid/java/management/client/console/wsdl-viewer.xsl (added)
+++ qpid/trunk/qpid/java/management/client/console/wsdl-viewer.xsl Thu Feb 5 07:21:17 2009
@@ -0,0 +1,2523 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+
+<!--
+* ====================================================================
+* wsdl-viewer.xsl
+* Version: 3.1.02
+*
+* URL: http://tomi.vanek.sk/xml/wsdl-viewer.xsl
+*
+* Author: tomi vanek
+* Inspiration: Uche Ogbui - WSDL processing with XSLT
+* http://www-106.ibm.com/developerworks/library/ws-trans/index.html
+* ====================================================================
+-->
+
+
+<!--
+* ====================================================================
+* Description:
+* wsdl-viewer.xsl is a lightweight XSLT 1.0 transformation with minimal
+* usage of any hacks that extend the possibilities of the transformation
+* over the XSLT 1.0 constraints but eventually would harm the engine independance.
+*
+* The transformation has to run even in the browser offered XSLT engines
+* (tested in IE 6 and Firefox) and in ANT "batch" processing.
+* ====================================================================
+* How to add the HTML look to a WSDL:
+* <?xml version="1.0" encoding="utf-8"?>
+* <?xml-stylesheet type="text/xsl" href="wsdl-viewer.xsl"?>
+* <wsdl:definitions ...>
+* ... Here is the service declaration
+* </wsdl:definitions>
+*
+* The web-browsers (in Windows) are not able by default automatically recognize
+* the ".wsdl" file type (suffix). For the type recognition the WSDL file has
+* to be renamed by adding the suffix ".xml" - i.e. "myservice.wsdl.xml".
+* ====================================================================
+* Constraints:
+* 1. Processing of imported files
+* 1.1 Only 1 imported WSDL and 1 imported XSD is processed
+* (well, maybe with a smarter recursive strategy this restriction could be overcome)
+* 1.2 No recursive including is supported (i.e. includes in included XSD are ignored)
+* 2. Namespace support
+* 2.1 Namespaces are not taken in account by processing (references with NS)
+* 3. Source code
+* 3.1 Only the source code allready processed by the XML parser is rendered - implications:
+* == no access to the XML head line (<?xml version="1.0" encoding="utf-8"?>)
+* == "expanded" CDATA blocks (parser processes the CDATA,
+* XSLT does not have access to the original code)
+* == no control over the code page
+* == processing of special characters
+* == namespace nodes are not rendered (just the namespace aliases)
+* ====================================================================
+* Possible improvements:
+* * Functional requirements
+* + SOAP 1.2 binding (http://schemas.xmlsoap.org/wsdl/soap12/WSDL11SOAP12.pdf)
+* + WSDL 2.0 (http://www.w3.org/TR/2006/CR-wsdl20-primer-20060327/)
+* + Recognition of WSDL patterns (interface, binding, service instance, ...)
+* - Creating an xsd-viewer.xsl for XML-Schema file viewing
+* (extracting the functionality from wsdl-viewer into separate XSLT)
+* - Check the full support of the WSDL and XSD going through the standards
+* - Real-world WSDL testing
+* - XSLT 2.0 (http://www-128.ibm.com/developerworks/library/x-xslt20pt5.html) ???
+* ? Adding more derived information
+* * to be defined, what non-trivial information can we read out from the WSDL
+* * XSLT
+* + Modularization
+* - Is it meaningful?
+* - Maybe more distribution alternatives (modular, fat monolithic, thin performance monolithic)?
+* - Distribution build automatization
+* + Dynamic page: JavaSript
+* + Performance
+* - Better code comments / documentation
+* - SOAP client form - for testing the web service (AJAX based)
+* - New XSD parser - clean-up the algorithm
+* - Complete (recursive, multiple) include support
+* ? Namespace-aware version (no string processing hacks ;-)
+* * I think, because of the goal to support as many engines as possible,
+* this requirement is unrealistic. Maybe when XSLT 2.0 will be supported
+* in a huge majority of platforms, we can rethink this point....
+* (problems with different functionality of namespace-uri XPath function by different engines)
+* * Development architecture
+* - Setup of the development infrastructure
+* - Unit testing
+* ? Collaboration platform
+* * Documentation, web
+* - Better user guide
+* ? Forum, Wiki
+* ====================================================================
+-->
+
+
+<!--
+* ====================================================================
+* History:
+* 2005-04-15 - Initial implementation
+* 2005-09-12 - Removed xsl:key to be able to use the James Clark's XT engine on W3C web-site
+* 2006-10-06 - Removed the Oliver Becker's method of conditional selection
+* of a value in a single expression (in Xalan/XSLTC this hack does not work!)
+* 2005-10-07 - Duplicated operations
+* 2006-12-08 - Import element support
+* 2006-12-14 - Displays all fault elements (not just the first one)
+* 2006-12-28 - W3C replaced silently the James Clark's XT engine with Michael Kay's closed-source Saxon!
+* wsdl-viewer.xsl will no longer support XT engine
+* 2007-02-28 - Stack-overflow bug (if the XSD element @name and @type are identic)
+* 2007-03-08 - 3.0.00 - New parsing, new layout
+* 2007-03-28 - 3.0.01 - Fix: New anti-recursion defense (no error message by recursion
+* because of dirty solution of namespace processing)
+* - Added: variables at the top to turn on/off certain details
+* 2007-03-29 - 3.0.02 - Layout clean-up for IE
+* 2007-03-29 - 3.0.03 - Fix: Anti-recursion algorithm
+* 2007-03-30 - 3.0.04 - Added: source code rendering of imported WSDL and XSD
+* 2007-04-15 - 3.0.05 - Fix: Recursive calls in element type rendering
+* - Fix: Rendering of messages (did not render the message types of complex types)
+* - Fix: Links in src. by arrays
+* - Fix: $binding-info
+* 2007-04-15 - 3.0.06 - Added: Extended rendering control ENABLE-xxx parameters
+* - Changed: Anti-recursion algorithm has recursion-depth parameter
+* 2007-07-19 - 3.0.07 - Fix: Rendering of array type in detail
+* 2007-08-01 - 3.0.08 - Fix: xsl:template name="render-type"
+* Fix: typo - "Impotred WSDL" should be "Impotred WSDL"
+* 2007-08-16 - 3.0.09 - Fix: xsl:template name="render-type" - anti recursion
+* 2007-12-05 - 3.1.00 - Modularized
+* 2007-12-23 - 3.1.01 - Terminating message by WS without interface or service definition was removed
+* (seems to be a correct state)
+* 2008-08-20 - 3.1.02 - Woden-214: Anti-recursion bypassed in xsd:choice element
+* ====================================================================
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ws="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:ws2="http://www.w3.org/ns/wsdl"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:local="http://tomi.vanek.sk/xml/wsdl-viewer"
+ version="1.0"
+ exclude-result-prefixes="ws ws2 xsd soap local">
+
+ <xsl:output method="xml" version="1.0" encoding="utf-8" indent="no"
+ omit-xml-declaration="no"
+ media-type="text/html"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
+
+ <xsl:strip-space elements="*"/>
+
+ <xsl:param name="wsdl-viewer.version">3.1.01</xsl:param>
+
+
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-global.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:param name="ENABLE-SERVICE-PARAGRAPH" select="true()"/>
+ <xsl:param name="ENABLE-OPERATIONS-PARAGRAPH" select="true()"/>
+ <xsl:param name="ENABLE-SRC-CODE-PARAGRAPH" select="true()"/>
+ <xsl:param name="ENABLE-ABOUT-PARAGRAPH" select="false()"/>
+ <xsl:param name="ENABLE-OPERATIONS-TYPE" select="true()"/>
+ <xsl:param name="ENABLE-LINK" select="true()"/>
+ <xsl:param name="ENABLE-INOUTFAULT" select="true()"/>
+ <xsl:param name="ENABLE-STYLEOPTYPEPATH" select="true()"/>
+ <xsl:param name="ENABLE-DESCRIPTION" select="true()"/>
+ <xsl:param name="ENABLE-PORTTYPE-NAME" select="true()"/>
+ <xsl:param name="ENABLE-ANTIRECURSION-PROTECTION" select="true()"/>
+ <xsl:param name="ANTIRECURSION-DEPTH">3</xsl:param>
+ <xsl:variable name="GENERATED-BY">Generated by wsdl-viewer.xsl</xsl:variable>
+ <xsl:variable name="PORT-TYPE-TEXT">Port type</xsl:variable>
+ <xsl:variable name="IFACE-TEXT">Interface</xsl:variable>
+ <xsl:variable name="SOURCE-CODE-TEXT">Source code</xsl:variable>
+ <xsl:variable name="RECURSIVE"> ... is recursive</xsl:variable>
+ <xsl:variable name="SRC-PREFIX">src.</xsl:variable>
+ <xsl:variable name="SRC-FILE-PREFIX">src.file.</xsl:variable>
+ <xsl:variable name="OPERATIONS-PREFIX">op.</xsl:variable>
+ <xsl:variable name="PORT-PREFIX">port.</xsl:variable>
+ <xsl:variable name="IFACE-PREFIX">iface.</xsl:variable>
+ <xsl:variable name="global.wsdl-name"
+ select="/*/*[(local-name() = 'import' or local-name() = 'include') and @location][1]/@location"/>
+ <xsl:variable name="consolidated-wsdl" select="/* | document($global.wsdl-name)/*"/>
+ <xsl:variable name="global.xsd-name"
+ select="($consolidated-wsdl/*[local-name() = 'types']//xsd:import[@schemaLocation] | $consolidated-wsdl/*[local-name() = 'types']//xsd:include[@schemaLocation])[1]/@schemaLocation"/>
+ <xsl:variable name="consolidated-xsd"
+ select="(document($global.xsd-name)/xsd:schema/xsd:*|/*/*[local-name() = 'types']/xsd:schema/xsd:*)[local-name() = 'complexType' or local-name() = 'element' or local-name() = 'simpleType']"/>
+ <xsl:variable name="global.service-name"
+ select="concat($consolidated-wsdl/ws:service/@name, $consolidated-wsdl/ws2:service/@name)"/>
+ <xsl:variable name="global.binding-name"
+ select="concat($consolidated-wsdl/ws:binding/@name, $consolidated-wsdl/ws2:binding/@name)"/>
+ <xsl:variable name="html-title">
+ <xsl:apply-templates select="/*" mode="html-title.render"/>
+ </xsl:variable>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-global.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-css.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:variable name="css">
+
+/**
+ wsdl-viewer.css
+*/
+
+/**
+=========================================
+ Body
+=========================================
+
+html {
+ background-color: #FFFFFF;
+}
+
+body {
+ margin: 0;
+ padding: 0;
+ height: auto;
+ color: white;
+ background-color: #FFFFFF;
+ font: normal Tahoma;
+}
+*/
+#outer_box {
+ padding: 3px 3px 3px 194px;
+ width: 400px;
+}
+
+#inner_box {
+
+ background-color: white;
+ color: black;
+ font: normal Tahoma;
+ font-size : x-small;
+}
+
+/**
+=========================================
+ Fixed box with links
+=========================================
+*/
+#outer_links {
+ position: fixed;
+ left: 0px;
+ top: 0px;
+ margin: 3px;
+ padding: 1px;
+ z-index: 200;
+ width: 180px;
+ height: auto;
+ background-color: gainsboro;
+ padding-top: 2px;
+ border: 1px solid navy;
+}
+
+* html #outer_links /* Override above rule for IE */
+{
+ position: absolute;
+ width: 188px;
+ top: expression(offsetParent.scrollTop + 0);
+}
+
+#links {
+ margin: 1px;
+ padding: 3px;
+ background-color: white;
+ height: 350px;
+ overflow: auto;
+ border: 1px solid navy;
+}
+
+#links ul {
+ left: -999em;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ z-index: 100;
+}
+
+#links li {
+ margin: 0;
+ padding: 2px 4px;
+ width: auto;
+ z-index: 100;
+}
+
+#links ul li {
+ margin: 0;
+ padding: 2px 4px;
+ width: auto;
+ z-index: 100;
+}
+
+#links a {
+ display: block;
+ padding: 0 2px;
+ color: blue;
+ width: auto;
+ border: 1px solid white;
+ text-decoration: none;
+ white-space: nowrap;
+}
+
+#links a:hover {
+ color: white;
+ background-color: gray;
+ border: 1px solid gray;
+}
+
+
+/**
+=========================================
+ Navigation tabs
+=========================================
+*/
+
+#outer_nav {
+ background-color: yellow;
+ padding: 0;
+ margin: 0;
+}
+
+#nav {
+ height: 100%;
+ width: auto;
+ margin: 0;
+ padding: 0;
+ background-color: gainsboro;
+ border-top: 1px solid gray;
+ border-bottom: 3px solid gray;
+ z-index: 100;
+ font: bold Tahoma;
+ letter-spacing: 2px;
+}
+
+#nav ul {
+ background-color: gainsboro;
+ height: auto;
+ width: auto;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ z-index: 100;
+
+ border: 1px solid silver;
+ border-top-color: black;
+ border-width: 1px 0 9px;
+}
+
+#nav li {
+ display: inline;
+ padding: 0;
+ margin: 0;
+}
+
+#nav a {
+ position: relative;
+ top: 3px;
+ float:left;
+ width:auto;
+ padding: 8px 10px 6px 10px;
+ margin: 3px 3px 0;
+ border: 1px solid gray;
+ border-width: 2px 2px 3px 2px;
+
+ color: black;
+ background-color: silver;
+ text-decoration:none;
+ text-transform: uppercase;
+}
+
+#nav a:hover {
+ margin-top: 1px;
+ padding-top: 9px;
+ padding-bottom: 7px;
+ color: blue;
+ background-color: gainsboro;
+}
+
+#nav a.current:link,
+#nav a.current:visited,
+#nav a.current:hover {
+ background: white;
+ color: black;
+ text-shadow:none;
+ margin-top: 0;
+ padding-top: 11px;
+ padding-bottom: 9px;
+ border-bottom-width: 0;
+ border-color: #A5CE77;
+}
+
+#nav a:active {
+ background-color: silver;
+ color: white;
+}
+
+
+
+/**
+=========================================
+ Content
+=========================================
+*/
+#header {
+ margin: 0;
+ padding: .5em 4em;
+ color: white;
+ background-color: #369;
+}
+
+#content {
+ margin: 0;
+ padding: 0 2em .5em;
+}
+
+#footer {
+ clear: both;
+ margin: 0;
+ padding: .5em 2em;
+ color: gray;
+ background-color: gainsboro;
+ font-size: 80%;
+ border-top: 1px dotted gray;
+ text-align: right
+}
+
+.single_column {
+ padding: 10px 10px 10px 10px;
+ /*margin: 0px 33% 0px 0px; */
+ margin: 3px 0;
+}
+
+#flexi_column {
+ padding: 10px 10px 10px 10px;
+ /*margin: 0px 33% 0px 0px; */
+ margin: 0px 212px 0px 0px;
+}
+
+#fix_column {
+ float: right;
+ padding: 10px 10px 10px 10px;
+ margin: 0px;
+ width: 205px;
+ /*width: 30%; */
+ voice-family: "\"}\"";
+ voice-family:inherit;
+ /* width: 30%; */
+ width: 205px;
+}
+html>body #rightColumn {
+ width: 205px; /* ie5win fudge ends */
+} /* Opera5.02 shows a 2px gap between. N6.01Win sometimes does.
+ Depends on amount of fill and window size and wind direction. */
+
+/**
+=========================================
+ Label / value
+=========================================
+*/
+
+.page {
+ border-bottom: 3px dotted navy;
+ margin: 0;
+ padding: 10px 0 20px 0;
+}
+
+.value, .label {
+ margin: 0;
+ padding: 0;
+}
+
+.label {
+ float: left;
+ width: 140px;
+ text-align: right;
+ font-weight: bold;
+ padding-bottom: .5em;
+ margin-right: 0;
+ color: darkblue;
+}
+
+.value {
+ margin-left: 147px;
+ color: darkblue;
+ padding-bottom: .5em;
+}
+
+strong, strong a {
+ color: darkblue;
+ font-weight: bold;
+ letter-spacing: 1px;
+ margin-left: 2px;
+}
+
+
+/**
+=========================================
+ Links
+=========================================
+*/
+
+a.local:link,
+a.local:visited {
+ color: blue;
+ margin-left: 10px;
+ border-bottom: 1px dotted blue;
+ text-decoration: none;
+ font-style: italic;
+}
+
+a.local:hover {
+ background-color: gainsboro;
+ color: darkblue;
+ padding-bottom: 1px;
+ border-bottom: 1px solid darkblue;
+}
+
+a.target:link,
+a.target:visited,
+a.target:hover
+{
+ text-decoration: none;
+ background-color: transparent;
+ border-bottom-type: none;
+}
+
+/**
+=========================================
+ Box, Shadow
+=========================================
+*/
+
+.box {
+ padding: 6px;
+ color: black;
+ background-color: gainsboro;
+ border: 1px solid gray;
+}
+
+.shadow {
+ background: silver;
+ position: relative;
+ top: 5px;
+ left: 4px;
+}
+
+.shadow div {
+ position: relative;
+ top: -5px;
+ left: -4px;
+}
+
+/**
+=========================================
+ Floatcontainer
+=========================================
+*/
+
+.spacer
+{
+ display: block;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ margin: 0;
+ padding: 0;
+ border-style: none;
+ clear: both;
+ visibility:hidden;
+}
+
+.floatcontainer:after {
+ content: ".";
+ display: block;
+ height: 0;
+ font-size:0;
+ clear: both;
+ visibility:hidden;
+}
+.floatcontainer{
+ display: inline-table;
+} /* Mark Hadley's fix for IE Mac */ /* Hides from IE Mac \*/ *
+html .floatcontainer {
+ height: 1%;
+}
+.floatcontainer{
+ display:block;
+} /* End Hack
+*/
+
+/**
+=========================================
+ Source code
+=========================================
+*/
+
+.indent {
+ margin: 2px 0 2px 20px;
+}
+
+.xml-element, .xml-proc, .xml-comment {
+ margin: 2px 0;
+ padding: 2px 0 2px 0;
+}
+
+.xml-element {
+ word-spacing: 3px;
+ color: red;
+ font-weight: bold;
+ font-style:normal;
+ border-left: 1px dotted silver;
+}
+
+.xml-element div {
+ margin: 2px 0 2px 40px;
+}
+
+.xml-att {
+ color: blue;
+ font-weight: bold;
+}
+
+.xml-att-val {
+ color: blue;
+ font-weight: normal;
+}
+
+.xml-proc {
+ color: darkred;
+ font-weight: normal;
+ font-style: italic;
+}
+
+.xml-comment {
+ color: green;
+ font-weight: normal;
+ font-style: italic;
+}
+
+.xml-text {
+ color: green;
+ font-weight: normal;
+ font-style: normal;
+}
+
+
+/**
+=========================================
+ Heading
+=========================================
+*/
+h1, h2, h3 {
+ margin: 10px 10px 2px;
+ font-family: Tahoma;
+ font-weight: normal;
+ }
+
+h1 {
+ font-weight: bold;
+ letter-spacing: 3px;
+ font-size: 220%;
+ line-height: 100%;
+}
+
+h2 {
+ font-weight: bold;
+ font-size: 175%;
+ line-height: 200%;
+}
+
+h3 {
+ font-size: 150%;
+ line-height: 150%;
+ font-style: italic;
+}
+
+/**
+=========================================
+ Content formatting
+=========================================
+*/
+.port {
+ margin-bottom: 10px;
+ padding-bottom: 10px;
+ border-bottom: 1px dashed gray;
+}
+
+.operation {
+ margin-bottom: 20px;
+ padding-bottom: 10px;
+ border-bottom: 1px dashed gray;
+}
+
+
+/* --------------------------------------------------------
+ Printing
+*/
+
+/*
+@media print
+{
+ #outer_links, #outer_nav {
+ display: none;
+ }
+*/
+
+ #outer_box {
+ padding: 3px;
+ }
+/* END print media definition
+}
+*/
+
+</xsl:variable>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-css.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-util.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="@*" mode="qname.normalized">
+ <xsl:variable name="local" select="substring-after(., ':')"/>
+ <xsl:choose>
+ <xsl:when test="$local">
+ <xsl:value-of select="$local"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="ws:definitions | ws2:description" mode="html-title.render">
+ <xsl:choose>
+ <xsl:when test="$global.service-name">
+ <xsl:value-of select="concat('Service : ', $global.service-name)"/>
+ </xsl:when>
+ <xsl:when test="$global.binding-name">
+ <xsl:value-of select="concat('WS Binding: ', $global.binding-name)"/>
+ </xsl:when>
+ <xsl:when test="ws2:interface/@name">
+ <xsl:value-of select="concat('WS Interface: ', ws2:interface/@name)"/>
+ </xsl:when>
+ <xsl:otherwise>Web Service Fragment</xsl:otherwise>
+ <!-- <xsl:otherwise><xsl:message terminate="yes">Syntax error in element <xsl:call-template name="src.syntax-error.path"/></xsl:message>
+ </xsl:otherwise>
+-->
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template name="src.syntax-error">
+ <xsl:message terminate="yes">Syntax error by WSDL source rendering in element <xsl:call-template name="src.syntax-error.path"/>
+ </xsl:message>
+ </xsl:template>
+ <xsl:template name="src.syntax-error.path">
+ <xsl:for-each select="parent::*">
+ <xsl:call-template name="src.syntax-error.path"/>
+ </xsl:for-each>
+ <xsl:value-of select="concat('/', name(), '[', position(), ']')"/>
+ </xsl:template>
+ <xsl:template match="*[local-name(.) = 'documentation']" mode="documentation.render">
+ <xsl:if test="$ENABLE-DESCRIPTION and string-length(.) > 0">
+ <div class="label">Description:</div>
+ <div class="value">
+ <xsl:value-of select="." disable-output-escaping="yes"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="render.source-code-link">
+ <xsl:if test="$ENABLE-SRC-CODE-PARAGRAPH and $ENABLE-LINK">
+ <a class="local" href="{concat('#', $SRC-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$SOURCE-CODE-TEXT"/>
+ </a>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="about.detail">
+ <!-- <xsl:param name="version"/>
+ <div>
+ This page has been generated by <big>wsdl-viewer.xsl</big>, version <xsl:value-of select="$version"/>
+ <br/>
+ Author: <a href="http://tomi.vanek.sk/">tomi vanek</a>
+ <br/>
+ Download at <a href="http://tomi.vanek.sk/xml/wsdl-viewer.xsl">http://tomi.vanek.sk/xml/wsdl-viewer.xsl</a>.<br/>
+ <br/>
+ The transformation was inspired by the article<br/>
+ Uche Ogbuji: <a href="http://www-106.ibm.com/developerworks/library/ws-trans/index.html">WSDL processing with XSLT</a>
+ <br/>
+ </div>
+ </xsl:template>
+ <xsl:template name="processor-info.render">
+ <xsl:text>
+</xsl:text>
+ <xsl:text>This document was generated by </xsl:text>
+ <a href="{system-property('xsl:vendor-url')}">
+ <xsl:value-of select="system-property('xsl:vendor')"/>
+ </a>
+ <xsl:text> XSLT engine.
+
+</xsl:text>
+
+ <xsl:text>The engine processed the WSDL in XSLT </xsl:text>
+ <xsl:value-of select="format-number(system-property('xsl:version'), '#.0')"/>
+ <xsl:text> compliant mode.
+</xsl:text>
+ -->
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-util.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-service.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="ws:service|ws2:service" mode="service-start">
+ <div class="indent">
+ <div class="label">Target Namespace:</div>
+ <div class="value">
+ <xsl:value-of select="$consolidated-wsdl/@targetNamespace"/>
+ </div>
+ <xsl:apply-templates select="*[local-name(.) = 'documentation']" mode="documentation.render"/>
+ <xsl:apply-templates select="ws:port|ws2:endpoint" mode="service"/>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws2:endpoint" mode="service">
+ <xsl:variable name="binding-name">
+ <xsl:apply-templates select="@binding" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:variable name="binding" select="$consolidated-wsdl/ws2:binding[@name = $binding-name]"/>
+
+ <xsl:variable name="binding-type" select="$binding/@type"/>
+ <xsl:variable name="binding-protocol" select="$binding/@*[local-name() = 'protocol']"/>
+ <xsl:variable name="protocol">
+ <xsl:choose>
+ <xsl:when test="starts-with($binding-type, 'http://schemas.xmlsoap.org/wsdl/soap')">SOAP 1.1</xsl:when>
+ <xsl:when test="starts-with($binding-type, 'http://www.w3.org/2005/08/wsdl/soap')">SOAP 1.2</xsl:when>
+ <xsl:when test="starts-with($binding-type, 'http://schemas.xmlsoap.org/wsdl/mime')">MIME</xsl:when>
+ <xsl:when test="starts-with($binding-type, 'http://schemas.xmlsoap.org/wsdl/http')">HTTP</xsl:when>
+ <xsl:otherwise>Unknown</xsl:otherwise>
+ </xsl:choose>
+
+ <!-- TODO: Add all bindings to transport protocols -->
+ <xsl:choose>
+ <xsl:when test="starts-with($binding-protocol, 'http://www.w3.org/2003/05/soap/bindings/HTTP')"> over HTTP</xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+ </xsl:variable>
+
+ <div class="label">Location:</div>
+ <div class="value">
+ <xsl:value-of select="@address"/>
+ </div>
+
+ <div class="label">Protocol:</div>
+ <div class="value">
+ <xsl:value-of select="$protocol"/>
+ </div>
+
+ <xsl:apply-templates select="$binding" mode="service"/>
+
+ <xsl:variable name="iface-name">
+ <xsl:apply-templates select="../@interface" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface[@name = $iface-name]" mode="service"/>
+
+ </xsl:template>
+ <xsl:template match="ws2:interface" mode="service">
+ <h3>Interface <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:text> </xsl:text>
+ <span>
+ <xsl:if test="$ENABLE-OPERATIONS-PARAGRAPH">
+ <a class="local" href="#{concat($PORT-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$PORT-TYPE-TEXT"/>
+ </a>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ </span>
+ </xsl:if>
+ </h3>
+
+ <xsl:variable name="base-iface-name">
+ <xsl:apply-templates select="@extends" mode="qname.normalized"/>
+ </xsl:variable>
+
+ <xsl:if test="$base-iface-name">
+ <div class="label">Extends: </div>
+ <div class="value">
+ <xsl:value-of select="$base-iface-name"/>
+ </div>
+ </xsl:if>
+
+ <xsl:variable name="base-iface"
+ select="$consolidated-wsdl/ws2:interface[@name = $base-iface-name]"/>
+
+ <div class="label">Operations:</div>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <ol style="line-height: 180%;">
+ <xsl:apply-templates select="$base-iface/ws2:operation | ws2:operation" mode="service">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws:port" mode="service">
+ <xsl:variable name="binding-name">
+ <xsl:apply-templates select="@binding" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:variable name="binding" select="$consolidated-wsdl/ws:binding[@name = $binding-name]"/>
+
+ <xsl:variable name="binding-uri"
+ select="namespace-uri( $binding/*[local-name() = 'binding'] )"/>
+ <xsl:variable name="protocol">
+ <xsl:choose>
+ <xsl:when test="starts-with($binding-uri, 'http://schemas.xmlsoap.org/wsdl/soap')">SOAP</xsl:when>
+ <xsl:when test="starts-with($binding-uri, 'http://schemas.xmlsoap.org/wsdl/mime')">MIME</xsl:when>
+ <xsl:when test="starts-with($binding-uri, 'http://schemas.xmlsoap.org/wsdl/http')">HTTP</xsl:when>
+ <xsl:otherwise>unknown</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="port-type-name">
+ <xsl:apply-templates select="$binding/@type" mode="qname.normalized"/>
+ </xsl:variable>
+
+ <xsl:variable name="port-type"
+ select="$consolidated-wsdl/ws:portType[@name = $port-type-name]"/>
+
+
+ <h3>Port <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:text> </xsl:text>
+ <!-- <small>-->
+ <xsl:if test="$ENABLE-OPERATIONS-PARAGRAPH">
+ <a class="local" href="#{concat($PORT-PREFIX, generate-id($port-type))}">
+ <xsl:value-of select="$PORT-TYPE-TEXT"/>
+ </a>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ <!-- </small>-->
+ </xsl:if>
+ </h3>
+
+ <div class="label">Location:</div>
+ <div class="value">
+ <xsl:value-of select="*[local-name() = 'address']/@location"/>
+ </div>
+
+ <div class="label">Protocol:</div>
+ <div class="value">
+ <xsl:value-of select="$protocol"/>
+ </div>
+
+ <xsl:apply-templates select="$binding" mode="service"/>
+
+ <div class="label">Operations:</div>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <ol style="line-height: 180%;">
+ <xsl:apply-templates select="$consolidated-wsdl/ws:portType[@name = $port-type-name]/ws:operation"
+ mode="service">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws:operation|ws2:operation" mode="service">
+ <li>
+ <big>
+ <i>
+ <xsl:value-of select="@name"/>
+ </i>
+ </big>
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:if test="$ENABLE-OPERATIONS-PARAGRAPH">
+ <a class="local" href="{concat('#', $OPERATIONS-PREFIX, generate-id(.))}">Detail</a>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ </xsl:if>
+ </li>
+ </xsl:template>
+ <xsl:template match="ws:binding|ws2:binding" mode="service">
+ <xsl:variable name="real-binding" select="*[local-name() = 'binding']|self::ws2:*"/>
+
+ <xsl:if test="$real-binding/@style">
+ <div class="label">Default style:</div>
+ <div class="value">
+ <xsl:value-of select="$real-binding/@style"/>
+ </div>
+ </xsl:if>
+
+
+ <xsl:if test="$real-binding/@transport|$real-binding/*[local-name() = 'protocol']">
+ <xsl:variable name="protocol"
+ select="concat($real-binding/@transport, $real-binding/*[local-name() = 'protocol'])"/>
+ <div class="label">Transport protocol:</div>
+ <div class="value">
+ <xsl:choose>
+ <xsl:when test="$protocol = 'http://schemas.xmlsoap.org/soap/http'">SOAP over HTTP</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$protocol"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="$real-binding/@verb">
+ <div class="label">Default method:</div>
+ <div class="value">
+ <xsl:value-of select="$real-binding/@verb"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-service.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-operations.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="ws2:interface" mode="operations">
+ <xsl:if test="$ENABLE-PORTTYPE-NAME">
+ <h3>
+ <a name="{concat($IFACE-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$IFACE-TEXT"/>
+ <xsl:text>
+</xsl:text>
+ <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ </a>
+ <xsl:call-template name="render.source-code-link"/>
+ </h3>
+ </xsl:if>
+
+ <ol>
+ <xsl:apply-templates select="ws2:operation" mode="operations">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </xsl:template>
+ <xsl:template match="ws2:operation" mode="operations">
+ <xsl:variable name="binding-info"
+ select="$consolidated-wsdl/ws2:binding[@interface = current()/../@name or substring-after(@interface, ':') = current()/../@name]/ws2:operation[@ref = current()/@name or substring-after(@ref, ':') = current()/@name]"/>
+ <li>
+ <xsl:if test="position() != last()">
+ <xsl:attribute name="class">operation</xsl:attribute>
+ </xsl:if>
+ <big>
+ <b>
+ <a name="{concat($OPERATIONS-PREFIX, generate-id(.))}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </b>
+ </big>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <xsl:call-template name="render.source-code-link"/>
+ </div>
+ <xsl:apply-templates select="ws2:documentation" mode="documentation.render"/>
+
+ <xsl:if test="$ENABLE-STYLEOPTYPEPATH">
+ <!-- TODO: add the operation attributes - according the WSDL 2.0 spec. -->
+ </xsl:if>
+ <xsl:apply-templates select="ws2:input|ws2:output|../ws2:fault[@name = ws2:infault/@ref or @name = ws2:outfault/@ref]"
+ mode="operations.message">
+ <xsl:with-param name="binding-data" select="$binding-info"/>
+ </xsl:apply-templates>
+ </li>
+ </xsl:template>
+ <xsl:template match="ws2:input|ws2:output|ws2:fault" mode="operations.message">
+ <xsl:param name="binding-data"/>
+ <xsl:if test="$ENABLE-INOUTFAULT">
+ <div class="label">
+ <xsl:value-of select="concat(translate(substring(local-name(.), 1, 1), 'abcdefghijklmnoprstuvwxyz', 'ABCDEFGHIJKLMNOPRSTUVWXYZ'), substring(local-name(.), 2), ':')"/>
+ </div>
+
+ <div class="value">
+ <xsl:variable name="type-name">
+ <xsl:apply-templates select="@element" mode="qname.normalized"/>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="render.source-code-link"/>
+
+ <xsl:variable name="type-tree"
+ select="$consolidated-xsd[@name = $type-name and not(xsd:simpleType)][1]"/>
+ <xsl:apply-templates select="$type-tree" mode="operations.message.part"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="ws:portType" mode="operations">
+ <div>
+ <xsl:if test="position() != last()">
+ <xsl:attribute name="class">port</xsl:attribute>
+ </xsl:if>
+ <xsl:if test="$ENABLE-PORTTYPE-NAME">
+ <h3>
+ <a name="{concat($PORT-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$PORT-TYPE-TEXT"/>
+ <xsl:text>
+</xsl:text>
+ <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ </a>
+ <xsl:call-template name="render.source-code-link"/>
+ </h3>
+ </xsl:if>
+ <ol>
+ <xsl:apply-templates select="ws:operation" mode="operations">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws:operation" mode="operations">
+ <xsl:variable name="binding-info"
+ select="$consolidated-wsdl/ws:binding[@type = current()/../@name or substring-after(@type, ':') = current()/../@name]/ws:operation[@name = current()/@name]"/>
+ <li>
+ <xsl:if test="position() != last()">
+ <xsl:attribute name="class">operation</xsl:attribute>
+ </xsl:if>
+ <big>
+ <b>
+ <a name="{concat($OPERATIONS-PREFIX, generate-id(.))}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </b>
+ </big>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <xsl:call-template name="render.source-code-link"/>
+ </div>
+
+ <xsl:if test="$ENABLE-DESCRIPTION and string-length(ws:documentation) > 0">
+ <div class="label">Description:</div>
+ <div class="value">
+ <xsl:value-of select="ws:documentation" disable-output-escaping="yes"/>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="$ENABLE-STYLEOPTYPEPATH">
+ <xsl:variable name="binding-operation" select="$binding-info/*[local-name() = 'operation']"/>
+ <xsl:if test="$binding-operation/@style">
+ <div class="label">Style:</div>
+ <div class="value">
+ <xsl:value-of select="$binding-operation/@style"/>
+ </div>
+ </xsl:if>
+
+ <div class="label">Operation type:</div>
+ <div class="value">
+ <xsl:choose>
+ <xsl:when test="$binding-info/ws:input[not(../ws:output)]">
+ <i>One-way.</i> The endpoint receives a message.</xsl:when>
+ <xsl:when test="$binding-info/ws:input[following-sibling::ws:output]">
+ <i>Request-response.</i> The endpoint receives a message, and sends a correlated message.</xsl:when>
+ <xsl:when test="$binding-info/ws:input[preceding-sibling::ws:output]">
+ <i>Solicit-response.</i> The endpoint sends a message, and receives a correlated message.</xsl:when>
+ <xsl:when test="$binding-info/ws:output[not(../ws:input)]">
+ <i>Notification.</i> The endpoint sends a message.</xsl:when>
+ <xsl:otherwise>unknown</xsl:otherwise>
+ </xsl:choose>
+ </div>
+
+ <xsl:if test="string-length($binding-operation/@soapAction) > 0">
+ <div class="label">SOAP action:</div>
+ <div class="value">
+ <xsl:value-of select="$binding-operation/@soapAction"/>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="$binding-operation/@location">
+ <div class="label">HTTP path:</div>
+ <div class="value">
+ <xsl:value-of select="$binding-operation/@location"/>
+ </div>
+ </xsl:if>
+ </xsl:if>
+ <xsl:apply-templates select="ws:input|ws:output|ws:fault" mode="operations.message">
+ <xsl:with-param name="binding-data" select="$binding-info"/>
+ </xsl:apply-templates>
+ </li>
+ </xsl:template>
+ <xsl:template match="ws:input|ws:output|ws:fault" mode="operations.message">
+ <xsl:param name="binding-data"/>
+ <xsl:if test="$ENABLE-INOUTFAULT">
+ <div class="label">
+ <xsl:value-of select="concat(translate(substring(local-name(.), 1, 1), 'abcdefghijklmnoprstuvwxyz', 'ABCDEFGHIJKLMNOPRSTUVWXYZ'), substring(local-name(.), 2), ':')"/>
+ </div>
+
+ <xsl:variable name="msg-local-name" select="substring-after(@message, ':')"/>
+ <xsl:variable name="msg-name">
+ <xsl:choose>
+ <xsl:when test="$msg-local-name">
+ <xsl:value-of select="$msg-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@message"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="msg" select="$consolidated-wsdl/ws:message[@name = $msg-name]"/>
+ <xsl:choose>
+ <xsl:when test="$msg">
+ <xsl:apply-templates select="$msg" mode="operations.message">
+ <xsl:with-param name="binding-data"
+ select="$binding-data/ws:*[local-name(.) = local-name(current())]/*"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <div class="value">
+ <i>none</i>
+ </div>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="ws:message" mode="operations.message">
+ <xsl:param name="binding-data"/>
+ <div class="value">
+ <xsl:value-of select="@name"/>
+ <xsl:if test="$binding-data">
+ <xsl:text> (</xsl:text>
+ <xsl:value-of select="name($binding-data)"/>
+ <xsl:variable name="use" select="$binding-data/@use"/>
+ <xsl:if test="$use">
+ <xsl:text>, use = </xsl:text>
+ <xsl:value-of select="$use"/>
+ </xsl:if>
+ <xsl:variable name="part" select="$binding-data/@part"/>
+ <xsl:if test="$part">
+ <xsl:text>, part = </xsl:text>
+ <xsl:value-of select="$part"/>
+ </xsl:if>
+ <xsl:text>)</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ </div>
+
+ <xsl:apply-templates select="ws:part" mode="operations.message"/>
+ </xsl:template>
+ <xsl:template match="ws:part" mode="operations.message">
+ <div class="value box" style="margin-bottom: 3px">
+ <xsl:choose>
+ <xsl:when test="string-length(@name) > 0">
+ <b>
+ <xsl:value-of select="@name"/>
+ </b>
+
+ <xsl:variable name="elem-or-type">
+ <xsl:choose>
+ <xsl:when test="@type">
+ <xsl:value-of select="@type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@element"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="type-local-name" select="substring-after($elem-or-type, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="$elem-or-type">
+ <xsl:value-of select="$elem-or-type"/>
+ </xsl:when>
+ <xsl:otherwise>unknown</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:variable name="part-type"
+ select="$consolidated-xsd[@name = $type-name and not(xsd:simpleType)][1]"/>
+ <xsl:apply-templates select="$part-type" mode="operations.message.part"/>
+
+ </xsl:when>
+ <xsl:otherwise>
+ <i>none</i>
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-operations.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-xsd-tree.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="xsd:simpleType" mode="operations.message.part"/>
+ <xsl:template name="recursion.should.continue">
+ <xsl:param name="anti.recursion"/>
+ <xsl:param name="recursion.label"/>
+ <xsl:param name="recursion.count">1</xsl:param>
+ <xsl:variable name="has.recursion" select="contains($anti.recursion, $recursion.label)"/>
+ <xsl:variable name="anti.recursion.fragment"
+ select="substring-after($anti.recursion, $recursion.label)"/>
+ <xsl:choose>
+ <xsl:when test="$recursion.count > $ANTIRECURSION-DEPTH"/>
+
+ <xsl:when test="not($ENABLE-ANTIRECURSION-PROTECTION) or string-length($anti.recursion) = 0 or not($has.recursion)">
+ <xsl:text>1</xsl:text>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion.fragment"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ <xsl:with-param name="recursion.count" select="$recursion.count + 1"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="xsd:complexType" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <span style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </span>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:template>
+ <xsl:template match="xsd:complexContent" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:complexType[descendant::xsd:attribute[ not(@*[local-name() = 'arrayType']) ]]"
+ mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <ul type="circle">
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </ul>
+ </xsl:when>
+ <xsl:otherwise>
+ <span style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </span>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="xsd:restriction | xsd:extension" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="type-local-name" select="substring-after(@base, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="@base">
+ <xsl:value-of select="@base"/>
+ </xsl:when>
+ <xsl:otherwise>unknown type</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="base-type" select="$consolidated-xsd[@name = $type-name][1]"/>
+ <!-- xsl:if test="not($type/@abstract)">
+ <xsl:apply-templates select="$type"/>
+ </xsl:if -->
+ <xsl:if test="$base-type != 'Array'">
+ <xsl:apply-templates select="$base-type" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:union" mode="operations.message.part">
+ <xsl:call-template name="process-union">
+ <xsl:with-param name="set" select="@memberTypes"/>
+ </xsl:call-template>
+ </xsl:template>
+ <xsl:template name="process-union">
+ <xsl:param name="set"/>
+ <xsl:if test="$set">
+ <xsl:variable name="item" select="substring-before($set, ' ')"/>
+ <xsl:variable name="the-rest" select="substring-after($set, ' ')"/>
+
+ <xsl:variable name="type-local-name" select="substring-after($item, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$item"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="process-union">
+ <xsl:with-param name="set" select="$the-rest"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="xsd:sequence" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <ul type="square">
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </ul>
+ </xsl:template>
+ <xsl:template match="xsd:all|xsd:any|xsd:choice" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="list-type">
+ <xsl:choose>
+ <xsl:when test="self::xsd:all">disc</xsl:when>
+ <xsl:when test="self::xsd:any">circle</xsl:when>
+ <xsl:otherwise>square</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:element name="ul">
+ <xsl:attribute name="style">
+ <xsl:value-of select="concat('list-style-type:', $list-type)"/>
+ </xsl:attribute>
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:element>
+ </xsl:template>
+ <xsl:template match="xsd:element[parent::xsd:schema]" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <xsl:variable name="type-name">
+ <xsl:call-template name="xsd.element-type"/>
+ </xsl:variable>
+ <xsl:variable name="elem-type"
+ select="$consolidated-xsd[generate-id() != generate-id(current()) and $type-name and @name=$type-name and contains(local-name(), 'Type')][1]"/>
+
+ <xsl:if test="$type-name != @name">
+ <xsl:apply-templates select="$elem-type" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+
+ <xsl:if test="not($elem-type)">
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+ </xsl:if>
+
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <span style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </span>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:template>
+ <xsl:template match="xsd:element | xsd:attribute" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <!--
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+-->
+ <li>
+ <xsl:variable name="local-ref" select="concat(@name, substring-after(@ref, ':'))"/>
+ <xsl:variable name="elem-name">
+ <xsl:choose>
+ <xsl:when test="@name">
+ <xsl:value-of select="@name"/>
+ </xsl:when>
+ <xsl:when test="$local-ref">
+ <xsl:value-of select="$local-ref"/>
+ </xsl:when>
+ <xsl:when test="@ref">
+ <xsl:value-of select="@ref"/>
+ </xsl:when>
+ <xsl:otherwise>anonymous</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:value-of select="$elem-name"/>
+
+ <xsl:variable name="type-name">
+ <xsl:call-template name="xsd.element-type"/>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:variable name="elem-type"
+ select="$consolidated-xsd[@name = $type-name and contains(local-name(), 'Type')][1]"/>
+ <xsl:apply-templates select="$elem-type | *" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </li>
+ </xsl:template>
+ <xsl:template match="xsd:attribute[ @*[local-name() = 'arrayType'] ]"
+ mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="array-local-name"
+ select="substring-after(@*[local-name() = 'arrayType'], ':')"/>
+ <xsl:variable name="type-local-name" select="substring-before($array-local-name, '[')"/>
+ <xsl:variable name="array-type" select="$consolidated-xsd[@name = $type-local-name][1]"/>
+
+ <xsl:variable name="recursion.label" select="concat('[', $type-local-name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <xsl:apply-templates select="$array-type" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <span style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </span>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template name="xsd.element-type">
+ <xsl:variable name="ref-or-type">
+ <xsl:choose>
+ <xsl:when test="@type">
+ <xsl:value-of select="@type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@ref"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="type-local-name" select="substring-after($ref-or-type, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="$ref-or-type">
+ <xsl:value-of select="$ref-or-type"/>
+ </xsl:when>
+ <xsl:otherwise>undefined</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:value-of select="$type-name"/>
+ </xsl:template>
+ <xsl:template match="xsd:documentation" mode="operations.message.part">
+ <div style="color:green">
+ <xsl:value-of select="." disable-output-escaping="yes"/>
+ </div>
+ </xsl:template>
+ <xsl:template name="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:param name="type-local-name"/>
+
+ <xsl:if test="$ENABLE-OPERATIONS-TYPE">
+ <xsl:variable name="properties">
+ <xsl:if test="self::xsd:element | self::xsd:attribute[parent::xsd:complexType]">
+ <xsl:variable name="min">
+ <xsl:if test="@minOccurs = '0'">optional</xsl:if>
+ </xsl:variable>
+ <xsl:variable name="max">
+ <xsl:if test="@maxOccurs = 'unbounded'">unbounded</xsl:if>
+ </xsl:variable>
+ <xsl:variable name="nillable">
+ <xsl:if test="@nillable">nillable</xsl:if>
+ </xsl:variable>
+
+ <xsl:if test="(string-length($min) + string-length($max) + string-length($nillable) + string-length(@use)) > 0">
+ <xsl:text> - </xsl:text>
+ <xsl:value-of select="$min"/>
+ <xsl:if test="string-length($min) and string-length($max)">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$max"/>
+ <xsl:if test="(string-length($min) + string-length($max)) > 0 and string-length($nillable)">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$nillable"/>
+ <xsl:if test="(string-length($min) + string-length($max) + string-length($nillable)) > 0 and string-length(@use)">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:value-of select="@use"/>
+ <xsl:text>; </xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:variable>
+
+ <xsl:variable name="recursion.label" select="concat('[', $type-local-name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ <xsl:with-param name="recursion.count" select="$ANTIRECURSION-DEPTH"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:if test="string-length($recursion.test) != 0">
+ <span style="color:blue">
+ <xsl:value-of select="$properties"/>
+ <xsl:variable name="elem-type"
+ select="$consolidated-xsd[@name = $type-local-name and (not(contains(local-name(current()), 'element')) or contains(local-name(), 'Type'))][1]"/>
+ <xsl:if test="string-length($type-local-name) > 0">
+ <xsl:call-template name="render-type.write-name">
+ <xsl:with-param name="type-local-name" select="$type-local-name"/>
+ </xsl:call-template>
+ </xsl:if>
+
+ <xsl:choose>
+ <xsl:when test="$elem-type">
+
+ <xsl:apply-templates select="$elem-type" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+
+ <xsl:apply-templates select="*" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </span>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="render-type.write-name">
+ <xsl:param name="type-local-name"/>
+ <xsl:text> type </xsl:text>
+ <big>
+ <i>
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>undefined</xsl:otherwise>
+ </xsl:choose>
+ </i>
+ </big>
+ </xsl:template>
+ <xsl:template match="*" mode="render-type"/>
+ <xsl:template match="xsd:element | xsd:complexType | xsd:simpleType | xsd:complexContent"
+ mode="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:apply-templates select="*" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:restriction[ parent::xsd:simpleType ]" mode="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="type-local-name" select="substring-after(@base, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="@base">
+ <xsl:value-of select="@base"/>
+ </xsl:when>
+ <xsl:otherwise>undefined</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:text> - </xsl:text>
+ <xsl:call-template name="render-type.write-name">
+ <xsl:with-param name="type-local-name" select="$type-local-name"/>
+ </xsl:call-template>
+ <xsl:text> with </xsl:text>
+ <xsl:value-of select="local-name()"/>
+ <xsl:apply-templates select="*" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:simpleType/xsd:restriction/xsd:*[not(self::xsd:enumeration)]"
+ mode="render-type">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="local-name()"/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text>)</xsl:text>
+ </xsl:template>
+ <xsl:template match="xsd:restriction | xsd:extension" mode="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="type-local-name" select="substring-after(@base, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="@base">
+ <xsl:value-of select="@base"/>
+ </xsl:when>
+ <xsl:otherwise>undefined</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="base-type" select="$consolidated-xsd[@name = $type-name][1]"/>
+ <xsl:variable name="abstract">
+ <xsl:if test="$base-type/@abstract">abstract </xsl:if>
+ </xsl:variable>
+
+ <xsl:if test="not($type-name = 'Array')">
+ <xsl:value-of select="concat(' - ', local-name(), ' of ', $abstract)"/>
+ <xsl:call-template name="render-type.write-name">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+ </xsl:if>
+
+ <xsl:apply-templates select="$base-type | *" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:attribute[ @*[local-name() = 'arrayType'] ]" mode="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="array-local-name"
+ select="substring-after(@*[local-name() = 'arrayType'], ':')"/>
+ <xsl:variable name="type-local-name" select="substring-before($array-local-name, '[')"/>
+ <xsl:variable name="array-type" select="$consolidated-xsd[@name = $type-local-name][1]"/>
+
+ <xsl:text> - array of </xsl:text>
+ <xsl:call-template name="render-type.write-name">
+ <xsl:with-param name="type-local-name" select="$type-local-name"/>
+ </xsl:call-template>
+
+ <xsl:apply-templates select="$array-type" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:enumeration" mode="render-type"/>
+ <xsl:template match="xsd:enumeration[not(preceding-sibling::xsd:enumeration)]"
+ mode="render-type">
+ <xsl:text> - enum { </xsl:text>
+ <xsl:apply-templates select="self::* | following-sibling::xsd:enumeration" mode="render-type.enum"/>
+ <xsl:text> }</xsl:text>
+ </xsl:template>
+ <xsl:template match="xsd:enumeration" mode="render-type.enum">
+ <xsl:if test="preceding-sibling::xsd:enumeration">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:text disable-output-escaping="yes">'</xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text disable-output-escaping="yes">'</xsl:text>
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-xsd-tree.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-src.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="@*" mode="src.import">
+ <xsl:param name="src.import.stack"/>
+ <xsl:variable name="recursion.label" select="concat('[', string(.), ']')"/>
+ <xsl:variable name="recursion.check" select="concat($src.import.stack, $recursion.label)"/>
+
+ <xsl:choose>
+ <xsl:when test="contains($src.import.stack, $recursion.label)">
+ <h2 style="red">
+ <xsl:value-of select="concat('Cyclic include / import: ', $recursion.check)"/>
+ </h2>
+ </xsl:when>
+ <xsl:otherwise>
+ <h2>
+ <a name="{concat($SRC-FILE-PREFIX, generate-id(..))}">
+ <xsl:choose>
+ <xsl:when test="parent::xsd:include">Included </xsl:when>
+ <xsl:otherwise>Imported </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="name() = 'location'">WSDL </xsl:when>
+ <xsl:otherwise>Schema </xsl:otherwise>
+ </xsl:choose>
+ <i>
+ <xsl:value-of select="."/>
+ </i>
+ </a>
+ </h2>
+
+ <div class="box">
+ <xsl:apply-templates select="document(string(.))" mode="src"/>
+ </div>
+
+ <xsl:apply-templates select="document(string(.))/*/*[local-name() = 'import'][@location]/@location"
+ mode="src.import">
+ <xsl:with-param name="src.import.stack" select="$recursion.check"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="document(string(.))//xsd:import[@schemaLocation]/@schemaLocation"
+ mode="src.import">
+ <xsl:with-param name="src.import.stack" select="$recursion.check"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="*" mode="src">
+ <div class="xml-element">
+ <a name="{concat($SRC-PREFIX, generate-id(.))}">
+ <xsl:apply-templates select="." mode="src.link"/>
+ <xsl:apply-templates select="." mode="src.start-tag"/>
+ </a>
+ <xsl:apply-templates select="*|comment()|processing-instruction()|text()[string-length(normalize-space(.)) > 0]"
+ mode="src"/>
+ <xsl:apply-templates select="." mode="src.end-tag"/>
+ </div>
+ </xsl:template>
+ <xsl:template match="*" mode="src.start-tag">
+ <xsl:call-template name="src.elem">
+ <xsl:with-param name="src.elem.end-slash"> /</xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+ <xsl:template match="*[*|comment()|processing-instruction()|text()[string-length(normalize-space(.)) > 0]]"
+ mode="src.start-tag">
+ <xsl:call-template name="src.elem"/>
+ </xsl:template>
+ <xsl:template match="*" mode="src.end-tag"/>
+ <xsl:template match="*[*|comment()|processing-instruction()|text()[string-length(normalize-space(.)) > 0]]"
+ mode="src.end-tag">
+ <xsl:call-template name="src.elem">
+ <xsl:with-param name="src.elem.start-slash">/</xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+ <xsl:template match="*" mode="src.link-attribute">
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat('#', $SRC-PREFIX, generate-id(.))"/>
+ </xsl:attribute>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="*[local-name() = 'import' or local-name() = 'include'][@location or @schemaLocation]"
+ mode="src.link">
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat('#', $SRC-FILE-PREFIX, generate-id(.))"/>
+ </xsl:attribute>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="*" mode="src.link"/>
+ <xsl:template match="ws2:service|ws2:binding" mode="src.link">
+ <xsl:variable name="iface-name">
+ <xsl:apply-templates select="@interface" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface[@name = $iface-name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws2:endpoint" mode="src.link">
+ <xsl:variable name="binding-name">
+ <xsl:apply-templates select="@binding" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:binding[@name = $binding-name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws2:binding/ws2:operation" mode="src.link">
+ <xsl:variable name="operation-name">
+ <xsl:apply-templates select="@ref" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface/ws2:operation[@name = $operation-name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws2:binding/ws2:fault|ws2:interface/ws2:operation/ws2:infault|ws2:interface/ws2:operation/ws2:outfault"
+ mode="src.link">
+ <xsl:variable name="operation-name">
+ <xsl:apply-templates select="@ref" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface/ws2:fault[@name = $operation-name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws2:interface/ws2:operation/ws2:input|ws2:interface/ws2:operation/ws2:output|ws2:interface/ws2:fault"
+ mode="src.link">
+ <xsl:variable name="elem-name">
+ <xsl:apply-templates select="@element" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-xsd[@name = $elem-name]" mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws:operation/ws:input[@message] | ws:operation/ws:output[@message] | ws:operation/ws:fault[@message] | soap:header[ancestor::ws:operation and @message]"
+ mode="src.link">
+ <xsl:apply-templates select="$consolidated-wsdl/ws:message[@name = substring-after( current()/@message, ':' )]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws:operation/ws:input[@message] | ws:operation/ws:output[@message] | ws:operation/ws:fault[@message] | soap:header[ancestor::ws:operation and @message]"
+ mode="src.link">
+ <xsl:apply-templates select="$consolidated-wsdl/ws:message[@name = substring-after( current()/@message, ':' )]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws:message/ws:part[@element or @type]" mode="src.link">
+ <xsl:variable name="elem-local-name" select="substring-after(@element, ':')"/>
+ <xsl:variable name="type-local-name" select="substring-after(@type, ':')"/>
+ <xsl:variable name="elem-name">
+ <xsl:choose>
+ <xsl:when test="$elem-local-name">
+ <xsl:value-of select="$elem-local-name"/>
+ </xsl:when>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="@element">
+ <xsl:value-of select="@element"/>
+ </xsl:when>
+ <xsl:when test="@type">
+ <xsl:value-of select="@type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="src.syntax-error"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:apply-templates select="$consolidated-xsd[@name = $elem-name]" mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws:service/ws:port[@binding]" mode="src.link">
+ <xsl:variable name="binding-name">
+ <xsl:apply-templates select="@binding" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws:binding[@name = $binding-name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws:operation[@name and parent::ws:binding/@type]" mode="src.link">
+ <xsl:variable name="type-name">
+ <xsl:apply-templates select="../@type" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws:portType[@name = $type-name]/ws:operation[@name = current()/@name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="xsd:element[@ref or @type]" mode="src.link">
+ <xsl:variable name="ref-or-type">
+ <xsl:choose>
+ <xsl:when test="@type">
+ <xsl:value-of select="@type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@ref"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="type-local-name" select="substring-after($ref-or-type, ':')"/>
+ <xsl:variable name="xsd-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="$ref-or-type">
+ <xsl:value-of select="$ref-or-type"/>
+ </xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:if test="$xsd-name">
+ <xsl:variable name="msg"
+ select="$consolidated-xsd[@name = $xsd-name and contains(local-name(), 'Type')][1]"/>
+ <xsl:apply-templates select="$msg" mode="src.link-attribute"/>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="xsd:attribute[contains(@ref, 'arrayType')]" mode="src.link">
+ <xsl:variable name="att-array-type"
+ select="substring-before(@*[local-name() = 'arrayType'], '[]')"/>
+ <xsl:variable name="xsd-local-name" select="substring-after($att-array-type, ':')"/>
+ <xsl:variable name="xsd-name">
+ <xsl:choose>
+ <xsl:when test="$xsd-local-name">
+ <xsl:value-of select="$xsd-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$att-array-type"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:if test="$xsd-name">
+ <xsl:variable name="msg" select="$consolidated-xsd[@name = $xsd-name][1]"/>
+ <xsl:apply-templates select="$msg" mode="src.link-attribute"/>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="xsd:extension | xsd:restriction" mode="src.link">
+ <xsl:variable name="xsd-local-name" select="substring-after(@base, ':')"/>
+ <xsl:variable name="xsd-name">
+ <xsl:choose>
+ <xsl:when test="$xsd-local-name">
+ <xsl:value-of select="$xsd-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@type"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="msg" select="$consolidated-xsd[@name = $xsd-name][1]"/>
+ <xsl:apply-templates select="$msg" mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template name="src.elem">
+ <xsl:param name="src.elem.start-slash"/>
+ <xsl:param name="src.elem.end-slash"/>
+
+ <xsl:value-of select="concat('<', $src.elem.start-slash, name(.))"
+ disable-output-escaping="no"/>
+ <xsl:if test="not($src.elem.start-slash)">
+ <xsl:apply-templates select="@*" mode="src"/>
+ <xsl:apply-templates select="." mode="src.namespace"/>
+ </xsl:if>
+ <xsl:value-of select="concat($src.elem.end-slash, '>')" disable-output-escaping="no"/>
+ </xsl:template>
+ <xsl:template match="@*" mode="src">
+ <xsl:text> </xsl:text>
+ <span class="xml-att">
+ <xsl:value-of select="concat(name(), '=')"/>
+ <span class="xml-att-val">
+ <xsl:value-of select="concat('"', ., '"')" disable-output-escaping="yes"/>
+ </span>
+ </span>
+ </xsl:template>
+ <xsl:template match="*" mode="src.namespace">
+ <xsl:variable name="supports-namespace-axis" select="count(/*/namespace::*) > 0"/>
+ <xsl:variable name="current" select="current()"/>
+
+ <xsl:choose>
+ <xsl:when test="count(/*/namespace::*) > 0">
+ <!--
+ When the namespace axis is present (e.g. Internet Explorer), we can simulate
+ the namespace declarations by comparing the namespaces in scope on this element
+ with those in scope on the parent element. Any difference must have been the
+ result of a namespace declaration. Note that this doesn't reflect the actual
+ source - it will strip out redundant namespace declarations.
+ -->
+ <xsl:for-each select="namespace::*[. != 'http://www.w3.org/XML/1998/namespace']">
+ <xsl:if test="not($current/parent::*[namespace::*[. = current()]])">
+ <div class="xml-att">
+ <xsl:text> xmlns</xsl:text>
+ <xsl:if test="string-length(name())">:</xsl:if>
+ <xsl:value-of select="concat(name(), '=')"/>
+ <span class="xml-att-val">
+ <xsl:value-of select="concat('"', ., '"')" disable-output-escaping="yes"/>
+ </span>
+ </div>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <!--
+ When the namespace axis isn't supported (e.g. Mozilla), we can simulate
+ appropriate declarations from namespace elements.
+ This currently doesn't check for namespaces on attributes.
+ In the general case we can't reliably detect the use of QNames in content, but
+ in the case of schema, we know which content could contain a QName and look
+ there too. This mechanism is rather unpleasant though, since it records
+ namespaces where they are used rather than showing where they are declared
+ (on some parent element) in the source. Yukk!
+ -->
+ <xsl:if test="namespace-uri(.) != namespace-uri(parent::*) or not(parent::*)">
+ <span class="xml-att">
+ <xsl:text> xmlns</xsl:text>
+ <xsl:if test="substring-before(name(),':') != ''">:</xsl:if>
+ <xsl:value-of select="substring-before(name(),':')"/>
+ <xsl:text>=</xsl:text>
+ <span class="xml-att-val">
+ <xsl:value-of select="concat('"', namespace-uri(.), '"')" disable-output-escaping="yes"/>
+ </span>
+ </span>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:template>
+ <xsl:template match="text()" mode="src">
+ <span class="xml-text">
+ <xsl:value-of select="." disable-output-escaping="no"/>
+ </span>
+ </xsl:template>
+ <xsl:template match="comment()" mode="src">
+ <div class="xml-comment">
+ <xsl:text disable-output-escaping="no"><!-- </xsl:text>
+ <xsl:value-of select="." disable-output-escaping="no"/>
+ <xsl:text disable-output-escaping="no"> -->
+</xsl:text>
+ </div>
+ </xsl:template>
+ <xsl:template match="processing-instruction()" mode="src">
+ <div class="xml-proc">
+ <xsl:text disable-output-escaping="no"><?</xsl:text>
+ <xsl:copy-of select="name(.)"/>
+ <xsl:value-of select="concat(' ', .)" disable-output-escaping="yes"/>
+ <xsl:text disable-output-escaping="no"> ?>
+</xsl:text>
+ </div>
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-src.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+
+
+<!--
+==================================================================
+ Starting point
+==================================================================
+-->
+
+<xsl:template match="/">
+ <html>
+ <xsl:call-template name="head.render"/>
+ <xsl:call-template name="body.render"/>
+ </html>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: HTML head
+==================================================================
+-->
+
+<xsl:template name="head.render">
+ <head>
+ <title>
+ <xsl:value-of select="concat($html-title, ' - ', 'Generated by wsdl-viewer.xsl')"/>
+ </title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
+ <meta http-equiv="content-script-type" content="text/javascript"/>
+ <meta http-equiv="content-style-type" content="text/css"/>
+ <meta name="Generator" content="http://tomi.vanek.sk/xml/wsdl-viewer.xsl"/>
+
+ <meta http-equiv="imagetoolbar" content="false"/>
+ <meta name="MSSmartTagsPreventParsing" content="true"/>
+
+ <style type="text/css">
+ <xsl:value-of select="$css" disable-output-escaping="yes"/>
+ </style>
+
+ <script src="wsdl-viewer.js" type="text/javascript" language="javascript">
+ <xsl:comment>
+ <xsl:text>
+ // </xsl:text>
+ </xsl:comment>
+ </script>
+ </head>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: HTML body
+==================================================================
+-->
+
+<xsl:template name="body.render">
+ <body id="operations">
+ <div id="outer_box">
+ <div id="inner_box" onload="pagingInit()">
+ <xsl:call-template name="title.render"/>
+
+
+ <!-- TODO: pages with tabs for selecting some aspect of the WSDL
+ <xsl:call-template name="navig.render"/>
+-->
+
+ <xsl:call-template name="content.render"/>
+ <xsl:call-template name="footer.render"/>
+ </div>
+ </div>
+ </body>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: heading
+==================================================================
+-->
+
[... 224 lines stripped ...]
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org