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. 抽象工厂模式java_Java之抽象工厂模式(Abstract Factory)
  2. 【pwnable.tw】 death_note
  3. 第三十期:BAT 为什么都看上了重庆?
  4. eclipse弃坑记第一篇之在idea上配置Tomcat环境并创建Javaweb项目的详细步骤原创
  5. python标准库对象导入语句_Python标准库之Sys模块使用详解
  6. 为什么调用thread.Abort(),线程不会马上停止
  7. SOA应用难逃出的五座大山
  8. CSS实现字体镂空效果、阴影效果、字体阴影效果
  9. linux定时器使用指南及实例
  10. 虚拟交换系统 (VSS)
  11. Python笔记:集合的概念和使用
  12. MATLAB角度转换
  13. PLM( 产品生命周期管理)的简单介绍
  14. 根据2点经纬度,计算方位角,以及计算2条线的夹角
  15. error C2039: ‘tr1‘: is not a member of ‘std‘
  16. (3/300)分部积分法
  17. Windows + XMAPP + TestLink 初探
  18. SQL Server CDC数据增量抽取
  19. 百丽三十而立:“鞋王”DTC之路的阵痛与重生
  20. 学完这些图像处理,我拿去给女友修了图...

热门文章

  1. Linux内核Thermal框架详解十三、Thermal Governor(3)
  2. PDFBox解析PDF文档
  3. 组合数学笔记之二——“二项式系数”
  4. 基于FPGA的ICG-20330陀螺仪设计
  5. 一个极品MM的日记!很嘲很有道理!
  6. caffe 训练手写字体HWDB1.1trn_gnt.zip HWDB1.1tst_gnt.zip并测试完整超详尽攻略
  7. [zz]百度发布深度学习可视化平台 Visual DL
  8. 手把手教你配置机器学习服务器(二)服务器组装
  9. XUST组于2004年10月14日成立!
  10. python语言头像_Python个性化头像