此系列是基于soap1.1版本。
一、 xml概述
在为soap寻找表述方法时,这个标准的制定者们其实有很多种选择。但他们最终选择了尽可能利用现有的技术,把必要的新术语数量压缩到最少。为了描述soap信息的内容,这些作者们选择了xml语言。它的全称是“extensible Markup Language”,可扩展标记语言。
xml语言包含的功能非常多,比soap用到或者需要用到的要多的多。比如说,在soap 标准
v1.1的第三节“与xml语言的关系”部分有说“在soap消息中
不得包含文档类型说明(Document Type Declaration,
DTD)”。在soap消息中
不得包含处理指令(Processing Instructions)。就soap采纳的xml语言标准的有关内容来看,它定义的是soap功能的使用方法。我们很快就能体会到这一决定的英明之处:因为开发人员在使用soap的时候不需要拥有全功能的xml语法分析器,所以用soap来实现某个解决方案的工作很容易进行。为了理解soap,我们先要弄懂以下几个概念:
1.统一资源标识符(Uniform Resource Identifiers, 简称URI)。
2.xml语言基础。
3.xml格式定义。
4.xml名字空间。
5.xml属性。
1.1 统一资源标识符
为了访问因特网上某个独一无二的资源项目,必须知道如何从众多的对象中把它标识出来。统一资源描述符(URI)就是给各个资源起的名字。URI的格式:
<schema>:<schema-specific-part>
schema-specific-part部分往往还包含一些斜线字符(/),这些斜线字符表示的是路径中的层次结构。
1.1.1 统一资源定位器(URL)
大家最为熟悉的URI要算是统一资源定位器(Uniform Resource Locator, URL)了,他就是我么通常所说的URL地址。URL地址也要遵守URI标识符的地址表示方法。
URL地址中的schema-specific-part部分格式是这样的:
//<user>:<password>@<host>:<port>/<url-path>
上述语法中各组成元素的含义如下所示:
1.user:目标地址处的用户名
(可选项)。
2.password:分配给用户user的密码
(可选项)。
3.host:某个网络主机的因特网协议地址或完整域名
(必选项)。
4.port:用来建立连接时使用的端口号。大部分协议都有默认的端口号,比如http在缺省时将使用80端口进行通信
(可选项)。
5.url-path:访问某个特定资源的详细路径。紧跟在主机名或端口号后面的
斜线字符(/)不是url-path的组成部分。
1.1.2 统一资源名字(URN)
与无处不在的url地址相比,大多数web用户对统一资源名字(Uniform Resource Name, URN)的熟悉程度要差很多。URN与URL的不同之处在于前者不会被解析成一个独一无二的物理地点。URN是一种永久性的资源标识符(不像URL地址那样会有一些动态的路径信息),他们允许来自某个名字空间的其他类型标识符被映射到URN空间里来。因此,URN的语法提供了利用现有的各种协议对字符数据进行分析和编码的能力。URN的构成规则也遵守URI的通用性规定,它的常见格式如下:
<URN>::=”urn:”<NID>”:”<NSS>
在URN名字里要用字符串”urn:”来表示这是一个URN名字。NID是”Namespace ID”的缩写,NSS是”Namespace-Specific String”的缩写,给出的是与NID代表的名字空间有关的字符串。在遇到URN名字的时候,我们要根据NID的值来决定如何解释NSS字符串。在读取或使用URN名字的时候,要记住前导字符串”urn:”以及<NID>内容里的字母是分大小写的。
URL和URN是URI两种最常见的用法。后面我们还会看到URI的另外一种用法:xml Namespace(xml命名空间)。
1.2 xml基础
xml语言是在1996-1997年间进入人们视线的。下面是xml代码示例:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>framework</artifactId>
<groupId>com.**.framework</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
</project>
即使你从没度过xml程序代码,这个例子也不是很难懂。我们可以通过这段代码看出xml文档的一些编写规则。
(1)第一行是一条
处理指令,作用是声明这份文档使用的xml版本和编码格式,文档中的这条语句并非不可或缺,但最好还是把它加载里面。
(2)xml文档必须有一个
封闭元素(版本信息不能算作是一个封闭元素)。在例子中project把整个文档包括在了它的起始标记和结束标记之间。它还有几个子元素,子元素又可以嵌套定义。
(3)这段代码中的所有单词都不是xml的关键字。
(4)注意文档里标记不要拼错了。即使拼错了,xml语法分析器也会接受这份文档,但它不会正确解析你的意图了。如果我们想让xml语法分析器为我们做一些检查工作,并且只读取正确的数据结构,那可以加上一个文档类型说明(Document Type Declaration, DTD)或者一个xml大纲(xml schema)。这里不就DTD进行讨论了,soap技术规范的第三小节也已经明确规定“在soap信息中不得包含文档类型声明”。
1.3 xml大纲
xml大纲(xml schema)比DTD的描述能力更强。这两种事物都提供了对一个xml元素的结构进行定义的方法。虽然格式定义和DTD都允许对元素进行定义,但只有格式定义允许给出数据的类型信息。xml数据是
基于文本的,它会用字符”4”而不是”0100”这样的二进制形式来表示数字4(xml允许在信息中对二进制数据进行编码,这样使我们能够把图像数据等内容夹在一条xml信息里发送出去)。
下面给出实例,感受下大纲优于DTD的事实。
一个简单的DTD有一些包含其他元素或字符数据的元素。最简单的元素声明是这样的:给出元素的名字,再把元素的内容定义为字符数据。如下所示:
<! ELEMENT element-name (#PCDATA)>
一个元素可以由其他元素组合而成。如果一个元素不多不少只包含有某个给定元素的一个实例,我们就这样定义:
<! ELEMENT parentElement (childElement)>
<! ELEMENT childElement (#PCDATA)>
如果parentElement元素中可能包含零个或多个childElement元素,我们就用一个星号(*)来定义,如下:
<! ELEMENT parentElement (childElement *)>
<! ELEMENT childElement (#PCDATA)>
另外,还可以在一个DTD里指示出元素的组合情况,比如parentElement元素里包含有两种不同数据片段的情况,如下所示:
<! ELEMENT parentElement (childElement1, childElement2)>
<! ELEMENT childElement1 (#PCDATA)>
<! ELEMENT childElement2 (#PCDATA)>
具体示例,比如图书馆里有很多书,书又有书名,作者,版权等属性,那定义的DTD文件Library.dtd可以是:
<! ELEMENT Library (Book*)>
<! ELEMENT Book (Title, Author*, Copyright)>
<! ELEMENT Title (#PCDATA)>
<! ELEMENT Author (#PCDATA)>
<! ELEMENT Copyright (#PCDATA)>
Library是由零个或多个Book类型的元素组成的。每个Book又是由一个Title元素,零个或多个Author类型的元素和一个Copyright元素组成。Title,Author和Copyright这三种元素都包含着字符数据。我们使用这个DTD来检查xml内容,可以定义xml文档:
<?xml version=”1.0”?>
<!DOCTYPE Library PUBLIC “.” “Library.dtd”>
<Library>
<Book>
<Title>Green Eggs</Title>
<Author>Dr.Seuss</Author>
<Copyright>1957</Copyright>
</Book>
<Book>
<Title>Windows</Title>
<Author>Scott</Author>
<Copyright>2000</Copyright>
</Book>
</Library>
语法分析器在需要对数据的类型进行检查时会
自动加载Library.dtd,并根据它对文档的内容进行检查。这样做的好处是显而易见的,但如果我们还能在“这个元素包含着字符数据”以外给出更多的信息岂不是更好?因为各种理由,W3C最终发布了关于xml大纲的建议稿。下面用xml大纲重写刚才的DTD文档:
<Schema xmlns:xsd =”http://www.w3.org/2001/XMLSchema”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<complexType name=”Book” content=”mixed”>
<element type=”Title”></element>
<element type=”Author”></element>
<element type=”Copyright”></element>
</complexType>
<simpleType name=”Title” content=”textOnly” xsi:type=”string”></simpleType>
<simpleType name=”Author” content=”textOnly” xsi:type=”string”></simpleType>
<simpleType name=”Copyright” content=”textOnly” xsi:type=”integer”></simpleType>
</Schema>
把上面这段代码存为一个xml文件(一般是xsd后缀)。在使用大纲的时候,只需简单地在文档里引用就行了,像下面:
<myLibrary:Library xmlns:myLibrary=”x-schema:http://www.scottseely.com/LibrarySchema.xml”>
<myLibrary:Book>
<myLibrary:Title>Green Eggs</ myLibrary:Title >
<myLibrary:Author>Dr.seuss</ myLibrary:Author >
< myLibrary:Copyright>1957</ myLibrary:Copyright>
</myLibrary:Book>
…
</myLibrary:Library>
大纲和文档都使用了文本“text”。这个字符串的作用是通知语法分析器此文档里使用的变量名属于给定URI指定的名字空间。如果URI以x-schema打头,语法分析器就必须从指定地址加载相应的大纲文件。如果没有其他说明,带有xmlns声明的起始标记及对应的结束标记之间的所有元素都是指定的名字空间的一部分。
关于”xsd:element”的定义可以参考:
http://361324767.blog.163.com/blog/static/1149025252010814104832425/
其中的
nillable的设置曾经困扰过我很久。
1.3.1 数据特征
为了更好地对数据进行定义和类型校验,xml大纲使用了“数据特征(facets)”来定义某个特定的数据类型的特性。一个数据值域空间的每个特性都必须用一个数据特征来定义。而一个“数据值域空间”就是一个给定的数据类型的全体有效数据值的集合。不同的数据类型是通过他们各自的数据特征来区分的。xml大纲文档定义的数据特征又分为两大类:基本特征和非基本特征。
一个基本特征就是某个数据值域空间里的数据值的一个抽象特性,他给出了这类数据值的一个基本特点。数据值的基本特征包括:
1.相等
2.顺序
3.边界
4.势。这是一个集合论的概念。有些值域空间里的值在数量上是有限的,而一些则是无限的。
5.数值
6.长度,最小长度,最大长度
7.式样
8.枚举
9.最大内边界,最大外边界,最小内边界,最大内边界
10.经度
11.数值范围
12.编码方式
13.持续时间
14.周期
1.3.2 数据类型
xml格式定义把数据类型和数据特征结合起来,这就使在格式定义中定义的数据项有了准确的含义。http://www.w3.org/2001/XMLSchema中定义了许多数据类型。
1.4 xml命名空间
在上面已经见过xml命名空间(xml namespaces)的用法了。命名空间的作用简单说来就是对用在一段上下文里的一组变量名进行定义和声明。名字空间可以使用任意URN,但前提条件是这个URN必须是独一无二的。
1.5 xml属性
出现在这本书里的所有xml文档都使用了元素来表示数据。但大家应该知道xml也支持属性概念。元素必须有起始标记和结束标记,属性则不同,他们不需要标记,只要把他们放到元素的起始标记里就行了。
对属性进行声明有三种不同的办法:
1.精心编写的xml,但不包含任何DTD或大纲
2.精心编写的xml,使用一个DTD
3.精心编写的xml,使用一个或者多个大纲。
第一种办法能正常运行,但实用环境中效果并不好,而soap又禁止使用DTD,所以我们就说下第三种方法吧。在xml大纲创建属性的时候,需要使用
attributeType和
attribute这两个关键字。这两个关键字只在大纲所属的名字空间里有意义。
attributeType用来定义某个类型的特性,而attribute则指出该元素类型定义所针对的对象。
为了使用属性对book进行描述,相应的大纲应该是下面这个样子:
<Schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<attributeType name=”title” xsi:type=”string” />
<attributeType name=”name” xsi:type=”string” />
<complexType name=”Author” content=”empty”>
<attribute type=”name” />
<element type=”Author”>
</complexType>
</Schema>
attributeType的完整语法如下:
<attributeType default=”default value”
xsi:type=”type”
xsi:values=”enumerated values”
name=”idref”
required=”{yes|no}” >
default:属性的默认值。
xsi:type:该属性的数据类型。如果选择的是枚举类型,还要天上xsi:value。
name:属性类型的名字。为了对attributeType进行类型检查,必须有一个名字。
required:表明一个包含有attributeType的元素是否必须带有此处定义的属性。
参考资料:
《SOAP:xml跨平台web service开发技术》 美.塞利
分享到:
相关推荐
在C#中使用XML的原因<br><br>1.1 使用XML的原因<br>1.1.1 开放性<br>...相关的标准<br>1.4.4 标准重要的原因<br>1.5 XML如何适应.NET<br>1.5.1 在.NET Framework中使用XML<br>1.5.2 .NET中的XML支持<br>1.6 小结<br...
### HTML、JS、XML、WSDL、SOAP基础知识详解 ...##### 1.... ##### 2....HTML标签是一系列由尖括号包围的关键词,例如`<html>`。这些标签通常成对出现,如`<b>`和`</b>`...接下来的章节将继续介绍XML、WSDL和SOAP的基础知识。
- XML文档必须有一个根元素,包围所有其他元素,如 `<root><child1>...</child1><child2>...</child2></root>`。 - 内容必须在开始和结束标签之间,不能与开始标签直接相邻。 4. XML与数据交换: XML常用于应用程序...
根据提供的信息,我们可以推断出这部分内容与算盘的工作原理及其使用方法有关,并非直接讨论SOAP(简单对象访问协议)及XML跨平台Web服务开发技术。然而,由于明确要求生成的知识点应围绕标题和描述中的内容,即SOAP...
在这个例子中,`<book>`是根元素,包含了书的相关信息,如`<title>`、`<author>`和`<publisher>`。 XML并非直接用于显示在浏览器上,而是需要通过XSLT(Extensible Stylesheet Language Transformations)转换成...
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.common.fwskfp.heb.aisino.com/"> <soapenv:Header/> <soapenv:Body> <ser:orderHandler> <request...
- 嵌套规则:XML元素必须正确嵌套,即开始标签和结束标签配对且顺序正确,如`<book><title>...</title></book>`。 - 标签大小写敏感:XML标签和属性名是大小写敏感的,`<Book>`与`<book>`是不同的。 - 结束标签:...
XML还与其他技术紧密相关,如SOAP(Simple Object Access Protocol)用于创建Web服务,以及XML Schema和DTD(Document Type Definition)用于定义XML文档的结构和数据类型。 总的来说,XML作为一种灵活的数据表示和...
部分着重 <br>介绍.net框架所使用的数据访问、存储技术ado.net以及xml的有关内容; <br>第?部分则着重介绍了使用visual c# .net创建可用于web的应用程序的方 <br>法和相关技术,介绍了soap和web服务。 <br>本书适合...
<SOAP-ENV:Body> <namesp1:KeywordSearchRequest xmlns:namesp1="http://soap.amazon.com"> <KeywordRequest> <keyword>technology</keyword> <sort></sort> <price></price> <page>1</page> <mode>books</...
XML文档由一系列元素组成,每个元素都有其特定的开始标签(<elementname>)和结束标签(</elementname>)。元素可以包含文本内容、子元素或者两者都有。例如,下面是一个简单的XML片段: ```xml <book> <title>XML...
以上就是关于XML的相关知识点介绍。通过这些内容,我们不仅了解了XML的基本概念和语法,还探讨了它的应用场景以及与HTML的区别。XML作为一种重要的数据描述语言,在现代信息技术领域中发挥着不可替代的作用。
### XML基础知识及应用详解 #### 引言 随着互联网技术的迅速发展,数据交换与存储的需求日益增长。可扩展标记语言(XML)作为一种强大的数据处理工具,在数据存储和传输方面展现了巨大潜力。本文旨在深入解析XML的...
about ado ... <br>注意:本文包含以下 Microsoft 知识库文章的补充信息: <br>896358 (http://support.microsoft.com/kb/896358/) MS05-026:HTML 帮助中的漏洞可能允许远程执行代码 <br>890175 ...
例如,HTML可能包含`<html>`, `<head>`和`<body>`等多个根级元素,而XML文档的结构应当类似于`<root><child1>...</child1><child2>...</child2></root>`。 在HTML中,属性可以省略引号,但XML要求所有属性值都必须...
ASP.NET培训资料(课堂视频含笔记)(AJAX,C#,JavaScript,SQL) <br><br>我将不定期发布,直至所有课程完毕<br><br>详细的资料<br>三个月的课程录像+资料笔记(花了一万六千块的培训资料超值【19G的经典内容】<br>认真...
<br> 第4部分 Web服务与项目开发 <br> 第9章 基于XML的.NET Web服务,介绍了.NET Web服务的概念,如何创建和使用Web服务,SOAP的基本概念及用法,以及数据服务的创建方法。 <br> 第10章 软件项目的设计与实践,...
<br>针对ASP.Net2.0、ADO.Net2.0、Web服务(Web Service)、HTML、XML、JavaScript、水晶报表(Crystal Report)、Ajax、Web2.0等知识点先后安排2或3个小型项目:1。基于Web的文件管理系统(File Management System)...
<title>XML指南</title> <author>John Doe</author> <year>2023</year> </book> ``` 在这个例子中,`<book>` 是根元素,它包含了三个子元素:`<title>`、`<author>` 和 `<year>`。 XML文档必须遵循一定的规则,...