UDDI技术白皮书

SOAP ,WSDL 和UDDI 这些描述通常用于SOAP服务,但也可以用于描述REST服务(尽管REST服务的描述通常更简单,不需要WSDL的复杂性)。 阅读详情

 

本文摘自:

http://www.ibm.com/developerworks/cn/xml/specification/index2.html

UDDI技术白皮书

developerWorks
文档选项
将此页作为电子邮件发送

将此页作为电子邮件发送



级别: 初级

阮文骏, 系统架构师
柴晓路 译, 系统架构师

2001 年 5 月 01 日

摘要:统一描述、发现和集成协议(UDDI)是一套基于Web的、分布式的、为Web服务提供的信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web服务注册以使得别的企业能够发现的访问协议的实现标准。

Web服务是下一代的WWW,它允许在Web站点上放置可编程的元素,使得能进行基于Web的分布式计算和处理。UDDI商业注册中心的创建目的就是为促进企业的Web服务的发展及为企业发现适当的Web服务。本文描述了这些基于Web的UDDI商业注册中心的能力。

本文针对的读者群包括所有想要从概念上理解什么是UDDI,谁来使用UDDI,以及分布式的商业注册中心如何使得程序能发现别的商业实体在Web上提供的Web服务并且同这些服务进行交互。

简介

概览
统一描述、发现和集成协议(UDDI, Universal Description, Discovery and Integration)标准定义了Web服务的发布与发现的方法。所谓的"Web服务",它是指由企业发布的完成其特别商务需求的在线应用服务,其它公司或应用软件能够通过Internet来访问并使用这项在线服务。

Web服务将逐渐成为电子商务应用构建的基础体系架构。例如,一个公司通过另一个公司所提供的服务,直接在Internet上发送一份订货单。又例如,某一个服务用于计算某一尺寸或是重量的货物通过某种方法(如海运)运输一定距离需要花费多少费用。

最初,大家可能会将它看做是一个管理如何发现Web服务的过程。其实,如果现有的商务合作伙伴已经有了一个已知的电子商务入口,那还有什么需要发现的呢?当然这是建立在一个默认的假定情况"信息都是已知的"这样一个基础上的。而且无论在哪种情况下,当需要找出哪些商业伙伴可以提供什么样的服务时,快速地发现并找到答案仍然将会变得十会困难。其中一个可选的方法是使用电话和每个合作伙伴进行联系,然后找出合适的对象。对于一个提供Web服务的商业实体来说,需要配备具备相当技术能力的专业人员去满足这样随机的服务发现需求显然是不合适的。

另一个解决该问题的办法是在公司的每个网站上放置一个Web服务的描述文件。这样,至少那些依靠已经注册的URL 来工作的网络爬虫程序能够发现并为它们建立索引。可是这种通过"robots.txt"来定位Web 服务的方法完全依赖爬虫程序的能力。这种分布式的机制是可扩展的,但它缺少一种机制来保证服务描述格式的一致性,也不能便捷的跟踪不断发生的变化。

UDDI 提供了一种基于分布式的商业注册中心的方法,该商业注册中心维护了一个企业和企业提供的Web 服务的全球目录,而且其中的信息描述格式是基于通用的XML 格式的。

UDDI的商业注册与UDDI商业注册中心
UDDI 计划的核心组件是UDDI商业注册,它使用一个XML文档来描述企业及其提供的Web服务。从概念上来说,UDDI商业注册所提供的信息包含三个部分:"白页(White Page)" 包括了地址,联系方法,和已知的企业标识;"黄页(Yellow page)"包括了基于标准分类法的行业类别;"绿页(Green Page)"则包括了关于该企业所提供的Web服务的技术信息,其形式可能是一些指向文件或是URL的指针,而这些文件或URL是为服务发现机制服务的。所有的UDDI商业注册信息存储在UDDI商业注册中心中。

使用UDDI
UDDI规范包含了对基于Web的UDDI商业注册中心可以实施的整套共享操作。一般来说,程序或程序员通过UDDI商业注册中心来获得Web服务的位置及其技术信息。其中对于程序员来说,是对自己的系统实现进行准备,以使自己的系统能和那些Web服务实现访问兼容,或是描述自己的Web服务从而能让别人使用。从商业层次上来说,UDDI商业注册中心可以被用于核查某个合作伙伴是否拥有特定的Web服务的调用界面,或是去找出在某一个行业中能提供某种类型服务的公司,并确定某一个合作伙伴或是潜在的合作伙伴的Web服务的技术描述以了解要与该Web服务进行交互所必须的技术细节。

阅读过本文后,读者能对UDDI规范所定义的能力以及依据该规范实现的Web服务注册中心的角色认识有一个非常清晰的了解。

背景
各个公司在如何使用Web的方法上存在很大程度上的差异。许多公司开始利用新出现的Web基础构架技术来定义他们的内部应用与其它公司的商务系统进行交互的方法。如果他们都独立的实现应用,那么每个公司都将根据他们的设计者的经验、现有技术和项目预算,得出他们自己独有的一套解决方法。于是产生的必然结果就是,当需要完成这些分布于不同行业中的各种系统的互相交互时,需要将各不兼容的部分进行拼接集成,这将耗费巨大的代价。

W3C 近期来的工作让我们看到了希望,XML(Extensible Markup Language 扩展标注语言)将会对简化企业之间的商业数据交换起到很大作用。而且,计算机工业的巨头们和很多其它小公司一起,推出了SOAP ,这项技术使应用程序可以通过Internet调用各种服务的界面,而无须考虑使用的具体是什么样的编程语言以及底层使用的分布式对象结构。这些振奋人心的消息使得诸多公司认识到,原先由于电子商务的交互标准的不同而产生的交互代价已经显著降低了。因为有了这些技术和标准,原来难以处理的问题,现在变得容易解决了。

借助XML 和SOAP ,集成和交互的问题将从层次上被简化。XML 提供了跨平台的数据编码和组织方法,而SOAP 建立在XML 之上,定义了一种跨系统平台的信息交换的简单包装方法。绑定于HTTP之上的SOAP协议,可以跨语言、跨操作系统进行远程过程调用(RPC),实现了编程语言和系统平台的无关性。而以前的调用方式则和复杂的分布式对象标准或是中间件有密切的关系,从长期的眼光来看,这些都不是高效的解决方案。XML 和SOAP 这样的跨语言、跨平台的解决方案大大简化了不同企业系统之间的交互问题。

但如果仅仅是XML和SOAP的话,对于公司间的交流仍存在着巨大的鸿沟。工业界的任何一个权威人士都会这样告诉你:"我们需要的是一种真正端到端的解决方案,它建立在任何计算机平台都支持的全球性标准之上。" 显然,要达到这一点还需要很多的努力。UDDI 规范在XML 和SOAP 的基础之上定义了新的一层,在这一层次,不同企业可以用相同的方法描述自己所能提供的,并能查询对方所能提供的服务。

以下图表描述了这些协议的层次关系:图1

互操作协议栈
统一服务互操作协议
(这些层次尚未定义)
统一描述、发现和集成协议 (UDDI)
简单对象访问协议 (SOAP)
扩展标注语言 (XML)
通用Internet协议 (HTTP, TCP/IP)
UDDI是为了实现Web应用服务诸多协议的"下一层",使用诸如TCP/IP、HTTP、XML和SOAP标准,来创建统一的服务描述格式和服务发现协议。

UDDI - 技术发现层
统一描述、发现和集成协议(UDDI)规范一个由Web服务所构成的逻辑上的云状服务,同时也定义了一种编程接口,这种编程接口提供了描述Web 服务的简单框架。规范包括几份相关的文档和一份XML Schema ,用来定义基于SOAP 的注册和发现Web 服务的协议。这些规范由来自多家业界主要公司的技术人员和管理人员花费了几个月的时间制定完成。这些公司也担负起实现第一批UDDI商业注册中心服务的任务,这些服务将可以被所有人所访问,同时其多个合作站点之间能够无缝地共享注册信息。

图2描述了UDDI 规范、XML Schema 和UDDI 商业注册中心集群之间的关系,UDDI 商业注册中心集群能为Web 服务提供"一次注册,到处发布"的功能。


图 2

UDDI规范和调用模式用来在Internet上建立起发现服务。这些发现服务提供了一致的发布接口,以使得能通过编程进行发现。

通过使用UDDI的发现服务,企业可以单独注册那些希望被别的企业发现的自身提供的Web服务。企业可以通过UDDI商业注册中心的Web界面,或是使用实现了"UDDI Programmer's API标准"所描述的编程接口的工具,来将信息加入到UDDI的商业注册中心。UDDI商业注册中心在逻辑上是集中的,在物理上是分布式的,由多个根节点组成,相互之间按一定规则进行数据同步。当一个企业在UDDI商业注册中心的一个实例中实施注册后,其注册信息会被自动复制到其它UDDI 根节点,于是就能被任何希望发现这些Web服务的人所发现。

下一步
正如图1 所示,UDDI 并没有完成所有的发现服务所需要的特性。UDDI 服务的目标是为了在技术上实现服务的发现。借助UDDI所定义的功能,程序或程序员能够定位到合作伙伴所提供的W服务的信息,知道对方是否提供了与自己的技术相兼容的服务,然后按照这些合作伙伴的Web服务所提供的调用标准进行集成并与之相容。企业也可以使用UDDI找到潜在的合作伙伴,或者说,更可能的情况是,从一个以UDDI为数据来源并加入自身增值服务的在线交易市场或搜索引擎中找到潜在的合作伙伴。由于技术上的兼容性是可以被发现的,所以软件提供商也可以借助UDDI 注册中心,在用户安装软件或注册登记时自动配置某种技术连接。

商业发现与UDDI
UDDI 的设计目的是作为对现有的在线交易市场和搜索引擎的补充,为电子商务和服务发现机制提供标准的格式。UDDI 规范中没有直接涉及到具体的商业发现流程,例如找出一个以某一个给定的价格或在某一特定区域内的提供某种特定的产品或服务的企业。高级的发现特性需要买方和卖方更进一步的合作与设计。UDDI只是为定义这些上层应用提供了基础。


图 3

图3 显示了UDDI 的技术发现层和商业发现层上的集成的或专用的搜索机制之间的关系。目前,在线市场和搜索引擎被用来完成这个功能,使用UDDI 分布注册中心集群中的注册信息可以被利用于它们之间的集成,并促进它们自身的发展。

进一步的工作
UDDI 工作小组正在计划对规范草案进行扩展,加入技术发现以外的内容。将来的特性将包括:对产品或服务进行定位的能力;定义Web服务的实现模式;提供对商业组织、团体和贸易集团的分层结构进行管理的能力。所希望的目标是,针对B2B(商家到商家)和M2M(市场到市场),为Web服务的互操作能力提供的一个公共规范。

本文档的其余部分将从技术角度概述UDDI发现服务和规范的各种特性。





回页首


技术概述

统一描述、发现和集成协议(UDDI)标准包括了SOAP消息的XML Schema和UDDI规范API的描述。它们两者一起建立了基础的信息模型和交互框架,具有发布各种Web 服务描述信息的能力。

四种信息类型
UDDI 注册使用的核心信息模型由XML Schema 定义。使用XML 是因为它提供了平台无关的数据描述并很自然的描述了数据的层次关系。而选择XML Schema 是因为它支持丰富的数据类型,便捷的描述方式及其按信息模型对数据进行验证的能力。

UDDI XML Schema 定义了四种主要信息类型,它们是技术人员在需要使用合作伙伴所提供的Web 服务时必须了解的技术信息。它们是:商业实体信息、服务信息、绑定信息和服务调用规范的说明信息。


图 4

如图4 所示,层次信息与关键的XML元素名被用于描述与发现Web服务的相关信息。(请参阅 附录A,其中给出了完整的UDDI信息模型。)

商业实体信息:businessEntity 元素
许多合作伙伴希望能准确地定位到你提供的服务的相关信息,并把这些信息作为了解你们企业的开始。技术人员、程序员或应用程序希望知道你的企业名称和一些关键性的 标识(注释1) ,以及那些可选的分类信息和联络方法等。支持对UDDI 商业注册的商业信息发布和发现的核心XML 元素被包含在 "businessEntity" (注释2) 结构中。这个结构是商业机构专属信息集的最高管理者,位于整个信息结构的最上层 (注释3)。

所有"businessEntity"中的信息支持"黄页"分类法。因此可以执行这样的搜索,如可以定位属于某个行业分类或提供某种产品的企业,也可以是定位处于某个地域范围内的企业。

服务信息:businessService元素和bindingTemplate元素
"绿页"数据是Web 服务的技术和商业描述,是businessEntiry 的子结构。在这一层次,定义了两个结构:businessService 和bindingTemplate 。businessService 结构是一个描述性的容器,它将一系列有关商业流程或分类目录的Web 服务的描述组合到一起。其中,一个可能的商业流程的例子是一组相关的Web 服务信息,包括采购服务、运输服务和其它的高层商业流程。

这些businessService的信息集合可以再次加以分类,使Web应用服务的描述可以按不同的行业、产品、服务类型或是地域划分来进行。

对于每一个businessService,存在一个或多个Web 服务的技术描述。这些技术描述包括应用程序连接远程Web 服务并与之通讯所必须的信息。这些信息包括Web应用服务的地址、 应用服务宿主 (注释4) 和调用服务前必须调用的 附加应用服务 (注释5) 等。另外,通过附加的特性还可以实现一些复杂的路由选择,诸如 负载平衡 (注释6) 等。 杂凑集合 (注释7) ,组成了类似指纹的技术标识,用来查找、识别实现了给定行为或编程接口的Web 服务。 (注释8) 等。在我们的例子中,在bindingTemplate中可以得到指向描述订单服务的关于调用规范的信息的tModel引用。这个引用本身可以被看作是提供这项Web 服务的公司的承诺,承诺他们已经实现了一个与所引用的tModel 相兼容的服务。通过这种方式,很多公司可以提供与该调用规范相兼容的Web 服务。 (注释9) 并保存留待以后使用。 (注释10),不过所有的签署协议的公共的UDDI注册中心操作入口站点都需要满足规定协议中定义的最小安全规范以提供类似的安全机制。

规范描述的指针和技术标识
调用一个服务所需要的信息是在bindingTemplate的结构中定义的,这在前面一节中已经阐述了。不过一般来说,仅知道Web服务所在的地址是不够的。例如,如果我知道我的合作伙伴提供一个Web服务来让我下订单,同时也知道这个服务的URL,不过如果不知道一些具体的信息,如订单的具体格式,应该使用的协议,需要采用的安全机制,调用返回的响应格式等,那样的话,通过Web服务将两个系统集成起来仍然是非常困难的。

当一个程序或是程序员需要调用某个特定的Web服务时,必须根据应用要求得到了足够充分的调用规范等相关信息,以使调用被正确地执行。因此,每一个bindingTemplate元素都包含一个特殊的元素,该元素包含了一个列表,列表的每个子元素分别是一个调用规范的引用。这些引用作为一个标识符的

在我们的订单例子中,接受订单的Web 服务提供了一套定义良好的处理方法,当然前提是格式正确的信息以正确的方式被送到了正确的地点。这项服务的UDDI 注册将包括这些内容:用于描述商业合作伙伴的信息条目,描述订单服务的逻辑服务的信息条目,描述订单服务技术调用规范的bindingTemplate信息条目,其中bindingTemplate信息条目包含了服务的URL 和一个tModel引用 。

实际上,这些引用是访问服务所需要的关键的调用规范信息。被称为"tModel "的数据项是关于调用规范的元数据,它包括服务名称,发布服务的组织以及指向这些规范本身的URL指针

程序员API
UDDI规范包括Web服务的接口定义,使得能通过编程实现对UDDI注册中心的信息访问。程序员API 规范(Programmer's API Specification)文档详细定义了程序员API ,下面只是关于API 的简单讨论。

API 分为两个逻辑部分:查询API 和发布API 。查询API 又分为两个部分:一部分被用来构造搜索和浏览UDDI 注册信息的程序,另一部分在Web服务出现错误时使用。程序员可以利用发布API创建各种类型的工具,以直接与UDDI注册中心进行交互,便于企业技术人员管理businessEntity 或tModel 结构的发布信息。

构建于SOAP之上
简单对象访问协议(SOAP)是W3C 草案,描述了一种使用XML 和HTTP 进行信息传送和远程过程调用的方法。包括IBM 、Microsoft 、DevelopMentor 和Userland Software在内的多家公司向W3C 提交了该草案,其中一个目的就是在Internet上对RPC (简单消息)协议进行标准化。目前看来,草案所描述的规范对定义Web 服务非常有效。因此,在UDDI技术开发中合作的多家公司决定将UDDI API 建立在SOAP 规范之上。在API规范的附录中定义了UDDI 注册中心的操作入口站点应该怎样使用SOAP 和XML 。

UDDI程序员API 规范文档中定义的所有API 调用都是同步的,而且所有分布的UDDI 注册中心的操作入口站点都支持程序员API 规范中定义的全部API 。

查询API
查询API包含两类调用,使程序能快速地定位候选商业实体、Web服务及其调用规范,然后在最初调用获得的初始信息的基础上,获得进一步的相关信息的细节。这类以find_xx命名的API提供了多种搜索标准,从而能对注册中心中的数据进行广泛地搜索。另一方面,如果事先已经知道所需数据的关键字,则可以通过直接调用get_xx API得到相应的结构数据(如:businessEntity、businessService、bindingTemplate、tModel)。

UDDI调用模型
每一个独立发布的Web服务都是使用一个bindingTemplate结构来建模的。对这个Web服务的调用通常通过缓存bindingTemplate 数据来实现。注意到这一点后,在你准备编写调用某种Web 服务的程序时,该如何使用UDDI 就很清楚了。下面列出了基本步骤:

  1. 编写调用远程Web 服务的程序时,程序员使用UDDI 商业注册中心(通过使用Web界面或其它基于查询API 的工具)来定位businessEntity 信息,这些信息是由(或为)提供该Web 服务的企业注册的。
  2. 程序员可以进一步获得更详细的businessService信息,或是得到一个完整的businessEntity结构。因为businessEntity结构包含了有关已发布的Web服务的所有信息,因此程序员只需简单地选择一个bindingTemplate
  3. 基于Web服务在bindingTemplate的tModel中提供的调用规范的相关信息,程序员可以按照该Web服务的调用规范编写程序。
  4. 在运行时,程序可以按需要使用已保存下来的 bindingTemplate的信息来调用Web服务。


一般说来,只要远程Web 服务和调用它的程序都准确的实现了必要的接口(按照在tModel 中所引用的调用规范),对远程服务的调用就一定会成功。下面将就错误和恢复问题进行详细讨论。

远程Web服务调用失败后的恢复
在分布式的UDDI注册中心中维护Web服务的信息的一个主要好处是,是获得为技术人员提供的"自我服务"功能。上一节中,已经给出了程序员使用UDDI注册中心中的信息的大致步骤,我们还可以得到更多的好处。这些通过使用UDDI注册中心的操作入口站点来维护注册信息所带来的好处非常明显地体现于灾难恢复的情况下。

商业实体使用Web服务同他们的合作伙伴进行交易的时候,必须能够处理通讯故障或一些其它的问题。一个关键问题是无法预计、检测和恢复在合作伙伴的远程系统中出现的错误。即使是由于夜间备份或是维护所引起的临时存储空间溢出这样的问题,在Web服务中都变得非常地棘手。

另一方面,如果你的公司使用直接的Web 服务连接,你必须非常重视灾难恢复以及能否将所有与商业合作伙伴的交易迁移到一个备份系统中去等问题。

为了解决这些"服务质量"问题,UDDI 定义了一个方法使用缓冲存诸bindingTemplate信息来进行具体调用。当发生调用失败的时候,使用UDDI 注册中心中的最新信息来刷新缓存信息。具体过程是这样的:

  1. 准备调用Web 服务,缓存必需的bindingTemplate 数据以备运行时使用。
  2. 在调用一个远程Web服务的时候,使用从UDDI 注册中心获得的,被缓存的bindingTemplate 数据。
  3. 如果调用失败,使用bindingKey的值和get_bindingTemplate API调用得到此Web服务的bindingTemplate的最新副本。
  4. 把新的数据和原来的数据进行比较,如果是不同的,使用新的数据并重试刚才失败的调用操作。如果重试成功,则将新的数据更新到缓存中。


此外,当企业需要将调用重定向到新地址或是备份系统时,他们只需要启动备份系统并在binding Template中将服务地址更新。这种方法称之为"失败重试",它的效率比在每次调用前刷新bindingTemplate 数据的方式要高。

发布API
发布API包括四个save_xx 函数和四个delete_xx 函数,每个对应于一个UDDI主要结构(businessEntity,binsinessService,bindingTemplate,tModel)。一旦得到授权,一个独立的机构可以注册任意数量的businessEntity 或tModel信息,也可以修改原先发布的信息。API 设计模型很简单:可以更改特定的相关信息,也可以使用save功能来保存新信息。要删除整个结构则可以调用delete功能。详细信息请参见程序员API 规范(Programmer's API Specification)。

安全:识别与授权
使用UDDI的发布API的关键原则是只允许被授权的用户进行发布或修改UDDI商业注册中心中的数据。每一个分布式的UDDI商业注册中心维护一张唯一的授权用户列表,并跟踪所有用户创建的businessEntity或tModel数据。只有信息的创建者才允许对该信息进行更改或删除。

每个UDDI 商业注册中心的实例被称为一个操作入口站点(Operator Site),操作入口站点被允许定义他自己的用户授权机制





回页首


其它信息

关于UDDI Schema 和UDDI 程序员API 规范(UDDI Programmer's API Specification)的详细信息,请参见uddi.org 站点提供的相关文档。

这些规范以一组相互链接的HTML 文档形式发布,其中为提供的相关子服务定义了一些特殊的tModel。这些独立的tModel引用实际上是整个规范中关于概览、API调用和附录信息的概览信息的共享链接。

供打印的Microsoft Word 和PDF 格式的规范文档也在uddi.org提供下载。





回页首


附录A:UDDI信息模型

下图描述了构成UDDI信息结构的各个核心信息元素之间的关系







回页首


资源

这里给出了许多规范、文档参考和有用的信息的链接,这些信息可以帮助你理解本技术白皮书。

注释 注释1: 商业实体标识可以包括D&B号,税号,或是其它一些能够让合作伙伴唯一标识一个商业实体的信息类型。
注释2:参见UDDI XML schema - http://www.uddi.org/schema/uddi_1.xsd
注释3:复杂的商业实体信息应该注册在独立的businessEntity中。
注释4:其它公司可能是该应用服务宿主的用户,这一般是基于费用考虑的。交易市场就是一个很好的例子,使得各个商业实体并不一定需要建立自己的在线站点,就可以进行电子商务。
注释5:软件包是这种需求的一个很好的例子。一个软件包的安装可能需要先和一个服务建立连接并得到一些必要的初始参数。
注释6:主机重定向的特性使得主从服务器的能力都能被充分利用到。参考UDDI程序员API标准中的关于重定向的附录。
注释7:杂凑集合在这里意味着只要知道一个特定调用规范的主键值,就等同于了解了兼容该规范的Web服务。
注释8: 注意: tModel并不包含实际的规范。UDDI定义了一个利用URL和Web服务优点的框架,使每个组织能够集中地维护自己的调用规范。可以通过对键值的访问来确定一个具体的实现是否是基于给定的调用规范的。
注释9:通过使用查询API find_xx,一个与UDDI兼容的浏览器可以按用户的需要,显示更多或更少的搜索信息的细节。当信息被定位以后,get_xx调用就可以得到这四个UDDI主要的XML结构之一的详细信息。
注释10:基于UDDI规范的独立实现不可以被强制要求遵循某些特别的约定或需求。因此,如果你对安全性或是信息访问控制策略有疑问的话,需要和实现者进行协商。


作者简介

 

阮文骏: UDDI-China首批成员,上海得易电子商务技术有限公司系统架构师。将于2001年6月获复旦大学计算机科学硕士学位,曾在中国XML技术研讨会(北京)发表XML技术论文。专长于基于XML技术,软件工程,同时对管理信息系统及企业管理科学等比较擅长。


 

柴晓路 : 上海得易电子商务技术有限公司( DealEasy)首席系统架构师、XML技术顾问。2000年获复旦大学计算机科学硕士学位,曾在国际计算机科学学术会议(ICSC)、亚太区XML技术研讨会(XML Asia/Pacific'99)、中国XML技术研讨会(北京)、计算机科学期刊等各类国际、国内重要会议与期刊上发表论文多篇。专长于基于XML的系统集成和数据交换的技术研究,同时对数据库、面向对象技术及CSCW等技术比较擅长。2001年加入 UDDI Advisor Group,参与了UDDI Specification V2的开发。目前在与UDDI.org合作筹备 UDDI-China.org,后者将在2001年6月进行技术中心站点发布。

 
【Boost5】Boost变换器的输入电容 节点的电流有3个,一个是来自电源输入的,由于我们把Vin看成理想电源以及线路的电感的存在,它可以近似看作是恒定的电流源Iin,一个是流向输入电容Cin的电流Icin,另外一个节点是电感L电流IL。电容电流波形在整个开关周期内的平均值为0,充电和放电在一个周期中各占1/2,在图中充电部分面积和放电部分面积相等,那么在充电或放电的电荷量Q=I*t,从图中可以看出,在一个周期内电容电流变化量是ΔIL,那在电容在充电1/2T周期中电流的变化量是1/2ΔIL。输入电容上的ESR也会随着电流变化,影响输入电压的变化。 阅读详情

相关推荐

金融科技创新中人工智能的应用:8篇优质论文精选(含2023)

随着科技的飞速发展,金融领域正经历着前所未有的变革。在这个过程中,人工智能技术发挥着越来越重要的作用。为了深入探讨金融人工智能的研究和应用,享享特地整理了几篇金融人工智能方面的论文,大家可以看一下金融人工智能方向最新的研究成果!面向金融领域的大型语言模型本文介绍了BloombergGPT,一个基于广泛金融数据训练的500亿参数模型。基于彭博(Bloomberg)广泛数据来源,建立了一个基于彭博数据的3630亿令牌数据集,并结合了额外3450亿通用数据令牌。

2401_82426425的博客 3210

UDDI注册信息的数据模型

原文地址:http://hi.baidu.com/pennyfeifei/blog/item/bbccee1f31039860f624e4fd.html 本文就UDDI注册信息的数据模型进行了较深入的介绍,主要详细介绍了商业实体信息:businessEntity元素, 商业

fckkfc的专栏 988

2024年上半年网络工程师下午真题及答案解析

位于MPLS域边缘、连接其他网络的LSR称为( 3 ),区域内部的LSR称为核心LSR(CoreLSR)IP报文进入MPLS网络时,MPLS入口设备分析IP报文的内容并为其添加合适的标签,所有MPLS网络中的LSR根据标签转发数据,当该IP报文离开MPLS网络时,标签由出口LER弹出。LSP的出口LER称为( 6 )。某高校网络拓扑如下图所示,两校区核心(CORE-1、CORE-2),出口防火墙(NGFW-1、NGFW-2)通过校区间光缆互联,配置OSPF实现全校路由收敛,两校区相距40km。

bsefef的博客 2471

【SOAP-WebService系列】历史产物UDDI是什么、长什么样,以及UDDI的发展过程、退出原因

主要参考资料 微软文档:使用 UDDI 注册 Pencil-Selling XML Web 服务 todo 文中提到的webservice,均是传统(原始)webservice。不是广义上的webservice,详情可看:xxx链接xxx UDDI是什么 UDDI是一个技术,更贴切的说应该是一个目录服务,或者一个项目、计划、运动 UDDI是统一描述、发现和集成(Universal Description, Discovery, and Integration)的缩写 UDDI是一种用于描述、发现、集.

无数_Mirage的博客 2926

三菱FX5U运动控制(步进)

三菱FX5U脉冲定位控制,原点回归,相对定位,绝对定位,运动控制案例。

weixin_55762091的博客 1万+

Snort源代码编译 _ 采坑之旅(for Windows VS2015)

    系统环境:Windows7 sp1 x64     编译环境:VS2015 SP1     Snort版本:2.9.12     daq版本:2.0.6     Snort官网:https://www.snort.org/downloads#snort-downloads 背景     最近需要实现一个类似网络防火墙的产品,主要参考Snort源码,先花了点时间简单读了下网上比较流行的《...

magictong的专栏 8888

UDDI基础知识

一、什么是UDDI UDDI基于一组常见的行业标准,包括HTTP,XML,XML Schema和SOAP,为基于Web服务的软件环境提供了一个可互操作的基础基础结构,用于可公开使用的服务和仅在组织内部公开的服务。 仅当潜在用户发现足以允许其执行的信息时,Web服务才有意义。 UDDI的重点是定义支持描述和发现服务的一组服务。 商业,组织和其他Web服务提供商 ...

XD的学习笔记 2675

Microsemi Libero使用技巧11——CoreUARTAPB RX管脚分配时不显示

调用串口IP核CoreUARTAPB,并例化到顶层设计,发现UART_RX管脚在进行管脚分配时没有显示出来,最后发现是CoreAPB3总线IP核配置不对导致,改为如下配置后正常。

whik1194的博客 757

UDDI初了解

在文章内容开始之前,先来看看一张图:从上面这个图看得到UDDI好像就是一个中转站,来满足使用者和生产者之间的供求关系。那传输的信息是什么?UDDI是怎么实现传输的?下面这篇文章就会给出解释。

gls_nuaa的博客 1431

107.在 Vue 3 中使用 OpenLayers 实现视图联动功能

是一个非常强大的 Web 地图渲染库,支持多种地图数据格式和交互操作。在 Vue 3 中,我们可以利用。绑定到真实的 DOM 元素上,我们就可以用它们来初始化 OpenLayers 地图。来封装和管理 OpenLayers 地图的状态,从而更高效地开发地图应用。,即两个地图窗口共享同一个视图(View),从而实现同步缩放、拖动等操作。这可以确保 Vue 组件销毁时,OpenLayers 也正确销毁地图实例。,并且它们会同步缩放和拖动,达到地图联动的效果。这样,无论你拖动哪个地图,另一个都会同步变化。

小彭的博客 1938

Python 安装 PyTorch(GPU)详细教程

本章教程,介绍如何安装PyTorch GPU版本的具体教程。

猿小白的博客 1618

为什么UDDI会成功?即使缄默无闻

为什么UDDI会成功?即使缄默无闻柴晓路2001-5-15 本文最初由 IBM developerWorks 中国网站发表,其网址是http://www.ibm.com/developerWorks/cn/到2001年5月份,统一描述、发现和集成协议(UDDI,Universal Description, Discovery and Integration)标准已经诞生了有

fennivel的专栏 1448

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

WebService基本概念

    WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。这种技术允许网络上的所有系统进行交互。随着技术的发展,一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。 Web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。这些服务会根据用户的身份,地点以及产生请求的原因来改变不

李永亮的专栏 1084

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

J2ee与ASP.NET平台电子企业的两种构想(3)

 让我们根据图2,观察AustinKayaks和MoneyBroker 之间的电子协作。在使用浏览器工作的AustinKayaks客户(1)访问AustinKayaks URL,然后要求购买一个皮艇时,电子协作开始。请求作为HTTP请求(2)通过Internet传输。AustinKayaks表示层(3)接收到该请求,该表示层通过该站点使用的任何一种本地协议(4)向商务层发出请求。如果Austi

netyfhome的专栏 1021

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

WebService的基本概念

WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。  这种技术允许网络上的所有系统进行交互。随着技术的发展,一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。 Web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。这些服务会根据用户的身份,地点以及产生请求的原因来改变不同的处理

林荣章的博客 568

WebService学习

WebService2.1 WebService的基本概念WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。这种技术允许网络上的所有系统进行交互。随着技术的发展,一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。Web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动

NO1陈刚-刚子扯谈 575

WS基础知识

1 WebService的基本概念 WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。 这种技术允许网络上的所有系统进行交互。随着技术的发展,一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。 Web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。这些服务会根据用户的身份

A梦先生的专栏 1046

Sun ONE 白皮书

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 516

web service

21. UDDI——统一查找、描述以及综合答:1) UDDI提供了一种找到可用Web service的方式;    2) UDDI提供了一个全球的、平台无关的、开放式框架,使得商业应用能:       . 相互查找;       . 定义它们通过Web交互的方式;       . 在一个全球注册场所共享信息;    3) 在Web上存在三种开放的UDDI注册场所, 由IBM、Microsoft和H

mmm331684897的专栏 346

WebService的基本概念:java webservice,什么是webservice

WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。   这种技术允许网络上的所有系统进行交互。随着技术的发展,一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。 Web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。这些服务会根据用户的身份,地点以及产生请求的原因来改变不同的

曹胜欢 6300

java webservice是什么_WebService的基本概念:java webservice,什么是webservice

WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。这种技术允许网络上的所有系统进行交互。随着技术的发展,一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。 Web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。这些服务会根据用户的身份,地点以及产生请求的原因来改变不同的处理,用...

weixin_32589877的博客 565

Java vs C# —— J2EE与.NET平台关于电子企业的两种设想(3)

让我们根据图2,观察AustinKayaks和MoneyBroker 之间的电子协作。在使用浏览器工作的AustinKayaks客户(1)访问AustinKayaks URL,然后要求购买一个皮艇时,电子协作开始。请求作为HTTP请求(2)通过Internet传输。AustinKayaks表示层(3)接收到该请求,该表示层通过该站点使用的任何一种本地协议(4)向商务层发出请求。如果AustinKa

饮马流花河 761

名词解释

WebService webservice是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。   这种技术允许网络上的所有系统进行交互。随着技术的发展,一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。 Web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。这些服务会根据用户的身份,地点以及产生请...

luozhanzhan的专栏 203

J2EE学习笔记----WebService基本概念

WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。 这种技术允许网络上的所有系统进行交互。随着技术的发展,一个Web服务可以包含额外的指定功能并且可以在多个B2B应用中协作通讯。 Web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。这些服务会根据用户的身份,地点以及产生请求的原因来改变不同的处理...

wodamazi 200

WebService的基本概念(转载)

 WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯<span class="t_tag" onclick="function onclick(){tagshow(event)}">技术。这种技术允许网络上的所有系统进行交互。随着技术的发展,一个Web服务可以包含额外的指定<span class="t_tag"

284
上一篇: 简单对象访问协议(SOAP)
下一篇: Sysbase 的group by的特殊性
baobeiSimple
博客等级 码龄20年 61粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值