溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

soap中的xml知識有哪些

發(fā)布時(shí)間:2021-09-17 13:44:41 來源:億速云 閱讀:138 作者:小新 欄目:編程語言

這篇文章主要介紹了soap中的xml知識有哪些,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、 xml概述
在為soap尋找表述方法時(shí),這個(gè)標(biāo)準(zhǔn)的制定者們其實(shí)有很多種選擇。但他們最終選擇了盡可能利用現(xiàn)有的技術(shù),把必要的新術(shù)語數(shù)量壓縮到最少。為了描述soap信息的內(nèi)容,這些作者們選擇了xml語言。它的全稱是“extensible Markup Language”,可擴(kuò)展標(biāo)記語言。
xml語言包含的功能非常多,比soap用到或者需要用到的要多的多。比如說,在soap 標(biāo)準(zhǔn)v1.1的第三節(jié)“與xml語言的關(guān)系”部分有說“在soap消息中不得包含文檔類型說明(Document Type Declaration, DTD)”。在soap消息中不得包含處理指令(Processing Instructions)。就soap采納的xml語言標(biāo)準(zhǔn)的有關(guān)內(nèi)容來看,它定義的是soap功能的使用方法。我們很快就能體會到這一決定的英明之處:因?yàn)殚_發(fā)人員在使用soap的時(shí)候不需要擁有全功能的xml語法分析器,所以用soap來實(shí)現(xiàn)某個(gè)解決方案的工作很容易進(jìn)行。為了理解soap,我們先要弄懂以下幾個(gè)概念:
1.統(tǒng)一資源標(biāo)識符(Uniform Resource Identifiers, 簡稱URI)。
2.xml語言基礎(chǔ)。
3.xml格式定義。
4.xml名字空間。
5.xml屬性。

1.1 統(tǒng)一資源標(biāo)識符
為了訪問因特網(wǎng)上某個(gè)獨(dú)一無二的資源項(xiàng)目,必須知道如何從眾多的對象中把它標(biāo)識出來。統(tǒng)一資源描述符(URI)就是給各個(gè)資源起的名字。URI的格式:
<schema>:<schema-specific-part>
schema-specific-part部分往往還包含一些斜線字符(/),這些斜線字符表示的是路徑中的層次結(jié)構(gòu)。

1.1.1 統(tǒng)一資源定位器(URL)
大家最為熟悉的URI要算是統(tǒng)一資源定位器(Uniform Resource Locator, URL)了,他就是我么通常所說的URL地址。URL地址也要遵守URI標(biāo)識符的地址表示方法。
URL地址中的schema-specific-part部分格式是這樣的:

//<user>:<password>@<host>:<port>/<url-path>

上述語法中各組成元素的含義如下所示:
1.user:目標(biāo)地址處的用戶名(可選項(xiàng))。
2.password:分配給用戶user的密碼(可選項(xiàng))。
3.host:某個(gè)網(wǎng)絡(luò)主機(jī)的因特網(wǎng)協(xié)議地址或完整域名(必選項(xiàng))。
4.port:用來建立連接時(shí)使用的端口號。大部分協(xié)議都有默認(rèn)的端口號,比如http在缺省時(shí)將使用80端口進(jìn)行通信(可選項(xiàng))。
5.url-path:訪問某個(gè)特定資源的詳細(xì)路徑。緊跟在主機(jī)名或端口號后面的斜線字符(/)不是url-path的組成部分。

1.1.2 統(tǒng)一資源名字(URN)
與無處不在的url地址相比,大多數(shù)web用戶對統(tǒng)一資源名字(Uniform Resource Name, URN)的熟悉程度要差很多。URN與URL的不同之處在于前者不會被解析成一個(gè)獨(dú)一無二的物理地點(diǎn)。URN是一種永久性的資源標(biāo)識符(不像URL地址那樣會有一些動態(tài)的路徑信息),他們允許來自某個(gè)名字空間的其他類型標(biāo)識符被映射到URN空間里來。因此,URN的語法提供了利用現(xiàn)有的各種協(xié)議對字符數(shù)據(jù)進(jìn)行分析和編碼的能力。URN的構(gòu)成規(guī)則也遵守URI的通用性規(guī)定,它的常見格式如下:
<URN>::=”urn:”<NID>”:”<NSS>

在URN名字里要用字符串”urn:”來表示這是一個(gè)URN名字。NID是”Namespace ID”的縮寫,NSS是”Namespace-Specific String”的縮寫,給出的是與NID代表的名字空間有關(guān)的字符串。在遇到URN名字的時(shí)候,我們要根據(jù)NID的值來決定如何解釋NSS字符串。在讀取或使用URN名字的時(shí)候,要記住前導(dǎo)字符串”urn:”以及<NID>內(nèi)容里的字母是分大小寫的。
URL和URN是URI兩種最常見的用法。后面我們還會看到URI的另外一種用法:xml Namespace(xml命名空間)。

1.2 xml基礎(chǔ)
xml語言是在1996-1997年間進(jìn)入人們視線的。下面是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程序代碼,這個(gè)例子也不是很難懂。我們可以通過這段代碼看出xml文檔的一些編寫規(guī)則。
(1)第一行是一條處理指令,作用是聲明這份文檔使用的xml版本和編碼格式,文檔中的這條語句并非不可或缺,但最好還是把它加載里面。
(2)xml文檔必須有一個(gè)封閉元素(版本信息不能算作是一個(gè)封閉元素)。在例子中project把整個(gè)文檔包括在了它的起始標(biāo)記和結(jié)束標(biāo)記之間。它還有幾個(gè)子元素,子元素又可以嵌套定義。
(3)這段代碼中的所有單詞都不是xml的關(guān)鍵字。
(4)注意文檔里標(biāo)記不要拼錯(cuò)了。即使拼錯(cuò)了,xml語法分析器也會接受這份文檔,但它不會正確解析你的意圖了。如果我們想讓xml語法分析器為我們做一些檢查工作,并且只讀取正確的數(shù)據(jù)結(jié)構(gòu),那可以加上一個(gè)文檔類型說明(Document Type Declaration, DTD)或者一個(gè)xml大綱(xml schema)。這里不就DTD進(jìn)行討論了,soap技術(shù)規(guī)范的第三小節(jié)也已經(jīng)明確規(guī)定“在soap信息中不得包含文檔類型聲明”。

1.3 xml大綱
xml大綱(xml schema)比DTD的描述能力更強(qiáng)。這兩種事物都提供了對一個(gè)xml元素的結(jié)構(gòu)進(jìn)行定義的方法。雖然格式定義和DTD都允許對元素進(jìn)行定義,但只有格式定義允許給出數(shù)據(jù)的類型信息。xml數(shù)據(jù)是基于文本的,它會用字符”4”而不是”0100”這樣的二進(jìn)制形式來表示數(shù)字4(xml允許在信息中對二進(jìn)制數(shù)據(jù)進(jìn)行編碼,這樣使我們能夠把圖像數(shù)據(jù)等內(nèi)容夾在一條xml信息里發(fā)送出去)。

下面給出實(shí)例,感受下大綱優(yōu)于DTD的事實(shí)。
一個(gè)簡單的DTD有一些包含其他元素或字符數(shù)據(jù)的元素。最簡單的元素聲明是這樣的:給出元素的名字,再把元素的內(nèi)容定義為字符數(shù)據(jù)。如下所示:

<! ELEMENT element-name (#PCDATA)>

一個(gè)元素可以由其他元素組合而成。如果一個(gè)元素不多不少只包含有某個(gè)給定元素的一個(gè)實(shí)例,我們就這樣定義:

<! ELEMENT parentElement (childElement)> 
<! ELEMENT childElement (#PCDATA)>

如果parentElement元素中可能包含零個(gè)或多個(gè)childElement元素,我們就用一個(gè)星號(*)來定義,如下:

<! ELEMENT parentElement (childElement *)> 
<! ELEMENT childElement (#PCDATA)>

另外,還可以在一個(gè)DTD里指示出元素的組合情況,比如parentElement元素里包含有兩種不同數(shù)據(jù)片段的情況,如下所示:

<! ELEMENT parentElement (childElement1, childElement2)>
<! ELEMENT childElement1 (#PCDATA)>
<! ELEMENT childElement2 (#PCDATA)>

具體示例,比如圖書館里有很多書,書又有書名,作者,版權(quán)等屬性,那定義的DTD文件Library.dtd可以是:

<! ELEMENT Library (Book*)>
<! ELEMENT Book (Title, Author*, Copyright)>
<! ELEMENT Title (#PCDATA)>
<! ELEMENT Author (#PCDATA)>
<! ELEMENT Copyright (#PCDATA)>

Library是由零個(gè)或多個(gè)Book類型的元素組成的。每個(gè)Book又是由一個(gè)Title元素,零個(gè)或多個(gè)Author類型的元素和一個(gè)Copyright元素組成。Title,Author和Copyright這三種元素都包含著字符數(shù)據(jù)。我們使用這個(gè)DTD來檢查xml內(nèi)容,可以定義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>

語法分析器在需要對數(shù)據(jù)的類型進(jìn)行檢查時(shí)會自動加載Library.dtd,并根據(jù)它對文檔的內(nèi)容進(jìn)行檢查。這樣做的好處是顯而易見的,但如果我們還能在“這個(gè)元素包含著字符數(shù)據(jù)”以外給出更多的信息豈不是更好?因?yàn)楦鞣N理由,W3C最終發(fā)布了關(guān)于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>

把上面這段代碼存為一個(gè)xml文件(一般是xsd后綴)。在使用大綱的時(shí)候,只需簡單地在文檔里引用就行了,像下面:

<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”。這個(gè)字符串的作用是通知語法分析器此文檔里使用的變量名屬于給定URI指定的名字空間。如果URI以x-schema打頭,語法分析器就必須從指定地址加載相應(yīng)的大綱文件。如果沒有其他說明,帶有xmlns聲明的起始標(biāo)記及對應(yīng)的結(jié)束標(biāo)記之間的所有元素都是指定的名字空間的一部分。

1.3.1 數(shù)據(jù)特征
為了更好地對數(shù)據(jù)進(jìn)行定義和類型校驗(yàn),xml大綱使用了“數(shù)據(jù)特征(facets)”來定義某個(gè)特定的數(shù)據(jù)類型的特性。一個(gè)數(shù)據(jù)值域空間的每個(gè)特性都必須用一個(gè)數(shù)據(jù)特征來定義。而一個(gè)“數(shù)據(jù)值域空間”就是一個(gè)給定的數(shù)據(jù)類型的全體有效數(shù)據(jù)值的集合。不同的數(shù)據(jù)類型是通過他們各自的數(shù)據(jù)特征來區(qū)分的。xml大綱文檔定義的數(shù)據(jù)特征又分為兩大類:基本特征和非基本特征。
一個(gè)基本特征就是某個(gè)數(shù)據(jù)值域空間里的數(shù)據(jù)值的一個(gè)抽象特性,他給出了這類數(shù)據(jù)值的一個(gè)基本特點(diǎn)。數(shù)據(jù)值的基本特征包括:
1.相等
2.順序
3.邊界
4.勢。這是一個(gè)集合論的概念。有些值域空間里的值在數(shù)量上是有限的,而一些則是無限的。
5.數(shù)值
6.長度,最小長度,最大長度
7.式樣
8.枚舉
9.最大內(nèi)邊界,最大外邊界,最小內(nèi)邊界,最大內(nèi)邊界
10.經(jīng)度
11.數(shù)值范圍
12.編碼方式
13.持續(xù)時(shí)間
14.周期

1.3.2 數(shù)據(jù)類型
xml格式定義把數(shù)據(jù)類型和數(shù)據(jù)特征結(jié)合起來,這就使在格式定義中定義的數(shù)據(jù)項(xiàng)有了準(zhǔn)確的含義。www.w3.org/2001/XMLSchema中定義了許多數(shù)據(jù)類型。

1.4 xml命名空間
在上面已經(jīng)見過xml命名空間(xml namespaces)的用法了。命名空間的作用簡單說來就是對用在一段上下文里的一組變量名進(jìn)行定義和聲明。名字空間可以使用任意URN,但前提條件是這個(gè)URN必須是獨(dú)一無二的。

1.5 xml屬性
出現(xiàn)在這本書里的所有xml文檔都使用了元素來表示數(shù)據(jù)。但大家應(yīng)該知道xml也支持屬性概念。元素必須有起始標(biāo)記和結(jié)束標(biāo)記,屬性則不同,他們不需要標(biāo)記,只要把他們放到元素的起始標(biāo)記里就行了。
對屬性進(jìn)行聲明有三種不同的辦法:
1.精心編寫的xml,但不包含任何DTD或大綱
2.精心編寫的xml,使用一個(gè)DTD
3.精心編寫的xml,使用一個(gè)或者多個(gè)大綱。
第一種辦法能正常運(yùn)行,但實(shí)用環(huán)境中效果并不好,而soap又禁止使用DTD,所以我們就說下第三種方法吧。在xml大綱創(chuàng)建屬性的時(shí)候,需要使用attributeType和attribute這兩個(gè)關(guān)鍵字。這兩個(gè)關(guān)鍵字只在大綱所屬的名字空間里有意義。attributeType用來定義某個(gè)類型的特性,而attribute則指出該元素類型定義所針對的對象。
為了使用屬性對book進(jìn)行描述,相應(yīng)的大綱應(yīng)該是下面這個(gè)樣子:

<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:屬性的默認(rèn)值。
xsi:type:該屬性的數(shù)據(jù)類型。如果選擇的是枚舉類型,還要天上xsi:value。
name:屬性類型的名字。為了對attributeType進(jìn)行類型檢查,必須有一個(gè)名字。
required:表明一個(gè)包含有attributeType的元素是否必須帶有此處定義的屬性。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“soap中的xml知識有哪些”這篇文章對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI