⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soap协议规范.htm

📁 internet协议集
💻 HTM
📖 第 1 页 / 共 5 页
字号:
        <BR>&lt;/e:Person&gt;</P></BLOCKQUOTE>
      <P>序列化可以包含对不在同一个资源的值的引用:</P>
      <BLOCKQUOTE>
        <P>&lt;e:Book&gt; <BR>&lt;title&gt;Paradise Lost&lt;/title&gt; 
        <BR>&lt;firstauthor href="http://www.dartmouth.edu/~milton/"/&gt; 
        <BR>&lt;/e:Book&gt;</P></BLOCKQUOTE>
      <P>以下是描述上面结构的schema片断:</P>
      <BLOCKQUOTE>
        <P>&lt;element name="Book" type="tns:Book"/&gt; <BR>&lt;complexType 
        name="Book"&gt; <BR>&lt;!-- Either the following group must occur or 
        else the <BR>href attribute must appear, but not both. --&gt; 
        <BR>&lt;sequence minOccurs="0" maxOccurs="1"&gt; <BR>&lt;element 
        name="title" type="xsd:string"/&gt; <BR>&lt;element name="firstauthor" 
        type="tns:Person"/&gt; <BR>&lt;element name="secondauthor" 
        type="tns:Person"/&gt; <BR>&lt;/sequence&gt; <BR>&lt;attribute 
        name="href" type="uriReference"/&gt; <BR>&lt;attribute name="id" 
        type="ID"/&gt; <BR>&lt;anyAttribute namespace="##other"/&gt; 
        <BR>&lt;/complexType&gt; <BR>&lt;element name="Person" 
        base="tns:Person"/&gt; <BR>&lt;complexType name="Person"&gt; <BR>&lt;!-- 
        Either the following group must occur or else the <BR>href attribute 
        must appear, but not both. --&gt; <BR>&lt;sequence minOccurs="0" 
        maxOccurs="1"&gt; <BR>&lt;element name="name" type="xsd:string"/&gt; 
        <BR>&lt;element name="address" type="tns:Address"/&gt; 
        <BR>&lt;/sequence&gt; <BR>&lt;attribute name="href" 
        type="uriReference"/&gt; <BR>&lt;attribute name="id" type="ID"/&gt; 
        <BR>&lt;anyAttribute namespace="##other"/&gt; <BR>&lt;/complexType&gt; 
        <BR>&lt;element name="Address" base="tns:Address"/&gt; 
        <BR>&lt;complexType name="Address"&gt; <BR>&lt;!-- Either the following 
        group must occur or else the <BR>href attribute must appear, but not 
        both. --&gt; <BR>&lt;sequence minOccurs="0" maxOccurs="1"&gt; 
        <BR>&lt;element name="street" type="xsd:string"/&gt; <BR>&lt;element 
        name="city" type="xsd:string"/&gt; <BR>&lt;element name="state" 
        type="xsd:string"/&gt; <BR>&lt;/sequence&gt; <BR>&lt;attribute 
        name="href" type="uriReference"/&gt; <BR>&lt;attribute name="id" 
        type="ID"/&gt; <BR>&lt;anyAttribute namespace="##other"/&gt; 
        <BR>&lt;/complexType&gt;</P></BLOCKQUOTE>
      <H4>5.4.2 数组</H4>
      <P>SOAP数组定义为具有"SOAP-ENC:Array"类型或一个从"SOAP-ENC:Array"衍生的类型(参见规则8)。数组表示为元素值,对元素的名没有特别的约束(正如元素值并不约束它们所属的元素)。数组可以包含任意类型的元素,包括嵌套数组。可以创建新的类型(受SOAP-ENC:Array 
      <BR>类型限制)来表示数组,如整数数组或某些用户定义的枚举。数组值表示为组成这个数组的项的元素的规则序列。在数组值中,元素名对于区分accesor并不重要。元素可以有任意的名。实际上,元素常常用它们在schema中暗示或确定的数组类型来命名元素。并且一般情况下对于复合值来说,如果数组中数组项的值是single-reference值,则这个数组项包含它的值,否则,该数组项通过"href"属性引用这个值。下面的例子是一个整型数组的schema片断:</P>
      <BLOCKQUOTE>
        <P>&lt;element name="myFavoriteNumbers" <BR>type="SOAP-ENC:Array"/&gt; 
        <BR>&lt;myFavoriteNumbers <BR>SOAP-ENC:arrayType="xsd:int[2]"&gt; 
        <BR>&lt;number&gt;3&lt;/number&gt; <BR>&lt;number&gt;4&lt;/number&gt; 
        <BR>&lt;/myFavoriteNumbers&gt;</P></BLOCKQUOTE>
      <P>在这个例子中,数组"myFavoriteNumbers"包括几个成员,每个成员是一个类型为SOAP-ENC:int的值。注意SOAP-ENC:Array允许不受限制的元素名,它们不传达任何类型信息,所以在使用时,或者它们有xsi:type属性,或者它们所属的元素有SOAP-ENC:arrayType属性。自然,由SOAP-ENC:Array衍生的类型可以声明局部元素,但这种情况下要包括类型信息。上面已经提到,SOAP-ENC 
      schema包含了元素的声明,元素名与"XML Schema Part 2: 
      Datatypes"规范[11]中的简单类型一致。其中包括了对"Array"的声明。于是,我们可以这样写:</P>
      <BLOCKQUOTE>
        <P>&lt;SOAP-ENC:Array SOAP-ENC:arrayType="xsd:int[2]"&gt; 
        <BR>&lt;SOAP-ENC:int&gt;3&lt;/SOAP-ENC:int&gt; 
        <BR>&lt;SOAP-ENC:int&gt;4&lt;/SOAP-ENC:int&gt; 
        <BR>&lt;/SOAP-ENC:Array&gt;</P></BLOCKQUOTE>
      <P>数组可以包含特定arrayType的任意子类型的实例。即,数组成员可以是arryType属性值指定的类型的任意子类型,这个类型对于arrayType属性中指定的类型来说是可替换的(根据schema中的替换规则)。例如,一个整型数组可以包含从整型衍生的任意类型(如"int"或任意用户定义的从整型衍生的类型)。同样,一个"address"数组可能包含一个address的受限类型或扩展类型如"internationalAddress"。因为提供的SOAP-ENC:Array类型允许任意类型的成员,所以可以包含任意类型的混合除非使用arrayType属性加以特别的限制。在实例中,可以使用xsi:type指定成员元素的类型,或通过schema中成员元素的声明来指定。下面是两个例子。</P>
      <BLOCKQUOTE>
        <P>&lt;SOAP-ENC:Array SOAP-ENC:arrayType="SOAP-ENC:ur-type[4]"&gt; 
        <BR>&lt;thing xsi:type="xsd:int"&gt;12345&lt;/thing&gt; <BR>&lt;thing 
        xsi:type="xsd:decimal"&gt;6.789&lt;/thing&gt; <BR>&lt;thing 
        xsi:type="xsd:string"&gt; <BR>Of Mans First Disobedience, and the Fruit 
        <BR>Of that Forbidden Tree, whose mortal tast <BR>Brought Death into the 
        World, and all our woe, <BR>&lt;/thing&gt; <BR>&lt;thing 
        xsi:type="xsd:uriReference"&gt; 
        http://www.dartmouth.edu/~milton/reading_room/ &lt;/thing&gt; 
        <BR>&lt;/SOAP-ENC:Array&gt; <BR>&lt;SOAP-ENC:Array 
        SOAP-ENC:arrayType="SOAP-ENC:ur-type[4]"&gt; 
        <BR>&lt;SOAP-ENC:int&gt;12345&lt;/SOAP-ENC:int&gt; 
        <BR>&lt;SOAP-ENC:decimal&gt;6.789&lt;/SOAP-ENC:decimal&gt; 
        <BR>&lt;xsd:string&gt; <BR>Of Mans First Disobedience, and the Fruit 
        <BR>Of that Forbidden Tree, whose mortal tast <BR>Brought Death into the 
        World, and all our woe, <BR>&lt;/xsd:string&gt; 
        <BR>&lt;SOAP-ENC:uriReference&gt; 
        http://www.dartmouth.edu/~milton/reading_room/ 
        &lt;/SOAP-ENC:uriReference &gt; 
      <BR>&lt;/SOAP-ENC:Array&gt;</P></BLOCKQUOTE>
      <P>数组值可以是结构或其它复合值。例如"xyz:Order"结构数组:</P>
      <BLOCKQUOTE>
        <P>&lt;SOAP-ENC:Array SOAP-ENC:arrayType="xyz:Order[2]"&gt; 
        <BR>&lt;Order&gt; <BR>&lt;Product&gt;Apple&lt;/Product&gt; 
        <BR>&lt;Price&gt;1.56&lt;/Price&gt; <BR>&lt;/Order&gt; <BR>&lt;Order&gt; 
        <BR>&lt;Product&gt;Peach&lt;/Product&gt; 
        <BR>&lt;Price&gt;1.48&lt;/Price&gt; <BR>&lt;/Order&gt; 
        <BR>&lt;/SOAP-ENC:Array&gt;</P></BLOCKQUOTE>
      <P>数组成员值也可以是数组。下例是两个字符串数组组成的数组:</P>
      <BLOCKQUOTE>
        <P>&lt;SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[][2]"&gt; 
        <BR>&lt;item href="#array-1"/&gt; <BR>&lt;item href="#array-2"/&gt; 
        <BR>&lt;/SOAP-ENC:Array&gt; <BR>&lt;SOAP-ENC:Array id="array-1" 
        SOAP-ENC:arrayType="xsd:string[2]"&gt; <BR>&lt;item&gt;r1c1&lt;/item&gt; 
        <BR>&lt;item&gt;r1c2&lt;/item&gt; <BR>&lt;item&gt;r1c3&lt;/item&gt; 
        <BR>&lt;/SOAP-ENC:Array&gt; <BR>&lt;SOAP-ENC:Array id="array-2" 
        SOAP-ENC:arrayType="xsd:string[2]"&gt; <BR>&lt;item&gt;r2c1&lt;/item&gt; 
        <BR>&lt;item&gt;r2c2&lt;/item&gt; 
      <BR>&lt;/SOAP-ENC:Array&gt;</P></BLOCKQUOTE>
      <P>包含数组的元素无需命名为"SOAP-ENC:Array"。它可以有任意的名,只要元素的类型是SOAP-ENC:Array或由之衍生的类型。例如,下面是一个schema片断和与之一致的数组实例。</P>
      <BLOCKQUOTE>
        <P>&lt;simpleType name="phoneNumber" base="string"/&gt; <BR>&lt;element 
        name="ArrayOfPhoneNumbers"&gt; <BR>&lt;complexType 
        base="SOAP-ENC:Array"&gt; <BR>&lt;element name="phoneNumber" 
        type="tns:phoneNumber" maxOccurs="unbounded" /&gt; 
        <BR>&lt;/complexType&gt; <BR>&lt;anyAttribute/&gt; <BR>&lt;/element&gt; 
        <BR>&lt;xyz:ArrayOfPhoneNumbers 
        SOAP-ENC:arrayType="xyz:phoneNumber[2]"&gt; 
        <BR>&lt;phoneNumber&gt;206-555-1212&lt;/phoneNumber&gt; 
        <BR>&lt;phoneNumber&gt;1-888-123-4567&lt;/phoneNumber&gt; 
        <BR>&lt;/xyz:ArrayOfPhoneNumbers&gt;</P></BLOCKQUOTE>
      <P>数组可能是多维的。在这种情况下,在arrayType属性的asize部分将不止有一个值:</P>
      <BLOCKQUOTE>
        <P>&lt;SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[2,3]"&gt; 
        <BR>&lt;item&gt;r1c1&lt;/item&gt; <BR>&lt;item&gt;r1c2&lt;/item&gt; 
        <BR>&lt;item&gt;r1c3&lt;/item&gt; <BR>&lt;item&gt;r2c1&lt;/item&gt; 
        <BR>&lt;item&gt;r2c2&lt;/item&gt; <BR>&lt;item&gt;r2c3&lt;/item&gt; 
        <BR>&lt;/SOAP-ENC:Array&gt;</P></BLOCKQUOTE>
      <P>虽然上面的例子把数组编码为独立的元素,但元素值也可以是嵌入形式,而且若元素值是single 
      reference时,必须编码为嵌入形式。下例是一个schema片断,电话号码数组嵌入到一个类型为"Person"的结构中,并且通过accessor 
      "phone-numbers"访问它:</P>
      <BLOCKQUOTE>
        <P>&lt;simpleType name="phoneNumber" base="string"/&gt; <BR>&lt;element 
        name="ArrayOfPhoneNumbers"&gt; <BR>&lt;complexType 
        base="SOAP-ENC:Array"&gt; <BR>&lt;element name="phoneNumber" 
        type="tns:phoneNumber" maxOccurs="unbounded"/&gt; 
        <BR>&lt;/complexType&gt; <BR>&lt;anyAttribute/&gt; <BR>&lt;/element&gt; 
        <BR>&lt;element name="Person"&gt; <BR>&lt;complexType&gt; 
        <BR>&lt;element name="name" type="string"/&gt; <BR>&lt;element 
        name="phoneNumbers" type="tns:ArrayOfPhoneNumbers"/&gt; 
        <BR>&lt;/complexType&gt; <BR>&lt;/element&gt; <BR>&lt;xyz:Person&gt; 
        <BR>&lt;name&gt;John Hancock&lt;/name&gt; <BR>&lt;phoneNumbers 
        SOAP-ENC:arrayType="xyz:phoneNumber[2]"&gt; 
        <BR>&lt;phoneNumber&gt;206-555-1212&lt;/phoneNumber&gt; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -