xml/schema/wsdl
xml/schema 在看webservice时,牵扯到很多xml的知识,看的一片头疼,不得不硬着头皮系统看了一遍这方面的知识,作为学习笔记记录下自己易混淆的地方…… XML可扩展标记语言(EXtensible Markup Language),是 W3C 的推荐标准,设计宗旨是传输数据和存储数据,而非显示数据。XML 是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。 HTML 被设计用来显示数据。 头部: <?xml version="1.0" encoding="utf-8" ?>
对于xml标签中出现的所有空格和换行,xml解析程序都会当作标签内容进行处理。在xml中,空格和换行都作为原始内容被处理,所以在编写xml文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好” 书写习惯可能要被迫改变,例如下面两段内容是不一样的: <网址>ljfbest.com</网址> <网址> 有些内容不想被解析,可以放在CDATA区里<![CDATA[<it>abc</it>]]> 要约束一个xml文档可以通过dtd或者schema,schema已经成为w3c的标准schema文件本身就是一个xml文件,但扩展名通常为.xsd,一个schema文档必须有根节点schema编写了一个schema文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,在schema技术中有一个专业术语来描述这个过程,即把schema文档声明的元素绑定到一个名称空间上,以后xml文件就可以通过这个URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束,看下面一个例子: ai.xsd <?xml version="1.0" encoding="utf-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ljfbest.com" elementFormDefault="qualified"> <xs:element name="书架"> <xs:complexType> <xs:sequence maxOccurs="unbounded"> <xs:element name="书名" type="xs:string" /> <xs:element name="作者"> <xs:complexType> <xs:sequence maxOccurs="1"> <xs:element name="fname" type="xs:string" /> <xs:element name="lname" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="售价" type="xs:float" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 2行:引入schema的命名空间,並且加入前缀xs,如果不加xs的话,文档中的xs:都要刪去 --> 3行:为该文档指定命名空间--> 4行:unqualified,则无须通过命名空间前缀限定目标命名空间的元素, qualified,则必须通过命名空间前缀限定目标命名空间的元素。 然后下面的内容就是对xml约束内容了,主要注意以下的点 简单元素:只含有文本的XML元素,不可以含有其他元件或属性定义简明元素的语法为: <xs:element name="xxx" type="yyy"/> 属性:简单的元素没有属性,当元素含有属性时,它会被认为是复合元素,但属性本身总是被声明为简单类型。定义一项属性的语法是: 复合元素:包含其他元素或属性 其它细节在schema文档中均有详细介绍。下面来看如何在xml中引入该schema…… <?xml version="1.0" encoding="utf-8" ?> <xi:书架 xmlns:xi="http://ljfbest.com" xs:schemaLocation="http://ljfbest.com ai.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"> <xi:书名>java</xi:书名> <xi:作者> <xi:fname>Jianfeng</xi:fname> <xi:lname>Li</xi:lname> </xi:作者> <xi:售价>23.00</xi:售价> </xi:书架> 2行:引入书架和的命名空间,并且指出xsd所在位置 wsdl 文档介绍 WSDL 网络服务描述语言 (Web Services Description Language),使用 XML 编写的文档,可描述某个 Web service,它可规定服务的位置,以及此服务提供的操作(或方法)。WSDL文档只是一个Web Service相关特征、规范的定义集,在根部有一个“definitions"元素,其中包含一些定义。具体来说,服务使使用以下七个主要元素来定义的: ?Types - web service 使用的数据类型,一般使用XML Schema中的类型系统。 ?PortType - 指明服务器接口,并且通过operation绑定in(参数)/out(返回值)消息,它可描述一个 web service可被执行的操作,以及相关的消息。 看看下面的一段WSDL文件: <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.ljfbest.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service.ljfbest.com/" name="MyServiceImplService"> <types> <xsd:schema> <xsd:import namespace="http://service.ljfbest.com/" schemaLocation="http://localhost:8089/na?xsd=1" /> </xsd:schema> </types> <message name="add"> <part name="parameters" element="tns:add" /> </message> <message name="addResponse"> <part name="parameters" element="tns:addResponse" /> </message> <portType name="IMyService"> <operation name="add"> <input message="tns:add" /> <output message="tns:addResponse" /> </operation> </portType> <binding name="MyServiceImplPortBinding" type="tns:IMyService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> <operation name="add"> <soap:operation soapAction="" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> <service name="MyServiceImplService"> <port name="MyServiceImplPort" binding="tns:MyServiceImplPortBinding"> <soap:address location="http://localhost:8089/na" /> </port> </service> </definitions> xml文档第一句:definitions--WSDL文档的根元素,该元素的属性指明了wsdl文档的名称,文档的目标名字空间,以及WSDL文档应用的名字空间的速记定义。它指明了此Web Service的名称为:MyServiceImplService。然后找到名为“MyServiceImplService”的service具体定义如下所示: <portType name="IMyService"> <operation name="add"> <input message="tns:add" /> <output message="tns:addResponse" /> <message name="add"> <types> <xs:schema xmlns:tns="http://service.ljfbest.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://service.ljfbest.com/"> <xs:element name="add" type="tns:add" /> <xs:element name="addResponse" type="tns:addResponse" /> <xs:complexType name="add"> <xs:sequence> <xs:element name="arg0" type="xs:int" /> <xs:element name="arg1" type="xs:int" /> </xs:sequence> </xs:complexType> <xs:complexType name="addResponse"> <xs:sequence> <xs:element name="return" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:schema> 这表明add操作是一个 int add(int n)的方法。其中上述的类型均遵循xsd的定义。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |