詳細介紹soap相關的xml知識
一、 xml概述
在為soap尋找表述方法時,這個標準的製定者們其實有很多種選擇。選擇了xml語言。標準v1.1的第三節「與xml語言的關係」部分有說「在soap訊息中不得包含文檔類型說明(
Document Type Declaration, DTD)」。 soap訊息中不得包含處理指令(Processing Instructions)。因為開發人員在使用soap的時候不需要擁有全功能的xml語法分析器,所以用soap來實現某個解決方案的工作很容易進行。 #1.統一資源識別碼(Uniform Resource Identifiers, 簡稱URI)。 ##屬性。 。線字元(/),這些斜線字元表示的是路徑中的層次結構。 Uniform Resource Locator, URL)了,他就是我麼通常所說的URL位址。
//<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:”來表示這是URN名字。 NID是”Namespace ID”的縮寫,NSS是”Namespace-Specific
String
”的縮寫,給出的是與NID代表的名字空間有關的字串。在遇到URN名字的時候,我們要根據NID的值來決定如何解釋NSS字串。在讀取或使用URN名字的時候,要記住前導字串”urn:”以及
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声明的起始标记及对应的结束标记之间的所有元素都是指定的名字空间的一部分。
1.3.1 数据特征
为了更好地对数据进行定义和类型校验,xml大纲使用了“数据特征(facets)”来定义某个特定的数据类型的特性。一个数据值域空间的每个特性都必须用一个数据特征来定义。而一个“数据值域空间”就是一个给定的数据类型的全体有效数据值的集合。不同的数据类型是通过他们各自的数据特征来区分的。xml大纲文档定义的数据特征又分为两大类:基本特征和非基本特征。
一个基本特征就是某个数据值域空间里的数据值的一个抽象特性,他给出了这类数据值的一个基本特点。数据值的基本特征包括:
1.相等
2.顺序
3.边界
4.势。这是一个集合论的概念。有些值域空间里的值在数量上是有限的,而一些则是无限的。
5.数值
6.长度,最小长度,最大长度
7.式样
8.枚举
9.最大内边界,最大外边界,最小内边界,最大内边界
10.经度
11.数值范围
12.编码方式
13.持续时间
14.周期
1.3.2 数据类型
xml格式定义把数据类型和数据特征结合起来,这就使在格式定义中定义的数据项有了准确的含义。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知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

XML檔可以用PPT開啟嗎? XML,即可擴展標記語言(ExtensibleMarkupLanguage),是一種廣泛應用於資料交換和資料儲存的通用標記語言。與HTML相比,XML更加靈活,能夠定義自己的標籤和資料結構,使得資料的儲存和交換更加方便和統一。而PPT,即PowerPoint,是微軟公司開發的一種用於創建簡報的軟體。它提供了圖文並茂的方

使用Python實現XML資料的合併和去重XML(eXtensibleMarkupLanguage)是一種用於儲存和傳輸資料的標記語言。在處理XML資料時,有時候我們需要將多個XML檔案合併成一個,或移除重複的資料。本文將介紹如何使用Python實現XML資料的合併和去重的方法,並給出對應的程式碼範例。一、XML資料合併當我們有多個XML文件,需要將其合

Python中的XML資料轉換為CSV格式XML(ExtensibleMarkupLanguage)是一種可擴充標記語言,常用於資料的儲存與傳輸。而CSV(CommaSeparatedValues)則是一種以逗號分隔的文字檔案格式,常用於資料的匯入和匯出。在處理資料時,有時需要將XML資料轉換為CSV格式以便於分析和處理。 Python作為一種功能強大

使用Python實現XML資料的篩選和排序引言:XML是一種常用的資料交換格式,它以標籤和屬性的形式儲存資料。在處理XML資料時,我們經常需要對資料進行篩選和排序。 Python提供了許多有用的工具和函式庫來處理XML數據,本文將介紹如何使用Python實現XML資料的篩選和排序。讀取XML檔案在開始之前,我們需要先讀取XML檔案。 Python有許多XML處理函式庫,

Python實作XML與JSON之間的轉換導語:在日常的開發過程中,我們常常需要將資料在不同的格式之間轉換。 XML和JSON是常見的資料交換格式,在Python中,我們可以使用各種函式庫來實作XML和JSON之間的相互轉換。本文將介紹幾種常用的方法,並附帶程式碼範例。一、XML轉JSON在Python中,我們可以使用xml.etree.ElementTree模

使用Python處理XML中的錯誤和異常XML是一種常用的資料格式,用於儲存和表示結構化的資料。當我們使用Python處理XML時,有時可能會遇到一些錯誤和異常。在本篇文章中,我將介紹如何使用Python來處理XML中的錯誤和異常,並提供一些範例程式碼供參考。使用try-except語句捕捉XML解析錯誤當我們使用Python解析XML時,有時候可能會遇到一些

Python解析XML中的特殊字元和轉義序列XML(eXtensibleMarkupLanguage)是一種常用的資料交換格式,用於在不同系統之間傳輸和儲存資料。在處理XML檔案時,經常會遇到包含特殊字元和轉義序列的情況,這可能會導致解析錯誤或誤解資料。因此,在使用Python解析XML檔案時,我們需要了解如何處理這些特殊字元和轉義序列。一、特殊字元和

C#開發中如何處理XML和JSON資料格式,需要具體程式碼範例在現代軟體開發中,XML和JSON是廣泛應用的兩種資料格式。 XML(可擴展標記語言)是一種用於儲存和傳輸資料的標記語言,而JSON(JavaScript物件表示)是一種輕量級的資料交換格式。在C#開發中,我們經常需要處理和操作XML和JSON數據,本文將重點放在如何使用C#處理這兩種數據格式,並附上
