国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

描述與注冊(cè),發(fā)布Web服務(wù)(((ok了轉(zhuǎn)完了)))

2024-07-21 02:21:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
,歡迎訪問(wèn)網(wǎng)頁(yè)設(shè)計(jì)愛(ài)好者web開(kāi)發(fā)。架構(gòu)web service: 描述與注冊(cè),發(fā)布web服務(wù)  
  


   
內(nèi)容:

soap消息示例
xml schema建模
wsdl服務(wù)描述
uddi服務(wù)發(fā)布
總結(jié)
參考資料
作者簡(jiǎn)介


相關(guān)內(nèi)容:

交互界面,web服務(wù)定義的核心
實(shí)戰(zhàn)web服務(wù)
基于web服務(wù)的應(yīng)用、解決方案和開(kāi)發(fā)平臺(tái)
什么是web服務(wù)?
為什么需要web服務(wù)?
wsdl: 描述你的web服務(wù)
uddi 注冊(cè)信息的數(shù)據(jù)模型




柴曉路 ([email protected])
chief system architect
2001年9月20日

本文是架構(gòu)web服務(wù)的系列文章的第六篇,也是最后一篇,文本以前文為基礎(chǔ),在前文的應(yīng)用實(shí)例的基礎(chǔ)上,考察了發(fā)布web服務(wù)界面的整個(gè)過(guò)程:xml schema建模、wsdl發(fā)布和uddi注冊(cè)。通過(guò)本文,大家可以詳細(xì)具體地了解各個(gè)xml和web service的系列規(guī)范在web service的發(fā)布時(shí)所起的左右,對(duì)web service技術(shù)也將有一個(gè)深入的理解。
在前文中,我已經(jīng)介紹過(guò),web服務(wù)是通過(guò)soap消息調(diào)用的,通過(guò)wsdl進(jìn)行界面描述的,以及通過(guò)uddi進(jìn)行公共注冊(cè)發(fā)布的。在前一篇文章中,我已經(jīng)介紹了如何進(jìn)行soap api的消息定義,那么在本文中,我將單把save_category提出來(lái),看看在具體的實(shí)現(xiàn)上,應(yīng)當(dāng)如何對(duì)這個(gè)消息使用w3c xml schema進(jìn)行建模,如果使用wsdl將基于該消息調(diào)用的web服務(wù)進(jìn)行規(guī)范描述并交付調(diào)用者,以及如何將這個(gè)web服務(wù)連同它的wsdl規(guī)范化描述文件一起發(fā)布到uddi注冊(cè)中心中去。希望大家能通過(guò)本文的實(shí)例講解,在本系列的最后完整地了解web服務(wù)的工作原理和相關(guān)技術(shù)規(guī)范的作用。

本文所引用的資源主要包括兩類,一類是web服務(wù)的技術(shù)資源網(wǎng)站,包含了大量web服務(wù)的技術(shù)信息,另一類是web服務(wù)“stack"系列技術(shù)規(guī)范,他們是一個(gè)整體的技術(shù)體系,包括uddi、soap、wsdl、xml schema, xml等。本文的最后給出了這些資源的鏈接,有興趣的讀者可以通過(guò)這些資源鏈接找到所需的內(nèi)容。

soap消息示例

以下是一個(gè)save_category的調(diào)用例子,在例子中使用了soap http binding(使用的soap規(guī)范的版本是1.2),假設(shè)目標(biāo)web服務(wù)被部署在www.sagitta.com,而調(diào)用的web服務(wù)的入口位置將是http://www.sagitta.com/catalog/。

在這個(gè)消息中,將在一個(gè)現(xiàn)有的category中添加一個(gè)新的category和一個(gè)新的product。


post /catalog http/1.1
content-type: text/xml; charset="utf-8"
content-length: nnnn
soapaction: "http://www.sagitta.com/catalog/"
host: www.sagitta.com

<?xml version="1.0" encoding="utf-8" ?>
<env:envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope">
  <env:body>
    <save_category xmlns="http://www.sagitta.com/schema/">
      <authinfo>5az784kjcehce982eb</authinfo>
      <category categorykey="cb4e17d1-6100-47f6-a532-cd9cbd30c073" parentcategorykey="ab4e3de1-7865-f2c1-b49a-beccbd21c072">
        <name>consumer electronics</name>
        <description>product category for consumer electronics </description>
        <category categorykey="" parentcategorykey="cb4e17d1-6100-47f6-a532-cd9cbd30c073">
          <name>sony consumer electronics</name>
          <description>sony's product category for consumer electronics</description>
        </category>
        <product productkey="" parentcategorykey=" cb4e17d1-6100-47f6-a532-cd9cbd30c073">
          <name>dsc-s75 digital camera</name>
          <description>sony's brand-new professional digital camera</description>
          <compliantspecbag>
            <specification specificationkey="key[usb1.1]" />
          </compliantspecbag>
          <featurebag>
            <feature>……</feature>
            <feature>……</feature>
          </featurebag>
          <parameterbag>
            ……
          </parameterbag>
        </product>
      </category>
    </save_category>
  </env:body>
</env:envelope>




該調(diào)用消息的返回消息可能是:

http/1.1 200 ok
content-type: text/xml; charset="utf-8"
content-length: nnnn

<?xml version="1.0" encoding="utf-8" ?>
<env:envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope">
  <env:body>
    <categorylist xmlns="http://www.sagitta.com/schema/">
      <category categorykey="cb4e17d1-6100-47f6-a532-cd9cbd30c073" parentcategorykey="ab4e3de1-7865-f2c1-b49a-beccbd21c072">
        <category categorykey="8933aa50-3aaf-11d5-80dc-002035229c64" parentcategorykey="cb4e17d1-6100-47f6-a532-cd9cbd30c073" />
        <product productkey="89307600-3aaf-11d5-80dc-002035229c64" parentcategorykey="cb4e17d1-6100-47f6-a532-cd9cbd30c073" />
      </category>
    </categorylist>
  </env:body>
</env:envelope>




從中我們可以看到在save_category和categorylist兩個(gè)元素后面都帶了一個(gè)xmlns的修飾"http://www.sagitta.com/schema/"。這uri唯一表示了該元素及其所有子元素的的命名空間。同時(shí)通過(guò)這個(gè)url可以獲得這些元素的schema定義。

使用w3c xml schema描述的xml文檔的模式定義在整個(gè)web服務(wù)的技術(shù)系列中處于一個(gè)支持工具的地位。w3c xml schema是任何類型的xml文檔的建模工具。在web服務(wù)體系中,無(wú)論在soap消息的表示上,還是在wsdl的界面描述上,xml schema都是不可缺少的重要工具和底層支持。

下面我將從xml schema開(kāi)始,針對(duì)save_category這個(gè)消息(同時(shí)也對(duì)應(yīng)一個(gè)服務(wù)入口)逐一介紹如何為我們的xml消息進(jìn)行xml schema建模,如何使用wsdl將save_category這個(gè)服務(wù)入口進(jìn)行界面描述,然后將這個(gè)入口發(fā)布到uddi注冊(cè)中心中去。

xml schema建模

xml schema的文件后綴是.xsd文件,一個(gè)xml schema中的定義通常分為兩部分,型(type)定義和元素(element)定義。下面我們結(jié)合save_category具體的xml schema定義來(lái)說(shuō)明如何使用xml schema來(lái)實(shí)現(xiàn)模式定義。

在下面的xml schema文檔中,型定義包括:compliantspecbag,featurebag,parameter,parameterbag,product和category六個(gè)類型,而元素定義為save_category這一個(gè)元素。

save_category的xml schema描述定義:(完整的xml schema文檔是:sagitta.xsd)


<?xml version="1.0" encoding="utf-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" elementformdefault="qualified" attributeformdefault="unqualified">




以上是xml schema的文件頭。


  <xs:complextype name="compliantspecbag">
    <xs:sequence>
      <xs:element name="specification" minoccurs="0" maxoccurs="unbounded">
        <xs:complextype>
          <xs:simplecontent>
            <xs:extension base="xs:string">
              <xs:attribute name="specificationkey" type="xs:string" use="required"/>
            </xs:extension>
          </xs:simplecontent>
        </xs:complextype>
      </xs:element>
    </xs:sequence>
  </xs:complextype>




在這段schema描述中,描述了compliantspecbag這個(gè)元素類型,任何使用compliantspecbag類型的元素可以包含的元素是specification,這個(gè)元素可以出現(xiàn)0次到無(wú)窮次(無(wú)限制,事實(shí)上不可能出現(xiàn)無(wú)窮次),而specification這個(gè)元素中包含一個(gè)屬性specificationkey,該屬性是必須的,同時(shí)類型為字符串(xs:string)。xs這個(gè)命名空間是w3c xml schema 2001的命名空間(namespace)。


  <xs:complextype name="featurebag">
    <xs:sequence>
      <xs:element name="feature" type="xs:string" minoccurs="0" maxoccurs="unbounded"/>
    </xs:sequence>
  </xs:complextype>




在這里,描述了featurebag這個(gè)元素類型,任何使用featurebag類型的文檔元素可以包含的子元素是feature,而feature元素能夠出現(xiàn)0次到無(wú)窮次(無(wú)限制,事實(shí)上不可能出現(xiàn)無(wú)窮次)。該元素的內(nèi)容的類型是字符串(xs:string)。


  <xs:complextype name="parameter">
    <xs:sequence>
      <xs:element name="keyname" type="xs:string"/>
      <xs:element name="keyvalue" type="xs:string"/>
    </xs:sequence>
  </xs:complextype>

  <xs:complextype name="parameterbag">
    <xs:sequence>
      <xs:element name="parameter" type="parameter" minoccurs="0" maxoccurs="unbounded"/>
    </xs:sequence>
  </xs:complextype>




這里首先描述了parameter這個(gè)元素類型,任何使用parameter類型的文檔元素可以包含的子元素有兩個(gè)keyname和keyvalue,它們都是必須出現(xiàn)的子元素,同時(shí)僅可出現(xiàn)一次。他們的類型也都是字符串(xs:string)。然后描述的是parameterbag元素類型,任何使用parameterbag類型的文檔元素可以包含的子元素是parameter,而這個(gè)子元素的類型是先前定義的parameter(在xml schema中,類型名和元素名的域空間是正交的,不需要考慮任何的名字重復(fù)問(wèn)題),parameter元素出現(xiàn)的次數(shù)可以是從0次到無(wú)窮次。


  <xs:complextype name="product">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="description" type="xs:string"/>
      <xs:element name="compliantspecbag" type="compliantspecbag"/>
      <xs:element name="featurebag" type="featurebag"/>
      <xs:element name="parameterbag" type="parameterbag"/>
    </xs:sequence>
    <xs:attribute name="productkey" type="xs:string" use="required"/><xs:attribute name="parentcategorykey" type="xs:string" use="required"/>
  </xs:complextype>




這里描述了product這個(gè)元素類型,任何使用product類型的文檔元素可以包含的子元素是name、description、compliantspecbag、featurebag、parameterbag。name和description元素的類型都是xs:string。而compliantspecbag、featurebag、parameterbag的類型大家通過(guò)查看這斷xml schema定義也可以很清楚地發(fā)現(xiàn)是引用了前面定義的這些類型定義。任何使用product類型的文檔元素還有兩個(gè)必須出現(xiàn)的屬性productkey和parentcategorykey,這是兩個(gè)字符串(xs:string)類型的屬性值,分別表示了自身元素的鍵值和父輩category的鍵值。


  <xs:complextype name="category">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="description" type="xs:string"/>
      <xs:element name="category" type="category" minoccurs="0" maxoccurs="unbounded"/>
      <xs:element name="product" type="product" minoccurs="0" maxoccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="categorykey" type="xs:string" use="required"/>
    <xs:attribute name="parentcategorykey" type="xs:string" use="required"/>
  </xs:complextype>




這是category元素類型的描述,任何使用product類型的文檔元素可以包含的子元素是name、description、category和product。name和description元素的類型都是簡(jiǎn)單類型xs:string。而category是一個(gè)遞歸元素,引用了自身這個(gè)元素類型。而product的元素類型則是前面描述好的product類型。任何使用product類型的文檔元素還有兩個(gè)必須出現(xiàn)的屬性categorykey和parentcategorykey,這是兩個(gè)字符串(xs:string)類型的屬性值,分別表示了自身元素的鍵值和父輩category的鍵值。


  <xs:element name="save_category">
    <xs:complextype>
      <xs:sequence>
        <xs:element name="authinfo" type="xs:base64binary"/>
        <xs:element name="category" type="category" minoccurs="0" maxoccurs="unbounded"/>
      </xs:sequence>
    </xs:complextype>
  </xs:element>




這是在這個(gè)schema文檔中唯一的一個(gè)元素定義,元素save_category是一個(gè)復(fù)合類型,它的元素可以有authinfo和category。其中authinfo是一個(gè)base64編碼的字符串,而category則是一個(gè)可以出現(xiàn)0次到無(wú)限次的類型為category的子元素。我們不難發(fā)現(xiàn)元素定義和類型定義的基本機(jī)制是一樣的,事實(shí)上,我們完全可以將這段定義拆分成兩段,一段為類型定義,一段為元素定義,下面給出這個(gè)等價(jià)實(shí)例,希望有助于對(duì)schema的理解。


  <xs:complextype name="save_category">
    <xs:sequence>
      <xs:element name="authinfo" type="xs:base64binary"/>
      <xs:element name="category" type="category" minoccurs="0" maxoccurs="unbounded"/>
    </xs:sequence>
  </xs:complextype>

  <xs:element name="save_category" type="save_category" />




那為什么要采用第一種方法,而不使用第二種方法呢,原因也很簡(jiǎn)單,由于整個(gè)web服務(wù)相關(guān)的消息schema中,諸如category、product、featurebag、compliantspecbag、parameterbag這些元素都可能被復(fù)用,因此定義成類型比較合適,而save_category是一個(gè)單一的消息,不可能被其他元素復(fù)用,因此就直接定義成了元素。


</xs:schema>




發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 库尔勒市| 江永县| 花垣县| 陆川县| 北安市| 丹凤县| 钦州市| 余姚市| 朝阳市| 阿克陶县| 清流县| 宜宾县| 青田县| 威海市| 遵义市| 思南县| 五原县| 镇巴县| 河东区| 乌海市| 萝北县| 磐安县| 金平| 页游| 剑阁县| 新郑市| 界首市| 陵川县| 丽江市| 凤阳县| 新兴县| 延寿县| 弥勒县| 新河县| 原阳县| 康定县| 九龙县| 韶山市| 汝阳县| 昆山市| 霍林郭勒市|