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:

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

webService(一):WSDL相关推荐

  1. 浅淡Webservice、WSDL三种服务访问的方式(附案例)

    Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...

  2. [Java] webservice soap,wsdl 例子

    java 调用webservice的各种方法总结 现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!! 由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和 ...

  3. CXF发布服务,WebService缺少wsdl:types/wsdl:message/标签

    发布CXF时遇到一个问题,发布的服务,wsdl文件中没有<wsdl:types/><wsdl:message/>标签,wsdl文件如下: <?xml version=&q ...

  4. php的webservice的wsdl的XML无法显示

    php的webservice的因为wsdl有中文所以xml无法显示 可以用Nopepad++  转码即可  以UTF-8无BOM编码

  5. webservice、WSDL简介

    Webservice是跨平台.跨语言的远程调用技术 通信机制的本质是xml数据交换 采用soap协议进行通信 而WSDL 指网络服务描述语言 (Web Services Description Lan ...

  6. 彻底理解webservice SOAP WSDL

    WebServices简介 先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构, 既然说是一种架构的话,所以一般认为 SOA 是包含 ...

  7. 学习 WebService 第五步:在Local创建测试用WebService(WSDL)

    [准备] Eclipse+Tomcat7(Tomcat端口修改为不冲突的值) axis2 1.7.7 jar包(没有来这里下载:http://www.apache.org/dyn/closer.lua ...

  8. 提供一些网上webservice的WSDL地址

    腾讯QQ在线状态WEB服务 Endpoint:http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx Disco:http://www ...

  9. webService接口wsdl以byte[]方式上传附件

    服务端声明 @WebService(serviceName = "CreateKnwlFileService") public class CreateKnwlFile {/* 接 ...

  10. 【WebService】wsdl配置详解以及使用注解修改wsdl配置

    本文转自: https://blog.csdn.net/eson_15/article/details/52051801   (倪升武的博客) 对大佬的膜拜! 前面分析了一下关于ws的基本知识,我们知 ...

最新文章

  1. Linux命令(基础)
  2. linux cat 合并文本 中间添加分隔符
  3. Python “with” keyword
  4. 《数据分析变革:大数据时代精准决策之道》一第1章 了解运营型分析
  5. 用vim 配置javascript
  6. html5语法参考图片,仿AS语法来写HTML5—第1章,显示一张图片
  7. SVG.use/拖拽
  8. C++中两个常用的控制语句格式的函数(width和precision函数)
  9. 存储过程可重用的代码块_利用软件重用经验进行自动化测试推荐
  10. 深入PHP使用技巧之变量
  11. jupyter notebook matplotlib绘制动态图并显示在notebook中
  12. 基于python的猜大小游戏
  13. 详解Java设计模式之观察者模式(Observer Pattern)
  14. 华为服务器磁盘IO性能查看,磁盘io性能
  15. c语言怎么做查询系统,c语言编辑查询系统,可实现增删改查
  16. 小丁是怎样入门git的
  17. 编译原理笔记(二)之词法分析
  18. 关于Mysql使用时出现部分错误的总结
  19. 正文 风控系统是什么?-- 搭建风控系统的方法推荐
  20. 树莓派 摄像头安装配置

热门文章

  1. β-环糊精/四氧化三铁纳米复合材料/天然橡胶复合材料/类氧化石墨烯磁性纳米复合材料的制备
  2. malloc/calloc/realloc
  3. 拟牛顿法之DFP算法
  4. (好用)部署nacos,docker-compse方式【无图脑补版】
  5. 2018年工作第一次从深圳回河南老家(下)
  6. Uboot命令[part]
  7. 拓嘉辰丰电商:什么是拼多多上货助手?有什么作用?
  8. 解构云原生,从概念到落地:阿里云、声网、微博、好未来、CNCF的专家们怎么看?
  9. 03Linux相关快捷键
  10. shell脚本--常用知识