加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webService(一):WSDL

发布时间:2020-12-17 00:02:57 所属栏目:安全 来源:网络整理
导读:1、准备知识 XML命名空间 XML命名空间为防止xml元素命名冲突提供了解决方案。 命名冲突 对于一个XML文件,它的元素名称是由开发者定义的。当合并不同应用的XML文档时 经常会导致命名冲突 。 下面的XML代码一段HTML表格信息: table ? tr ??? tdApples/td ???

1、准备知识

  • XML命名空间

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属性

在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、WSDL

WSDL是一个基于XML的语言,它用来描述Web Service以及如何访问这些Web Service。

WSDL的作用

  • WSDL 全称是Web Services Description Language
  • WSDL 是用XML写的
  • WSDL 是一个XML文档
  • WSDL 用来描述Web Service
  • WSDL 也用来定位Web Servcie
  • WSDL 是W3C 推荐使用
WSDL文档结构

WSDL文档使用下面几个主要的元素来描述Web Service:

<binding>
Element Description
<types> A container for data type definitions used by the web service
<message> A typed definition of the data being communicated
<portType> A set of operations supported by one or more endpoints
A protocol and data format specification for a particular port type

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作为输出参数)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读