webService(一):WSDL
1、准备知识
XML命名空间为防止xml元素命名冲突提供了解决方案。
对于一个XML文件,它的元素名称是由开发者定义的。当合并不同应用的XML文档时经常会导致命名冲突。 下面的XML代码一段HTML表格信息:
<table>
? <tr> ??? <td>Apples</td> ??? <td>Bananas</td> ? </tr> </table> 下面的XML表示一张桌子的信息:
<table>
? <name>African Coffee Table</name> ? <width>80</width> ? <length>120</length> </table> 如果把这两段XML合并起来,就会发生命名冲突。都含有一个<table>元素,但是格子的内容和含义不同。 XML解析器不知道如何处理这些差异。
使用名称前缀可以很容易的避免命名冲突。 下面的XML表示一个HTML表格和一个家具的信息:
<h:table>
? <h:tr> ??? <h:td>Apples</h:td> ??? <h:td>Bananas</h:td> ? </h:tr> </h:table> <f:table> ? <f:name>African Coffee Table</f:name> ??<f:width>80</f:width> ??<f:length>120</f:length> </f:table> 上面的例子中不存在冲突,因为两个<table>元素有不同的名字。
在XML中使用前缀时时,必需定义命名空间。 通过在元素的开头放置xmlns属性来定义命名空间。 定义命名空间的语法:xmlns:prefix="URI"。
<root>
<h:table? xmlns:h="http://www.w3.org/TR/html4/"> ??<h:tr> ??? <h:td>Apples</h:td> ??? <h:td>Bananas</h:td> ??</h:tr> </h:table> <f:table? xmlns:f="http://www.w3schools.com/furniture"> ??<f:name>African Coffee Table</f:name> ??<f:width>80</f:width> ??<f:length>120</f:length> </f:table> </root> 上面的例子中,<table>标签中的xmlns属性赋予前缀h:和f:一个命名空间。 当一个元素定义了命名空间之后,所有具有相同前缀的子元素都和相同的命名空间关联。 命名空间可以在XML根元素处定义。
<root?
xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3schools.com/furniture"> <h:table> ??<h:tr> ??? <h:td>Apples</h:td> ??? <h:td>Bananas</h:td> ??</h:tr> </h:table> <f:table> ??<f:name>African Coffee Table</f:name> ??<f:width>80</f:width> ??<f:length>120</f:length> </f:table> </root> Note:?解析器在查找信息的时候不会使用命名空间的URI。作用只是给命名空间一个独特的名字。
为元素定义一个默认的命名空间,可以应用到所有的子元素上。语法如下:
xmlns="
namespaceURI"
下面的XML表示一个HMTL表格信息:
<table xmlns="http://www.w3.org/TR/html4/">
? <tr> ??? <td>Apples</td> ??? <td>Bananas</td> ? </tr> </table> 下面的XML表示家具信息:
<table xmlns="http://www.w3schools.com/furniture">
? <name>African Coffee Table</name> ? <width>80</width> ? <length>120</length> </table>
XSLT是一种XML语言,它可以把XML文档翻译成其他的格式,比如HTML。 在下面的XSLT标签中,你会发现大部分标签都是HTML标签。 不是HMTL的标签都有xsl前缀,通过命名空间xmlns:xsl="http://www.w3.org/1999/XSL/Transform"标识:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> ? <h2>My CD Collection</h2> ? <table border="1"> ??? <tr> ????? <th style="text-align:left">Title</th> ????? <th style="text-align:left">Artist</th> ??? </tr> ??? <xsl:for-each select="catalog/cd"> ??? <tr> ????? <td><xsl:value-of select="title"/></td> ????? <td><xsl:value-of select="artist"/></td> ??? </tr> ??? </xsl:for-each> ? </table> </body> </html> </xsl:template> </xsl:stylesheet> 2、WSDLWSDL是一个基于XML的语言,它用来描述Web Service以及如何访问这些Web Service。 WSDL的作用
WSDL文档使用下面几个主要的元素来描述Web Service:
WSDL文档的主要结构:
<definitions>
<types> ? data type definitions........ </types> <message> ? definition of the data being communicated.... </message> <portType> ? set of operations...... </portType> <binding> ? protocol and data format specification.... </binding> </definitions> WSDL文档可以包含其他元素,比如扩展元素、以及服务元素(集合几个Web Service定义在一个WSDL文档中)。 WSDL Ports <protType>是WSDL中最重要的元素。它可以比喻成传统编程语言中的一个函数库(或者一个模块,一个类)。<protType>元素用来一个一个Web Service、可以执行的操作,以及包含的message.WSDL Messages <message>元素定义了一个操作的数据。每个message可以包含一个或者多个parts。parts可以比如成传统编程语言中的函数形参。 WSDL Types <types>元素定义了Web Service使用的数据类型。为了最大的平台无关性,WSDL使用XML Schema语法定义数据类型。 WSDL Bindings <binding>元素为每个port type定义了message格式和协议。
一个请求-响应操作:
<message name="getTermRequest">
? <part name="term" type="xs:string"/> </message> <message name="getTermResponse"> ? <part name="value" type="xs:string"/> </message> <portType name="glossaryTerms"> ? <operation name="getTerm"> ??? <input message="getTermRequest"/> ??? <output message="getTermResponse"/> ? </operation> </portType> <binding type="glossaryTerms" name="b1"> ?? <soap:binding style="document" ?? transport="http://schemas.xmlsoap.org/soap/http" /> ?? <operation> ???? <soap:operation soapAction="http://example.com/getTerm"/> ???? <input><soap:body use="literal"/></input> ???? <output><soap:body use="literal"/></output> ? </operation> </binding> binding?有两个属性 - name和type。 name属性(可以任意起名)定义binding的名字,type属性指定绑定的端口(端口的概念在这里就是一个web service)。 soap:binding?有两个属性 - style和transport。 style属性可以是”rpc"或者“document”;transport属性定义了使用的SOAP协议,例子中我们使用HTTP。 operation?元素定义了protType暴露的每个操作。SOAP action定义的每个操作,必需指定如何加密input和output。例子中我们使用“literal”。 WSDL Example 下面是一个简单的WSDL文档片段:
<message name="getTermRequest">
? <part name="term" type="xs:string"/> </message> <message name="getTermResponse"> ? <part name="value" type="xs:string"/> </message> <portType name="glossaryTerms"> ? <operation name="getTerm"> ??? <input message="getTermRequest"/> ??? <output message="getTermResponse"/> ? </operation> </portType> 上例中,?<portType>元素定义了"glossaryTeams"作为一个port的名字,并且定义了"getTerm"作为一个operation的名字。"getTerm" operation包含一个叫”getTermRequest"的input message和一个叫“getTermResponse"的output message。 <message>元素定义定义了每个消息的parts,以及关联的数据类型。 和传统编程相比,glossaryTerms是一个函数库,”getTerm"是一个函数(getTermRequest作为输入参数,getTermResponse作为输出参数)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Loadrunner 调用 Webservice 接口 进行 性能测试 时的方法及
- 单元测试 – Angular 2(Mock Ionic2) – 没有App的提供者
- axis1.4生成代码调用Webservice(备忘)
- angularjs – 如何使用Sinon.js测试Angular $modal?
- Bootstrap路径导航与分页学习使用
- 工厂在anglejs中是未定义的
- 在交互式bash shell下运行系统命令
- angularjs – 在IE8中多次调用$routeChangeStart
- [WebServices]之三:动态调用 WebService
- 浅淡Webservice、WSDL三种服务访问的方式(附案例)